1. 确认目标表结构
确保目标表已存在且结构与查询结果匹配。若不存在,需先创建:
CREATE TABLE target_table (
id INT,
name STRING
)
PARTITIONED BY (dt STRING)
STORED AS ORC;
2. 选择插入方式
- 覆盖插入(替换现有数据):
INSERT OVERWRITE TABLE target_table PARTITION (dt)
SELECT id, name, dt FROM source_table;
- 追加插入(保留现有数据):
INSERT INTO TABLE target_table PARTITION (dt)
SELECT id, name, dt FROM source_table;
3. 处理动态分区
若目标表有动态分区,需启用配置:
SET hive.exec.dynamic.partition = true;
SET hive.exec.dynamic.partition.mode = nonstrict;
确保SELECT
语句中分区字段(如dt
)位于最后。
4. 字段映射与转换
若字段名或类型不同,需在查询时转换:
INSERT OVERWRITE TABLE target_table PARTITION (dt)
SELECT old_id AS id, old_name AS name, dt FROM source_table;
5. 执行并验证
运行插入语句后,检查数据量和分区是否正确:
SELECT COUNT(*) FROM target_table;
SHOW PARTITIONS target_table;
完整
-- 启用动态分区(如需)
SET hive.exec.dynamic.partition=true;
SET hive.exec.dynamic.partition.mode=nonstrict;
-- 覆盖插入数据
INSERT OVERWRITE TABLE target_table PARTITION (dt)
SELECT
id,
name,
dt -- 分区字段必须放在最后
FROM source_table;