1.insert 语法格式为:
基本的插入语法:
INSERT OVERWRITE TABLE tablename [PARTITON(partcol1=val1,partclo2=val2)]select_statement FROM from_statement
insert overwrite table test_insert select * from test_table;
对多个表进行插入操作:
FROM fromstatte
INSERT OVERWRITE TABLE tablename1 [PARTITON(partcol1=val1,partclo2=val2)]select_statement1
INSERT OVERWRITE TABLE tablename2 [PARTITON(partcol1=val1,partclo2=val2)]select_statement2
from test_table
insert overwrite table test_insert1
select key
insert overwrite table test_insert2
select value;
insert的时候,from子句即可以放在select 子句后面,也可以放在 insert子句前面。
hive不支持用insert语句一条一条的进行插入操作,也不支持update操作。数据是以load的方式加载到建立好的表中。数据一旦导入就不可以修改。
2.通过查询将数据保存到filesystem INSERT OVERWRITE [LOCAL] DIRECTORY directory SELECT.... FROM ..... 导入数据到本地目录: insert overwrite local directory '/home/zhangxin/hive' select * from test_insert1; 产生的文件会覆盖指定目录中的其他文件,即将目录中已经存在的文件进行删除。 导出数据到HDFS中: insert overwrite directory '/user/zhangxin/export_test' select value from test_table; 同一个查询结果可以同时插入到多个表或者多个目录中: from test_insert1 insert overwrite local directory '/home/zhangxin/hive' select * insert overwrite directory '/user/zhangxin/export_test' select value;
在hive中将结果输出到本地目录下:
hive> INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/result' > SELECT * FROM table_name
[hadoop@hadoop-24 result]$ more 000000_0 1331903227197_846612012-04-09 1331903230484_756522012-04-09 1331903233859_134242012-04-09 1331903251469_712512012-04-09 1331903253640_325962012-04-09
后来人工加上了分割符“空格”,从视觉上感觉好多了,但是,在实际运算的时候,发现输出文件中实际上已经有分割符了,只是视觉上看不出来罢了。
但是,分隔符和各自的文件/系统的编码设置有关系。在我们的系统上,间隔符为'x01’,直接用split(‘x01’)就可以了。
No matter what the table format, INSERT OVERWRITE LOCAL DIRECTORY will always use ctrl-A delimiters (' 01' )
所以 你可以根据‘ 01’来分隔 目前似乎还不支持类似于: INSERT OVERWRITE LOCAL DIRECTORY '/tmp/reg_81' ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' SELECT * FROM testTable ;