hive教程:load data向表导入数据

语法

在 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 属性


原文出处:/show_1IXl6UzPfkC.html