HQL加载数据的几种方法小结

时间:2022-01-24 03:12:58

HQL加载数据的几种方法小结:



对于没有创建分区的表(这里都以外部表为例)而言:

create external table if not exists test 
(id int,name string) 
comment 'This is for test.' 
row format delimited 
fields terminated by '\t' 
location '/in/test';
1.直接在linux中上传文件到hive表对应的location
hadoop fs -put ~/Desktop/11 hive创建表的路径

例如:hadoop fs -put linux文件的路径 /in/test


create external table if not exists test 
(id int,name string) 
comment 'This is for test.' 
row format delimited 
fields terminated by '\t';
2.在hive中加载数据
load data local inpath 'linux文件的路径' 
overwrite into table hive的表名;

例如:load data local inpath '/home/yff/Desktop/11' 
overwrite into table test;
需要注意:
a.执行语句中overwrite是重写,不加overwrite是追加操作。
b.创建hive表的时候没有指明表的location,所以文件默认存放在hdfs的/user/hive/warehouse路径对应的数据库下面,如果指明location,那么文件会加载到相应位置里



create external table if not exists test 
(id int,name string) 
comment 'This is for test.' 
row format delimited 
fields terminated by '\t';
3.在hive中直接加载已经存在的表的数据
insert overwrite table 表名 select语句fromhive已存在的表;

例如:insert overwrite table test select * from user;
需要注意:
a.该执行语句中的overwrite不能省略


4.创建新表的同时加载数据
create table 表名 as select语句fromhive已存在的表;

例如:create table test as select name,user_id from user;
需要注意:
a.不能创建外部表




对于创建静态分区的表而言:
create external table if not exists test 
(name string,id int) 
comment 'This is for test.' 
partitioned by (date string) 
row format delimited 
fields terminated by '\t';
通过在hive中load data的方式加载数据:
load data local inpath 'linux本地文件路径' 
overwrite into table 表名 
partition(分区字段='分区字段值');

例如:load data local inpath '/home/yff/Desktop/11' 
overwrite into table test 
partition(date='2016-09-25');




对于创建动态分区的表而言:
create external table if not exists test 
(name string,price double) 
comment 'This is for test.' 
partitioned by (date string) 
row format delimited 
fields terminated by '\t';
首先记得设置一下动态分区的属性:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
set hive.exec.dynamic.partitions.pernode=1000;

通过在hive中直接加载已经存在的表的数据:
insert overwrite table 表名 partition(分区字段...) 
select 表本身字段..., 分区字段... fromhive已存在的表;

例如:insert overwrite table test partition(date) 
select name,price,time from product;