Hive中用load、insert装载数据以及插入文件

Hive装载数据方式

  • 装载数据:LOAD移动数据
  • 装载数据:INSERT表插入数据-1
  • 装载数据:INSERT表插入数据-2
  • Hive数据插入文件
  • Hive数据交换 - IMPORT/EXPORT

装载数据:LOAD移动数据

原始数据被移动到目标表/分区,不再存在于原始位置
LOCAL:指定文件位于本地文件系统 ;OVERWRITE表示覆盖现有数据
使用方法:

LOAD DATA LOCAL INPATH '/home/dayongd/Downloads/employee.txt' 
OVERWRITE INTO TABLE employee;
-- LOCAL表示文件位于本地,OVERWRITE表示覆盖现有数据
LOAD DATA LOCAL INPATH '/home/dayongd/Downloads/employee.txt' 
OVERWRITE INTO TABLE employee_partitioned  PARTITION (year=2014, month=12);
-- 没有LOCAL,文件位于HDFS文件系统中
LOAD DATA INPATH '/tmp/employee.txt'  
OVERWRITE INTO TABLE employee_partitioned PARTITION (year=2017, month=12);

装载数据:INSERT表插入数据-1

  • 使用INSERT语句将数据插入表/分区
  1. Hive支持从同一个表进行多次插入
  2. INSERT INTO中TABLE关键字是可选的
  3. INSERT INTO可以指定插入到哪些字段中
    如:INSERT INTO t(x,y,z)
  4. INSERT INTO table_name VALUES,支持插入值列表
  5. 数据插入必须与指定列数相同
-- INSERT支持OVERWRITE(覆盖)和INTO(追加)
INSERT OVERWRITE/INTO TABLE tablename1 
[PARTITION (partcol1=val1, partcol2=val2 ...)] 
select fileds,... from tb_other;

装载数据:INSERT表插入数据-2

INSERT OVERWRITE TABLE test select 'hello'; -- INSERT不支持的写法
insert into employee select * from ctas_employee; -- 通过查询语句插入
-- 多插入
from ctas_employee      --高性能:只需扫描一次输入数据
insert overwrite table employee select *
insert overwrite table employee_internal select *;
-- 插入到分区
from ctas_patitioned 
insert overwrite table employee PARTITION (year, month)--典型的ETL模式
select *,'2018','09';
-- 通过指定列插入(insert into可以省略table关键字)
insert into employee(name) select 'John' from test limit 1;--指定列有利于 data schema changes
-- 通过指定值插入
insert into employee(name) value('Judy'),('John');

Hive数据插入文件

  • 使用insert语句将数据插入/导出到文件
  1. 文件插入只支持OVERWRITE
  2. 支持来自同一个数据源/表的多次插入
  3. LOCAL:写入本地文件系统
  4. 默认数据以TEXT格式写入,列由^A分隔
  5. 支持自定义分隔符导出文件为不同格式,CSV,JSON等
-- 从同一数据源插入本地文件,hdfs文件,表
from ctas_employee
insert overwrite local directory '/tmp/out1'  select *
insert overwrite directory '/tmp/out1' select *
insert overwrite table employee_internal select *;
-- 以指定格式插入数据
insert overwrite directory '/tmp/out3'
row format delimited fields terminated by ','
select * from ctas_employee;
-- 其他方式从表获取文件
hdfs dfs -getmerge <table_file_path>

Hive数据交换 - IMPORT/EXPORT

  • IMPORT和EXPORT用于数据导入和导出
  1. 常用于数据迁移场景
  2. 除数据库,可导入导出所有数据和元数据
  • 使用EXPORT导出数据
EXPORT TABLE employee TO '/tmp/output3';
EXPORT TABLE employee_partitioned partition (year=2014, month=11) TO 
  • 使用IMPORT导入数据
IMPORT TABLE employee FROM '/tmp/output3';
IMPORT TABLE employee_partitioned partition (year=2014, month=11) FROM '/tmp/output5';

你可能感兴趣的:(hadoop,数据库,hive,大数据,数据仓库)