すべてのプロダクト
Search
ドキュメントセンター

MaxCompute:VALUES

最終更新日:Dec 06, 2024

データ領域が限られているテーブルに少量のデータを挿入する場合は、insert… VALUESまたはVALUES tableを使用してこの操作を実行します。

INSERT INTO操作を実行する前に、ターゲットテーブルに対するALTER権限と、ソーステーブルのメタデータに対するDESCRIBE権限があることを確認してください。 詳細は、「MaxCompute権限」をご参照ください。

次のプラットフォームでステートメントを実行できます。

操作

MaxComputeでは、INSERT … VALUESまたはVALUES TABLE操作を使用して、少量のデータをテーブルに挿入できます。

API 操作

説明

INSERT... VALUES

ビジネステストフェーズでは、INSERT … VALUESを使用してテーブルにデータを挿入し、簡単なテストを実行できます。

  • テストテーブルに数または数十のデータレコードを挿入するには、insert… VALUESを使用します。

  • 数十のデータレコードをテストテーブルに挿入するには、Tunnelコマンドを使用して、データレコードを含むTXTまたはCSVファイルをアップロードします。 詳細については、「テーブルへのデータのインポート」をご参照ください。

values table

挿入されたデータに対して簡単なコンピューティング操作を実行するには、MaxComputeのVALUES TABLEを使用することを推奨します。 VALUES TABLEは、INSERTステートメントおよびデータ操作言語 (DML) ステートメントで使用できます。 特徴:

  • 使用可能な物理テーブルがない場合は、任意のデータの複数の行を含むテーブルを作成し、テーブルに対して計算操作を実行します。

  • SELECT * FROMUNION ALLの組み合わせではなく、VALUES tableを使用して定数テーブルを作成します。

  • VALUES TABLEでは、FROM句なしでSELECTステートメントを実行できます。 他のテーブルのデータをSELECTの式に含めることはできません。 基本的な実装原理は、1つの行のみを含み、列を含まない匿名VALUESテーブルからデータを選択することです。 これにより、DUALテーブルを手動で作成することなく、ユーザー定義関数 (UDF) やその他の関数をテストできます。

制限事項

INSERTを使用するまたはVALUES TABLE操作でデータをテーブルに挿入する場合、insert OVERWRITEを使用してデータを挿入する列を指定することはできません。 代わりに、INSERT INTOのみを使用できます。

構文

--INSERT ... VALUES
insert into table <table_name>
[partition (<pt_spec>)][(<col1_name> ,<col2_name>,...)] 
values (<col1_value>,<col2_value>,...),(<col1_value>,<col2_value>,...),...

--values table
values (<col1_value>,<col2_value>,...),(<col1_value>,<col2_value>,...),<table_name> (<col1_name> ,<col2_name>,...)...
  • table_name: 必須です。 データを挿入するテーブルの名前。 テーブルは既存のテーブルである必要があります。

  • pt_spec: オプション。 データを挿入する宛先パーティション。 値の形式は (partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...) です。 データをパーティションテーブルに更新する場合は、このパラメーターを指定する必要があります。

  • col_name: オプション。 データを挿入する宛先列の名前。

  • col_name: オプション。 ターゲットテーブルの列の値。 複数の列値を指定する場合は、コンマ (,) で区切ります。 列の値は、カスタム関数式や組み込み関数式など、定数式と非定数式にすることができます。 列値が指定されていない場合、デフォルト値はNULLです。

    説明
    • ARRAYを除く複雑なデータ型を使用して定数を構築することはできません。 VALUESでARRAYデータ型を使用する方法の詳細については、「例3」をご参照ください。

    • VALUESを使用してDATETIME型またはTIMESTAMP型のデータを挿入する場合は、VALUESでデータ型を指定します。 詳細については、「例4」をご参照ください。

  • 例1: INSERT... VALUESは、指定したパーティションにデータを挿入するためにします。 サンプル文:

    -- Create a partitioned table named srcp.
    create table if not exists srcp (key string,value bigint) partitioned by (p string);
    
    -- Add the abc partition to the srcp table.
    alter table srcp add if not exists partition (p='abc');
    
    -- Insert data into the abc partition in the srcp table.
    insert into table srcp partition (p='abc') values ('a',1),('b',2),('c',3);
    
    -- Query data from the srcp table.
    select * from srcp where p='abc';
    
    -- Return result
    +------------+------------+------------+
    | key        | value      | p          |
    +------------+------------+------------+
    | a          | 1          | abc        |
    | b          | 2          | abc        |
    | c          | 3          | abc        |
    +------------+------------+------------+
  • 例2: INSERT... VALUESは、ランダムパーティションにデータを挿入するためにします。 サンプル文:

    -- Create a partitioned table named srcp.
    create table if not exists srcp (key string,value bigint) partitioned by (p string);
    
    -- Insert data into the srcp table without specifying a partition.
    insert into table srcp partition (p)(key,p) values ('d','20170101'),('e','20170101'),('f','20170101');
    
    -- Query data from the srcp table.
    select * from srcp where p='20170101';
    
    -- Return result
    +------------+------------+------------+
    | key        | value      | p          |
    +------------+------------+------------+
    | d          | NULL       | 20170101   |
    | e          | NULL       | 20170101   |
    | f          | NULL       | 20170101   |
    +------------+------------+------------+
  • 例3: 複雑なデータ型を使用して定数を構築し、INSERT操作を使用してデータをインポートします。 サンプル文:

    -- Create a partitioned table named srcp.
    create table if not exists srcp (key string,value array<int>) partitioned by (p string);
    
    -- Add a partition to the srcp table.
    alter table srcp add if not exists partition (p='abc');
    
    -- Insert data into the abc partition of the srcp table.
    insert into table srcp partition (p='abc') select 'a', array(1, 2, 3);
    
    -- Query data from the srcp table.
    select * from srcp where p='abc';
    
    -- Return result
    +------------+------------+------------+
    | key        | value      | p          |
    +------------+------------+------------+
    | a          | [1,2,3]    | abc        |
    +------------+------------+------------+
  • 例4: INSERT … VALUES操作を実行して、DATETIME型またはTIMESTAMP型のデータをテーブルに挿入し、valuesでデータ型を指定します。 サンプル文:

    -- Create a partitioned table named srcp.
    create table if not exists srcp (key string, value timestamp) partitioned by (p string);
    
    -- Add a partition to the srcp table.
    alter table srcp add if not exists partition (p='abc');
    
    -- Insert data into the abc partition in the srcp table.
    insert into table srcp partition (p='abc') values (datetime'2017-11-11 00:00:00',timestamp'2017-11-11 00:00:00.123456789');
    
    -- Query data from the srcp table.
    select * from srcp where p='abc';
    
    -- Return result
    +------------+------------+------------+
    | key        | value      | p          |
    +------------+------------+------------+
    | 2017-11-11 00:00:00 | 2017-11-11 00:00:00.123 | abc        |
    +------------+------------+------------+
  • 例5: VALUES TABLEを使用して、パーティションテーブルにデータを挿入します。 サンプル文:

    -- Create a partitioned table named srcp.
    create table if not exists srcp (key string,value bigint) partitioned by (p string);
    
    -- Insert data into the srcp table.
    insert into table srcp partition (p) select concat(a,b), length(a)+length(b),'20170102' from values ('d',4),('e',5),('f',6) t(a,b);
    
    -- Query data from the srcp table.
    select * from srcp where p='20170102';
    
    -- Return result
    +------------+------------+------------+
    | key        | value      | p          |
    +------------+------------+------------+
    | d4         | 2          | 20170102   |
    | e5         | 2          | 20170102   |
    | f6         | 2          | 20170102   |
    +------------+------------+------------+

    VALUES (…), (…) t(a, b) は、tという名前のテーブルにa列とb列が含まれることを定義します。 a列のデータ型はSTRING、b列のデータ型はBIGINTです。 列のデータ型は、VALUESリストから派生する必要があります。

  • 例6: SELECT * FROMUNION ALLの組み合わせではなく、VALUES tableを使用して定数テーブルを作成します。 サンプル文:

    select 1 c union all select 2 c;
    -- The preceding statement is equivalent to the following statement:
    select * from values (1), (2) t(c);
    
    -- Return result
    +------------+
    | c          |
    +------------+
    | 1          |
    | 2          |
    +------------+
  • 例7: FROM句なしでVALUES TABLEを使用してデータを挿入します。 サンプル文:

    -- Create a partitioned table named srcp.
    create table if not exists srcp (key string,value bigint) partitioned by (p string);
    
    -- Insert data into the srcp table.
    insert into table srcp partition (p) select abs(-1), length('abc'), getdate();
    
    -- Query data from the srcp table.
    select * from srcp;
    
    -- Return result
    +------------+------------+------------+
    | key        | value      | p          |
    +------------+------------+------------+
    | 1          | 3          | 2020-11-25 18:39:48 |
    +------------+------------+------------+
  • 例8: 非定数式を使用する。 サンプル文:

    select * from values ('a'),(to_date('20190101', 'yyyyMMdd')),(getdate()) t(d);

    次の応答が返されます。

    +------------+
    | d          |
    +------------+
    | 2021-02-01 18:01:38 |
    | 2019-01-01 00:00:00 |
    | a          |
    +------------+