HQL入门--加载数据
前沿
查看hive和基本DDL语句可以查看之前文章
load命令加载数据
准备工作
-- 创建表
CREATE TABLE tabA ( id int ,name string ,area string )
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ;
--创建文件(/opt/data/sourceA.txt)
1,fish1,SZ
2,fish2,SH
3,fish3,HZ
4,fish4,QD
5,fish5,SR
拷贝文件到 HDFS
hdfs dfs -put sourceA.txt /user/
装载数据
从本地装载数据
LOAD DATA LOCAL INPATH '/opt/data/sourceA.txt' INTO TABLE tabA;
此时本地文件还在
从hdfs中加载文件
LOAD DATA INPATH '/user/sourceA.txt' INTO TABLE tabA;
hdfs查看文件是否存在–文件已经不存在了
加载数据覆盖表中已有数据
LOAD DATA LOCAL INPATH '/opt/data/sourceA.txt' OVERWRITE INTO TABLE tabA;
创建表时加载数据
hdfs创建目录准备数据
hdfs dfs -mkdir /user/hive/tabB
hdfs dfs -put sourceA.txt /user/hive/tabB
--创建表的时候指定location
CREATE TABLE tabB ( id INT ,name string ,area string )
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
Location '/user/hive/tabB';
insert 插入数据
准备工作
-- 创建分区表
CREATE TABLE tabC ( id INT ,name string ,area string )
partitioned by (month string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
插入数据
普通插入
insert into table tabC
partition(month='202001')
values (5, 'wangwu', 'BJ'),
(4, 'lishi', 'SH'),
(3, 'zhangsan', 'TJ');
将已有数据插入
insert into table tabC partition(month='202002')
select id, name, area from tabC where month='202001';
这里不能用select * from 因为会把分区键伪劣弄出来
多表(多分区)插入模式
from tabC
insert overwrite table tabC partition(month='202003')
select id, name, area where month='202002'
insert overwrite table tabC partition(month='202004')
select id, name, area where month='202002';
创建表并插入数据
create table if not exists tabD as select * from tabC;
tabD不是分区表
至此HQL语句中装载数据完成,下一篇讲解数据导出.