往hive导入数据的几种方式

往hive导入数据的几种方式

一、导入数据

1. LOAD DATA(最直接、最常用)
-- 从 HDFS 导入(移动文件)
LOAD DATA INPATH 'hdfs_path' [OVERWRITE] INTO TABLE table_name [PARTITION(part_col=value)];

-- 从本地文件系统导入(复制文件到 Hive warehouse)
LOAD DATA LOCAL INPATH 'local_path' [OVERWRITE] INTO TABLE table_name [PARTITION(part_col=value)];

特点:

  • INPATH:HDFS路径->文件是被移动到表目录(外部表慎用)
  • LOCAL INPATH:本地路径->文件是被复制到hive表目录
  • OVERWRITE:覆盖表原有数据,不加则追加
  • 适合批量导入文本、CSV、TSV等文件

示例:

-- 从 HDFS 导入
LOAD DATA INPATH '/data/logs/2024-06-01.log' INTO TABLE access_log PARTITION(dt='2024-06-01');

-- 从本地导入
LOAD DATA LOCAL INPATH '/home/user/data.csv' INTO TABLE user_info;
2. INSERT INTO / INSERT OVERWRITE(SQL方式导入)

语法:

-- 从另一张表导入(追加)
INSERT INTO TABLE target_table [PARTITION(...)]
SELECT ... FROM source_table WHERE ...;

-- 覆盖写入
INSERT OVERWRITE TABLE target_table [PARTITION(...)]
SELECT ... FROM source_table WHERE ...;

特点:

  • 本质是 Hive SQL查询+写入,会经过MapReduce/Tez/Spark执行
  • 适合从Hive 内部表、视图、查询结果导入
  • 支持分区动态/静态插入

示例:

-- 动态分区插入
SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;

INSERT OVERWRITE TABLE sales PARTITION(dt)
SELECT order_id, amount, dt FROM staging_sales;
3. 创建表时直接加载数据(CREATE TABLE AS SELECT)

语法:

CREATE TABLE new_table AS SELECT ... FROM source_table WHERE ...;

特点:

  • 一步完成建表和导入
  • 适合数据抽取、转换、加载(ETL)

示例:

CREATE TABLE active_users AS
SELECT user_id, last_login FROM users WHERE status='active';
4. 使用Hive外部工具导入

(1) Sqoop(关系型数据库<->hive)

# RDBMS → Hive
sqoop import \
  --connect jdbc:mysql://host/db \
  --username user --password pass \
  --table mysql_table \
  --hive-import \
  --hive-table hive_db.hive_table \
  --create-hive-table \
  --fields-terminated-by ',';

(2)Spark / Flink(实时或批流一体导入)

  • Spark SQL: df.write.saveAsTable("hive_table")
  • Flink SQL: INSERT INTO hive_table SELECT ...
    (3)DataX / Kettle(第三方ETL工具)
  • 配置数据源(Mysql、Oracle、HDFS、hive)进行数据同步
5. 手动上传到HDFS+建表指定Location
  • 先用hdfs dfs -put 上传文件到HDFS目录
  • 建表时LOCATION '/hdfs/path/'
  • 适合一次性导入静态数据
posted @ 2025-12-02 16:41  -dokingone-  阅读(0)  评论(0)    收藏  举报