WITH DATA - Teradata Database - Teradata Vantage NewSQL Engine - WITH DATAオプション、CREATE TABLE SQL文。

Teradata Vantage™ SQLデータ定義言語 構文規則および例

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/wkf1512081455740.ditamap
dita:ditavalPath
ja-JP/wkf1512081455740.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

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

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

WITH NO DATA
ソース テーブルまたは問合わせ式のデータは、その定義に基づいて新しいテーブルにコピーされません。
source_table_nameのテーブル定義のすべて(または定義する一部)が新しいテーブルにコピーされます。だだしそのデータはコピーされません。
列のサブセットは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 NO DATA

このCREATE TABLE … AS … WITH NO DATAリクエストは、副問合わせでtarget_tableの列名を列別名として指定しています。

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

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

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

このCREATE TABLE … AS … WITH NO DATAリクエストは列属性を指定しています。また、target_tableの列を定義するために式を使用しています。

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

     CREATE TABLE target_table (
       column_1 TITLE 'max_x',
       column_2)
     AS (SELECT MAX(column_x), column_y
         FROM subquery_table
         GROUP BY 2 )
     WITH NO DATA;

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

この例では、上記と同じtarget_tableを作成しますが、コーディングの方法が異なっています。

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

     CREATE TABLE target_table AS (SELECT MAX(column_x) 
                                        (TITLE 'max_x' NAMED column_1),
                                         column_y AS column_2
                                   FROM subquery_table
                                   GROUP BY 2)
     WITH NO 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があります。

例: GLOBAL TEMPORARY TABLE … AS … WITH NO DATA

このCREATE TABLE … AS … WITH NO DATAリクエストは、すべてのテーブル オプション句属性でデフォルトの定義を使用した、選択したすべての列定義を使用して、新規のグローバル一時テーブルを作成します。

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

    CREATE GLOBAL TEMPORARY TABLE target_table AS (SELECT *
                                                   FROM subquery_table)
    WITH NO DATA;

例: CREATE VOLATILE TABLE … AS … WITH DATA

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

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

    CREATE VOLATILE TABLE target_table AS source_table
    WITH DATA;