INSERT…SELECTの使用 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - データベースの管理

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/rgu1556127906220.ditamap
dita:ditavalPath
ja-JP/rgu1556127906220.ditaval
dita:id
B035-1093
Product Category
Software
Teradata Vantage

INSERT...SELECT文を使用して、現在のデータ行を新規のテーブルに速やかにロードします。

テーブルを再作成する手順は、次のとおりです。

  1. 以下の問合わせを使って旧テーブルの明示的な権限を選択します。
    SELECT username, accessright, grantauthority, columnname, allnessflag FROM dbc.allrightsV  
    WHERE tablename = 'Employee' AND databasename = 'Personnel';
    後から使用できるよう出力を保存してください。新しいテーブルに対する明示的な権限を再作成する必要が生じます。
  2. Tempなどの一時名で新規のテーブルを作成します。
    CREATE TABLE Temp_Employee
    (col1 datatype, col2 datatype...)

    現行テーブルのDDLを表示するためには、SHOW TABLEリクエストまたはSHOW IN XML TABLEリクエストを実行します。

  3. いずれかのデータ型、列、列属性、または列順序に互換性がなければ、INSERT...SELECT文を使用して互換性のある値を構築します。これができない場合は、外部ソースからデータをロードする必要が生じることがあります。

    データ型に互換性があれば、以下の例に示すとおり、1つのINSERT...SELECT文を使って旧テーブルのすべてのデータ行を新しいテーブルに転送することができます。

    INSERT INTO Temp_Employee SELECT * FROM Employee ;

    テーブルに互換性がない場合は、さらに複雑なSELECTを使用して、ソース テーブルの列からターゲット テーブルの値を計算する必要があります。

  4. SHOW JOIN/HASH INDEXまたはSHOW IN XML JOIN/HASH INDEXを使って、インデックス定義を参照します。必要な場合は、ハッシュ インデックスまたは結合インデックスをDROP JOIN INDEXまたはDROP HASH INDEXを使って削除し、CREATE JOIN INDEXまたはCREATE HASH INDEXにより再作成します。
  5. 次のようにして、古いEmployeeテーブルを削除します。
    DROP TABLE Employee ;
    テーブルを削除すると、明示的な権限もすべて削除されます。データ ディクショナリでは名前ではなくIDによってオブジェクトが参照されるからです。
  6. 次のようにして、一時テーブルの名前を変更します。
    RENAME TABLE Temp_Employee TO Employee ;
  7. ステップ4のインデックス定義を使って、新しいテーブル用に保守する予定のすべての結合インデックスとハッシュ インデックスを再作成します。
  8. GRANT文を実行依頼して、ステップ1で保存した明示的な権限を新バージョンのEmployeeテーブルで再確立します。

LOGGING ERRORSオプションを使用してエラーをログに記録します。エラーには、重複行エラー、重複プライマリ キー エラー、CHECK制約エラーなどがあります。詳細については、<Teradata Vantage™ - SQLデータ操作言語、B035-1146>の「INSERT/INSERT … SELECT」を参照してください。