语法
在 beeline 或 dbeaver 环境中执行下面命令:
load data [local] inpath '数据文件路径' [overwrite] into table 表名 [partition (partcol1=val1,…)];
解释:
local:有该关键字,表示 数据文件在linux;否则表示 数据文件在 HDFS 上overwrite:表示 覆盖 表中已有数据(先清空表所有数据,再加载新数据),没有该关键字表示 追加数据partition:表示上传到指定分区
注意:执行 LOAD DATA 后,INPATH 指定的源路径下的文件会被 移动 到表的存储路径,即:执行命令后,源文件没有了
INTO TABLE(追加)适用场景
- 每日增量加载数据(如电商每日新增订单、日志每日增量);
- 分批导入历史数据(如分批次导入近 1 年的员工数据);
- 临时补充数据(如补录某批次缺失的业务数据)。
OVERWRITE INTO TABLE(覆盖)适用场景
- 每日全量同步数据(如从业务库全量同步员工表,覆盖前一日数据);
- 数据清洗后替换原表(如清洗完脏数据后,用干净数据覆盖原表);
- 分区数据重刷(如发现某分区数据错误,重新生成后覆盖该分区);
- 测试环境重置表数据(清空原有测试数据,加载新测试用例)。
例子
创建一张表
create external table t_student2(
id int,
name string,
gender string,
age int
)
row format delimited fields terminated by ',' ;
准备数据
vim /program/student.txt
内容如下:
1,李雷,male,20
2,韩梅梅,female,21
3,lucy,female,19
4,lili,female,19
5,张三,male,25
导入数据
注意: 文件在 linux上
在 beeline 或 dbeaver 环境中执行下面命令:
load data local inpath '/program/student.txt' into table default.t_student2 ;
执行查询:
select * from student2
查看 table_params
打开 metastore 的 table_params 表
使用 load data 方式,会改变 numFiles 属性,但不会改变 numRows 属性
与 hadoop fs -put 命令区别
hadoop fs -put 方式,不会改变 numFiles 属性,也不会改变 numRows 属性
