17.05 - WITH DATA - 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-1144-175K-JPN
Language
日本語 (日本)

ソース テーブルまたはsubqueryのデータを新しいターゲット テーブルにコピーします。WITH DATAオプションを使用してグローバル一時テーブルを作成することはできません。

列のサブセットはsubqueryを使って指定します。さもないと、この操作はすべての列定義およびデータをターゲット テーブルにコピーします。

例: 列制約を指定したAS … WITH DATA

このCREATE TABLE … AS … WITH DATAリクエストは、列制約を指定します。参照整合性制約がありませんが、これはAS句では無効なので注意してください。

このリクエストではまた、選択した列のデータをtarget_tableにコピーします。

このリクエストでは副問合わせが指定されていて、明示的なテーブルの種類が指定されていないため、target_tableのテーブルの種類は、subquery_tableのテーブルの種類ではなく、デフォルトのセッション モード デフォルトになります。

     CREATE TABLE target_table (
       column_1 NOT NULL DEFAULT 0,
       column_2)
     AS (SELECT column_x, column_y
         FROM subquery_table )
     WITH DATA;

例: 明示的な列名を指定したAS … WITH DATA

このCREATE TABLE … AS … WITH DATAリクエストでは、source_tableでの名前とは異なるtarget_tableの列名を指定しています。このリクエストではまた、選択した列のデータをtarget_tableにコピーします。

このリクエストではサブクエリーが指定されており、明示的なテーブルの種類が指定されていないため、target_tableのテーブルの種類は、subquery_tableのテーブルの種類ではなく、デフォルトのセッション モード デフォルトになります。<Teradata Vantage™ - SQLデータ定義言語 - 詳細トピック、B035-1184>の、CREATE TABLEのAS句を参照してください。

     CREATE TABLE target_table (
       column_x,
       column_y)
     AS (SELECT column_1, column_2
         FROM subquery_table )
     WITH DATA;

例: 名前のない式を指定したAS … WITH DATA

このCREATE TABLE … AS … WITH DATAリクエストでは、副問合わせからtarget_tableを作成します。この副問合わせには、target_tableの両方の列を定義する名前のない式があります。影響を受ける列は、名前のない式を補うために、target_table定義で明示的に名前が指定されています。このリクエストではまた、選択した列のデータをtarget_tableにコピーします。

このリクエストでは副問合わせが指定されていて、明示的なテーブルの種類が指定されていないため、target_tableのテーブルの種類は、subquery_tableのテーブルの種類ではなく、デフォルトのセッション モード デフォルトになります。

     CREATE TABLE target_table (
       column_x,
       column_y)
     AS (SELECT column_x + 1, column_y + 1
         FROM subquery_table )
     WITH DATA;

例: 名前のない式を指定したAS … WITH DATA

このCREATE TABLE … AS … WITH DATAリクエストでは、1つの名前のない集約式のある副問合わせからtarget_tableを作成します。影響を受ける列は、名前のない集約式を補うために、target_table定義で明示的に名前が指定されていることに注意してください。このリクエストではまた、選択した列のデータをtarget_tableにコピーします。

このリクエストでは副問合わせが指定されていて、明示的なテーブルの種類が指定されていないため、target_tableのテーブルの種類は、subquery_tableのテーブルの種類ではなく、デフォルトのセッション モード デフォルトになります。

     CREATE TABLE target_table (
       column_x,
       column_y)
     AS (SELECT MAX(column_x), column_y
         FROM subquery_table
         GROUP BY 2 )
     WITH DATA;

例: AS … WITH DATA(列属性がソース テーブル定義とターゲット テーブル定義の間で異なる場合)

この例では、ソース テーブルで定義された列記述子とは異なる明示的な列記述子を指定した場合に、システムで古い列属性をコピーせず、代わりにターゲット テーブル定義で指定された属性で新しいテーブルを定義することを示しています。

以下の簡単なテーブルを作成すると仮定します。

     CREATE TABLE source (
       x INTEGER NOT NULL,
       y INTEGER DEFAULT 0);

次に、sourceの定義に基づいたデータで新しいテーブルを作成し、次のようなCREATE TABLE … AS … WITH DATAリクエストを実行します。

     CREATE TABLE target (
       a,
       b NOT NULL) AS (SELECT *
                       FROM source) 
     WITH DATA;

さらに、targetでSHOW TABLEリクエストを実行して、列記述子を確認します。

     SHOW TABLE target;
     *** Text of DDL statement returned.
      *** Total elapsed time was 1 second.
     -----------------------------------------------------------------
     CREATE SET TABLE user_name.target ,NO FALLBACK ,
          NO BEFORE JOURNAL,
          NO AFTER JOURNAL,
          CHECKSUM = DEFAULT
          (
           a INTEGER,
           b INTEGER NOT NULL)
     PRIMARY INDEX ( a );

NOT NULL属性は列source.xから列target.aにコピーされず、またDEFAULT 0属性も列source.yから列target.bにコピーされません。代わりに、target.aにはそのテーブル定義でなにも指定されていないため列属性がなく、target.bには、source.yに指定された属性DEFAULT 0ではなく、target.bのテーブル定義で指定された列属性NOT NULLがあります。

例: CREATE VOLATILE TABLE … AS … WITH DATA

このCREATE TABLE … AS … WITH DATAリクエストは、source_tableのすべての列定義とデータを使用して、新しい揮発テーブルを作成します。

target_tableのテーブルの種類は、source_tableのテーブルの種類にデフォルト設定されます。<Teradata Vantage™ - SQLデータ定義言語 - 詳細トピック、B035-1184>の、CREATE TABLEを参照してください。

    CREATE VOLATILE TABLE target_table AS source_table
    WITH DATA;