Hive表操作
插入数据sql、导出数据sql
1.insert 语法格式为:
基本的插入语法:
INSERT OVERWRITE TABLE tablename [PARTITON(partcol1=val1,partclo2=val2)]select_statement FROM from_statementinsert overwrite table test_insert select * from test_table;
对多个表进行插入操作:
FROM fromstatteINSERT OVERWRITE TABLE tablename1 [PARTITON(partcol1=val1,partclo2=val2)]select_statement1INSERT OVERWRITE TABLE tablename2 [PARTITON(partcol1=val1,partclo2=val2)]select_statement2from test_table insert overwrite table test_insert1 select keyinsert overwrite table test_insert2select value;
insert的时候,from子句即可以放在select 子句后面,也可以放在 insert子句前面。
hive不支持用insert语句一条一条的进行插入操作,也不支持update操作。数据是以load的方式加载到建立好的表中。数据一旦导入就不可以修改。
2.通过查询将数据保存到filesystem
INSERT OVERWRITE [LOCAL] DIRECTORY directory SELECT.... FROM .....
导入数据到本地目录:
insert overwrite local directory '/home/tt/hive' select * from test_insert1;
产生的文件会覆盖指定目录中的其他文件,即将目录中已经存在的文件进行删除。
导出数据到HDFS中:
insert overwrite directory '/user/tt/export_test' select value from test_table;
同一个查询结果可以同时插入到多个表或者多个目录中:
from test_insert1insert overwrite local directory '/home/tt/hive' select * insert overwrite directory '/user/tt/export_test' select value;
创建表sql
create table vt_test (id String,cc decimal(20,0))
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '|';INSERT INTO TABLE vt_test select 2,1234567890123456 from dual;
select * from vt_test;ROW FORMAT DELIMITED
FIELDS TERMINATED BY ‘\\t’
LINES TERMINATED BY ‘\\n’
STORED AS TEXTFILE;load data local inpath '/tmp/VT_TP_846108_inc.txt' into table vt_test;
select * from vt_test limit 5;
空值处理
CREATE TABLE hive_tb (id int,name STRING)PARTITIONED BY ( `day` string,`type` tinyint COMMENT '0 as bid, 1 as win, 2 as ck', `hour` tinyint)ROW FORMAT DELIMITED NULL DEFINED AS '' STORED AS TEXTFILE;