【问题标题】:Insert into Hive table from select statement with different schema从具有不同架构的 select 语句中插入 Hive 表
【发布时间】:2020-09-29 18:16:34
【问题描述】:

我有一个包含以下列的目标外部表:

UPDATED_BY STRING,
Name STRING

我想从具有以下列的源表中将数据插入到目标表中:

UPDATED_BY STRING,
abc STRING

两个表都按年、日和月分区。是否可以将 col abc 的数据从源表插入到目标表的 Name 列中?请帮忙

【问题讨论】:

    标签: hadoop hive hql etl


    【解决方案1】:

    我相信这应该可行。

    只需使用目标列名称为源表列别名。

    set hive.exec.dynamic.partition=true;
    set hive.exec.dynamic.partition.mode=nonstrict;
    
    INSERT OVERWRITE TABLE target_external_table PARTITION(YEAR,MONTH,DAY) --check partition order in your table. I believe this is the order.
    SELECT
        UPDATED_BY,
        abc AS name,
        YEAR,
        MONTH,
        DAY
    FROM source_table;
    

    【讨论】:

    • 我可以像FROM source_table where year=2010一样在末尾添加一个where子句吗?我没有yearmonthday 作为源表中的列,我需要指定它们吗?源和目标都已按年、月和日划分
    • 我不明白这一点:“我没有年、月和日作为源表中的列”正如你所说的“源和目标都已经按年、月和日进行了分区” .
    • 是的,您可以添加 WHERE、HAVING、ORDER BY。只要您的列名与目标表匹配。如果不使用目标列名称别名它们
    • 分区只是一种特殊类型的列。您可以将它们视为列。那里不会有任何问题
    猜你喜欢
    • 1970-01-01
    • 2019-03-22
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 2018-02-17
    • 2016-09-01
    • 2017-08-16
    • 1970-01-01
    相关资源
    最近更新 更多