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;