ここでは、INSERT … VALUES
コマンド操作について説明します。
INSERT … VALUES
文を使用して、迅速にテストデータを検証用のテーブルに書き込むことができます。
現時点では、INSERT OVERWRITE で列を挿入することはできません。代わりに INSERT INTO
をご使用ください。
INSERT INTO TABLE tablename
[PARTITION (partcol1=val1, partcol2=val2 ...)][co1name1,colname2...]
[VALUES (col1_value,col2_value,...),(col1_value,col2_value,...),...]
drop table if exists srcp;
create table if not exists srcp (key string ,value bigint) partitioned by (p string);
insert into table srcp partition (p='abc') values ('a',1),('b',2),('c',3);
| key | value | p |
| a | 1 | abc |
| b | 2 | abc |
| c | 3 | abc |
テーブルに複数の列があり、一部の列にデータを挿入するには、次のように INSERT 関数にリストを使用します。
drop table if exists srcp;
create table if not exists srcp (key string ,value bigint) partitioned by (p string);
insert into table srcp partition (p)(key,p) values ('d','20170101'),('e','20170101'),('f','20170101');
| key | value | p |
| d | NULL | 20170101 |
| e | NULL | 20170101 |
| f | NULL | 20170101 |
VALUES で指定されない列は、デフォルトで NULL になります。 INSERT 関数にリストを指定する際、すべての列を VALUES で指定する必要はありません。'INSERT INTO…SELECT…' も同様に使用できます。
実際、VALUES は、INSERT 文でのみ使用するわけではありません。DML 文でも使用できます。
INSERT…VALUES
メソッドには制約があり、値を指定する必要があります。 挿入されたデータに対して単純な操作を実行するには、MaxCompute のテーブル関数である VALUES
を使用します。詳細は、例 3 をご参照ください。
drop table if exists srcp;
create table if not exists srcp (key string ,value bigint) partitioned by (p string);
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);
VALUES (…), (…) t (a, b) は、テーブル t の定義であり、列は a および b、各列のデータ型は VALUES のリストから派生した (a string, b bigint) となります。 そうすることにより、物理テーブルを用意することなしに、任意のデータを含む複数行の仮想テーブルに対して、任意の処理を実行できます。
| key | value | p |
| d4 | 2 | 20170102 |
| e5 | 2 | 20170102 |
| f6 | 2 | 20170102 |
select 1 c from dual
union all
select 2 c from dual;
--等同于
select * from values (1), (2) as t (c);
select abs(-1), length('abc'), getdate();
上記の文のように、SELECT 文の式のリストに、アップストリームテーブルのデータが含まれない場合、SELECT は FROM なしで実行できます。 実際の処理としては、1 行 0 列の、データの存在しないダミーテーブルより抽出しています。 これにより、DUAL テーブルを作成せずに、UDF などの関数を検証することが可能となります。
- VALUES には定数のみを指定でき、ARRAY といった複雑なデータ型を含む関数を使用することはできません。 現時点では、MaxCompute では、対応する定数を構成できません。
次のような文に書き換えます。
この文でも、同様の結果が得られます。insert into table srcp (p ='abc') select 'a',array('1', '2', '3');.
- VALUES で datetime または timestamp を書き込むには、VALUES 文に型名を指定します。
insert into table srcp (p ='abc') values (datetime'2017-11-11 00:00:00',timestamp'2017-11-11 00:00:00.123456789');