【问题标题】:how to set up dynamic partition where the column keys will be the partitions如何设置动态分区,其中列键将是分区
【发布时间】:2017-03-10 19:55:57
【问题描述】:

所以我有一个表 A 和表 B,其中表 A 的数据是从表 B 中插入的。 本质上,表 A 与表 B 相同,唯一的区别是表 A 有一个 date_partition 列,而表 B 没有。 表 A 模式是这样的: 身份证号码 school_bg_dt 字符串 log_on_count 整数 active_count int

表 B 架构是: 身份证号码 school_bg_dt 大整数 log_on_count 整数 active_count 整数 date_partition 字符串

这是我将表 B 插入表 A 的查询,其中有一个我无法弄清楚的错误:

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
INSERT OVERWRITE TABLE A PARTITION(date_partition=school_bg_dt)
SELECT ID, cast(school_bg_dt as BIGINT), log_on_count, active_count FROM table
B;

但是,我收到错误,即输入无法识别 date_partition 附近的操作.. 不知道在这里做什么,请帮助... 因此设计是将每个 school_bg_dt 键作为一个分区,因为它具有许多具有该键的唯一数据。

【问题讨论】:

    标签: hadoop apache-spark dynamic hive partition


    【解决方案1】:

    来自here

    在动态分区插入中,用户可以给出部分分区规范,即只在 PARTITION 子句中指定分区列名列表。列值是可选的。如果给定了一个分区列值,我们称其为静态分区,否则为动态分区。每个动态分区列都有一个来自 select 语句的相应输入列。这意味着动态分区的创建是由输入列的值决定的。动态分区列必须在 SELECT 语句中的列中最后指定,并且与它们在 PARTITION() 子句中出现的顺序相同。

    那么,试试吧:

    FROM B
    INSERT OVERWRITE TABLE A PARTITION(date_partition)
    SELECT ID, cast(school_bg_dt as BIGINT), log_on_count, active_count, school_bg_dt as date_partition;
    

    另外,请注意,如果您要创建多个分区,则应更新以下 conf 设置:

    • hive.exec.max.dynamic.partitions.pernode - 最大动态数 允许在每个 mapper/reducer 节点中创建分区(默认 = 100)
    • hive.exec.max.dynamic.partitions - 最大动态数 允许创建的分区总数(默认 = 1000)
    • hive.exec.max.created.files - MapReduce 作业中所有映射器/缩减器创建的 HDFS 文件的最大数量(默认 = 100000)

    【讨论】:

    • 谢谢 Alex,但它失败了,它说执行错误,从 org.apache.hadoop.hive.ql.exec.mr.MapRedTask 返回代码 2
    • @Michelle 请在编辑后尝试使用新语法
    • Alex,还是不行,conf设置需要INT类型但是我的分区列需要String类型
    • @Michelle 是的,conf 设置需要整数,它与分区类型无关......你创建了多少个分区?表 b 中有多少不同的 school_bg_dt 值?
    • Alex,我最终将它按年分区,例如将 date_partition 设置为年份值,这样就可以了。我认为服务器可能无法处理大量分区。分区设置为每月,我们需要它来处理 5 年的数据,这是要处理的大量数据。但现在我们只是决定使用年份而不是月份。
    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 2022-01-05
    • 1970-01-01
    • 2012-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多