将查询结果插入表中
INSERT [OVERWRITE|INTO] TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)[IF NOT EXISTS]]select_statement1 FROM from_statement举例
[$host] transwarp> INSERT INTO TABLE partition_user_info (acc_level='A')
SELECT name, acc_num, password, citizen_id, bank_acc, reg_date
FROM user_info WHERE acc_level='A';
FROM from_statement INSERT [OVERWRITE|INTO] TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...) [IF NOT EXISTS]] select_statement1 [INSERT [OVERWRITE|INTO] TABLE tablename2 [PARTITION ... [IF NOT EXISTS]] select_statement2] [INSERT [OVERWRITE|INTO] TABLE tablename2 [PARTITION ...] select_statement2] ...在单次插入和多次插入中,插入查询结果时必须指定插入的分区。
[$host] transwarp> CREATE TABLE partition_user_info1;
[$host] transwarp> CREATE TABLE partition_user_info2;
[$host] transwarp> FROM user_info
INSERT INTO TABLE partition_user_info1 PARTITION (acc_level = 'A')
SELECT name, acc_num, password, citizen_id, bank_acc, reg_date
WHERE acc_level = 'A'
INSERT INTO TABLE partition_user_info1 PARTITION (acc_level = 'B')
SELECT name, acc_num, password, citizen_id, bank_acc, reg_date
WHERE acc_level = 'B'
INSERT INTO TABLE partition_user_info2 PARTITION (acc_level = 'C')
SELECT name, acc_num, password, citizen_id, bank_acc, reg_date
WHERE acc_level = 'C'
INSERT INTO TABLE partition_user_info2 PARTITION (acc_level = 'D')
SELECT name, acc_num, password, citizen_id, bank_acc, reg_date
WHERE acc_level = 'D';
[$host] transwarp> SELECT * FROM partition_user_info1;
马从筠 6513065 115591 140400198711012307 96080357291141 20110101 A
魏向卉 3912384 841242 522632199301029404 68537153578048 20091202 A
邱坤 0700735 737297 340811199211252278 14388242322818 20121024 A
华微 5224133 531547 420529198911075631 32638281095907 20080214 B
[$host] transwarp> SELECT * FROM partition_user_info2;
祝韩恒 6670192 205239 230801197908126178 73790369990971 20100101 C
潘营泽 6600641 990590 511521198705077435 48471135593608 20110430 C
管淑艳 2394923 783438 330683198005210864 99913863445174 20141003 C
宁新瑶 4580952 986634 420822199001119507 97711008856576 20081031 D
李韩瑶 2755506 015859 310230197912126559 42412396242237 20110916 D
INSERT OVERWRITE TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement; INSERT INTO TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement;注意
INSERT OVERWRITE会用查询结果将插入目标中原有的文件覆盖。
INSERT INTO会将查询结果插入在原有文件的结尾
INSERT OVERWRITE [LOCAL] DIRECTORY directory1
[ROW FORMAT row_format] [STORED AS file_format]
SELECT ... FROM ...
row_format
: DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
[NULL DEFINED AS char]
多次插入
FROM from_statement INSERT OVERWRITE [LOCAL] DIRECTORY directory1 select_statement1 [INSERT OVERWRITE [LOCAL] DIRECTORY directory2 select_statement2] ...说明
LOCAL选项,Inceptor会将数据写入本地。
[$host]transwarp> CREATE TABLE user_info_bucketed (
> name STRING,
> acc_num STRING,
> password STRING,
> citizen_id STRING,
> bank_acc STRING,
> reg_date STRING)
> PARTITIONED BY (acc_level STRING)
> CLUSTERED BY (acc_num) INTO 25 BUCKETS;
[$host]transwarp> set hive.enforce.bucketing = true;
[$host]transwarp> FROM user_id
> INSERT OVERWRITE TABLE user_info_bucketed
> PARTITION (acc_level='A')
> SELECT name, acc_num, password, citizen_id, bank_acc, reg_date
>WHERE acc_level = 'A';