17.05 - 行パーティション テーブル、グローバル一時テーブル、およびNoPIテーブルへの挿入 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-175K-JPN
Language
日本語 (日本)

行パーティション テーブルへの挿入

この項では、行パーティション テーブルへの行の挿入ルールをリストします。
  • 空の行パーティションに行を挿入する操作は最適化され、各行の一時ジャーナルが空のパーティションに挿入されることはなくなります。この最適化処理は、参照保全性リレーションシップで定義されたテーブルではないテーブルに対してのみ適用されます。
  • ゼロ除算エラーのなどのパーティション式評価エラーの結果は、セッション モードに依存します。
    セッション モード作業単位 式評価エラーがロールバックする作業単位
    ANSI アボートされたリクエストを含んでいるリクエスト
    Teradata アボートされたリクエストを含むトランザクション。
  • パーティション式がRANGE_NまたはCASE_N関数ではない単一レベルの行パーティション テーブルに行を挿入するとき、パーティション式(データ型がINTEGERでない場合、INTEGERにキャストした後)の結果は1~65,535の非NULL値である必要があります。
  • 行を行パーティション テーブルに挿入するとき、その行のパーティション式(RANGE_N関数またはCASE_N関数である必要があります)の結果は非NULL値である必要があります。
  • 行パーティション結合インデックスへの挿入が発生する行を基本テーブルに挿入するとき、その結合インデックスのパーティション式の結果は非NULL値である必要があります。
  • 単一レベル行パーティション結合インデックスへの挿入が発生する行を基本テーブルに挿入するとき、RANGE_NでもCASE_Nでもないパーティション式に対し、パーティション式(データ型がINTEGERでない場合、INTEGERにキャストした後)の結果は1~65,535の非null値である必要があります。
  • 行パーティション結合インデックスでの結合インデックス行の更新が発生する行を基本テーブルに挿入するとき、その更新されたインデックス行のパーティション式の結果は非null値である必要があります。
  • 行パーティション結合インデックスで結合インデックス行を単一レベルの行パーティションで更新する基本テーブルに行を挿入し、そのパーティション式がRANGE_NまたはCASE_Nでない場合、パーティション式の結果(データ型がINTEGERではない場合、INTEGERにキャストした後)は1~65,535の非null値である必要があります。
  • 挿入操作でシステム派生列PARTITIONまたはPARTITION#L1~PARTITION#L62に値およびnullを割当てることはできません。
  • 挿入操作の成功のために、行パーティション テーブルが作成された時点のセッション モードおよびセッション照合が、現在のセッション モードおよび照合と一致する必要はありません。行挿入先のパーティションは、テーブルのセッション モードと照合を使用してパーティション列値のパーティション式を評価することによって決まるからです。
  • 文字パーティションで定義されたテーブルへの行の挿入について、照合は次の影響を及ぼします。
    • 行パーティション テーブルの照合がMULTINATIONALかCHARSET_COLLのいずれかで、テーブルが作成されてから照合の定義に変更があった場合、データベースはテーブルへの行の挿入を試みるリクエストをアボートし、要求元にエラーを返します。
    • テーブルに、照合シーケンスがMULTINATIONALまたはCHARSET_COLLのいずれかの、文字パーティションを使った非圧縮結合インデックスが定義されていて、結合インデックスが作成されてから照合の定義に変更があった場合、システムはテーブルへの行の挿入を試みるリクエストをアボートし、挿入によって結合インデックスで行が変更されたかどうかに関係なく、要求元にエラーを返します。
  • テーブルまたは非圧縮結合インデックスのパーティション式が、Unicode文字式またはリテラルを伴い、テーブルまたは結合インデックスが定義されたときに有効だったコード ポイントとは一致しないUnicodeコード ポイントを持つリリースにまでシステムが戻されると、データベースはテーブルへの行挿入の試みをアボートし、要求元にエラーを返します。

グローバル一時テーブルへの挿入

グローバル一時テーブルへ挿入を行なうと、現在のセッション内でそのテーブルのインスタンスを作成します。

NoPIテーブルへの挿入

INSERTを使用して、行をNoPIテーブルに挿入できます。Teradata Parallel Data Pump操作では、NoPIテーブルに対するArray INSERTを使用して、データをロードします。また、INSERT ... SELECT操作を使用すると、NoPIテーブルに対してデータのバッチ式の挿入を実行することもできます。挿入は、プライマリ インデックス テーブルと同じ方法で一時ジャーナル化されます。NoPIテーブルの詳細については、<Teradata Vantage™ - データベースの設計、B035-1094>を参照してください。

これから示すINSERTの用例は、次のテーブル定義を基にしています。

     CREATE TABLE sales,
     FALLBACK (
       ItemNbr   INTEGER NOT NULL,
       SaleDate  DATE FORMAT 'MM/DD/YYYY' NOT NULL,
       ItemCount INTEGER)
     PRIMARY INDEX (ItemNbr);
     CREATE TABLE newsales,
     FALLBACK (
       ItemNbr   INTEGER NOT NULL,
       SaleDate  DATE FORMAT 'MM/DD/YYYY' NOT NULL,
       ItemCount INTEGER)
     NO PRIMARY INDEX;

INSERTリクエストの場合、システムは、ランダムにAMPを選択して行または列を送信します。以下のような単純なリクエストの場合、および複数の行配列の挿入を含むより複雑なリクエストの場合は真です。

     INSERT INTO newsales (100, '11/01/2007', 10);

次にAMPは行または行配列を適切な形式に変換し、ターゲット テーブルの末尾に追加します(この例ではnewsales)。

以下のようなINSERT ... SELECTを使用してソース テーブルからNoPIテーブルにデータを挿入すると、ソース テーブルのデータは再配置されません。データはローカルにターゲット テーブルに追加されます。

SELECTがソース テーブルから制約されていて、AMPから返された行にスキューが生じると、NoPIテーブルまたはNoPI列パーティション テーブルにもスキューが生じることがあります。これは、行のセットが再配置されずテーブルにローカルに挿入されるためです。

     INSERT INTO newsales
     SELECT *
     FROM sales;