hive工作记录-20180513
Hive的数据导入:
1.从本地文件系统中导入数据到Hive表
基础语法1 :
create table 表名(列名1 数据类型, 列名2 数据类型, … …) row format delimited fields terminated by '分隔符' stored as textfile
参数解释:
row format delimited --设置创建的表在加载数据的时候,支持的列分隔符
fields terminated by '分隔符' --指明具体的分隔符
stored as '数据类型' --设置加载数据的类型,默认textfile(纯文本)
基础语法 2:
load data local inpath '本地文件完整路径' into table 表名
代码示例:
create table hospital(hospitalid string, hcount double, hallcost double, hreimbursecost double, hcure double, hday double, hrecovery double, ocount double, ohallcost double, ohreimbursecost double, ocure double, ohrecovery double) row format delimited fields terminated by '\t' stored as textfile;
load data local inpath '/home/hadoop/part-r-00000' into table hospital;
2.从HDFS中导入数据到Hive表
基础语法:
建表语句同上
load data inpath 'hdfs文件完整路径' into table 表名
代码示例:
load data inpath '/guide/hospitaloutput/part-r-00000' into table hospital;
3.从别的表中查询出相应的数据并导入到Hive表中
基础语法:
建表语句同上
insert into table 目标表名 select * from 源表名; //不覆盖数据
insert overwrite table 目标表名 select * from 源表名; //覆盖数据
4.在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中
基础语法:
create table 新表名 as select * from 旧表名
新建表的结构和数据都和源表一致
5.导入数据到带有分区的表
基础语法:
建表语句同上
alter table 表名 add partition(分区1='值1',分区2='值2',... ...); //添加具体分区(子文件夹)
load data local inpath '本地文件路径' into table 表名 partition(分区1='值1',分区2='值2',… …);
注意事项:
分区文件夹需要在使用前创建
分区也是列名
分区2是分区1的子文件夹,以此类推
导入数据时,并不按照具体的值筛选
6.导入数据到带有桶的表
注意事项: 需要设置环境变量:set hive.enforce.bucketing=true;
示例代码:
create table hospitalcopy5(hospitalid string, hcount double, hallcost double, hreimbursecost double, hcure double, hday double, hrecovery double, ocount double, ohallcost double, ohreimbursecost double, ocure double, ohrecovery double) clustered by(hospitalid) into 2 buckets row format delimited fields terminated by '\t' stored as textfile;
insert overwrite table hospitalcopy6 select * from hospital;