データ領域が限られているテーブルに少量のデータを挿入する場合は、insert… VALUESまたはVALUES tableを使用してこの操作を実行します。
INSERT INTO操作を実行する前に、ターゲットテーブルに対するALTER権限と、ソーステーブルのメタデータに対するDESCRIBE権限があることを確認してください。 詳細は、「MaxCompute権限」をご参照ください。
次のプラットフォームでステートメントを実行できます。
操作
MaxComputeでは、INSERT … VALUESまたはVALUES TABLE操作を使用して、少量のデータをテーブルに挿入できます。
操作 | 説明 |
| ビジネステストフェーズでは、
|
| 挿入されたデータに対して簡単なコンピューティング操作を実行するには、MaxComputeの
|
制限事項
INSERTを使用すると... VALUESまたは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 | 非対象 | データを挿入する宛先パーティション。 値の形式は |
col_name | 非対象 | データを挿入する宛先列の名前。 |
col_value | 非対象 | ターゲットテーブルの列の値。 複数の列値を指定する場合は、コンマ (,) で区切ります。 列の値は、カスタム関数式や組み込み関数式など、定数式と非定数式にすることができます。 列値が指定されていない場合、デフォルト値はNULLです。 |
例
例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 * FROMとUNION 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. SET odps.sql.allow.fullscan=true; SELECT * FROM srcp; -- Return result +------------+------------+------------+ | key | value | p | +------------+------------+------------+ | 1 | 3 | 2024-12-10 16:58:56 | +------------+------------+------------+例8: 非定数式を使用する。 サンプル文:
SELECT * FROM VALUES (GETDATE()),(TO_DATE('20190101', 'yyyyMMdd')),(LASTDAY(DATETIME '2019-01-01 01:10:00')) t(d);次の応答が返されます。
+------------+ | d | +------------+ | 2019-01-31 00:00:00 | | 2019-01-01 00:00:00 | | 2024-12-10 16:52:36 | +------------+