hive教程:load data向表导入数据 作者:马育民 • 2021-03-14 11:24 • 阅读:10382 # 语法 在 `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` 属性 [](https://www.malaoshi.top/upload/pic/hive/QQ20210314114601.png) ### 与 hadoop fs -put 命令区别 `hadoop fs -put` 方式,不会改变 `numFiles` 属性,也不会改变 `numRows` 属性 原文出处:http://malaoshi.top/show_1IXl6UzPfkC.html