在Hive中,将数据从一个表查询并插入到另一个表

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;

相关推荐
tsyjjOvO2 天前
SpringMVC 从入门到精通
数据仓库·hive·hadoop
Francek Chen3 天前
【大数据存储与管理】分布式数据库HBase:05 HBase运行机制
大数据·数据库·hadoop·分布式·hdfs·hbase
zzzzzwbetter3 天前
Hadoop完全分布式部署-Master的NameNode以及Slaver2的DataNode未启动
大数据·hadoop·分布式
weixin_449310843 天前
ETL转换和数据写入小满OKKICRM的技术细节
数据仓库·php·etl
IvanCodes3 天前
Hive IDE连接及UDF实战
ide·hive·hadoop
yumgpkpm3 天前
华为昇腾910B 开源软件GPUStack的介绍(Cloudera CDH、CDP)
人工智能·hadoop·elasticsearch·flink·kafka·企业微信·big data
lifewange4 天前
Hive数据库
数据库·hive·hadoop
五月天的尾巴5 天前
hive数据库模糊查询表名
hive·查询表名
蓝魔Y5 天前
hive—1.1、执行优化
hive
快乐非自愿5 天前
OpenClaw 生态适配:Hadoop/Hive 技能现状与企业级集成方案
大数据·hive·hadoop·分布式·openclaw