为啥我无法在 Hive 中使用具有多个插入子句的高级聚合功能?
Posted
技术标签:
【中文标题】为啥我无法在 Hive 中使用具有多个插入子句的高级聚合功能?【英文标题】:Why am I unable to use advanced aggregation features with a multiple insert clause in Hive?为什么我无法在 Hive 中使用具有多个插入子句的高级聚合功能? 【发布时间】:2017-01-05 07:35:22 【问题描述】:我想使用具有高级聚合功能with cube
的多重插入子句将多个聚合值插入 Hive 中的单个表中。
但是,由于未知原因,未插入列集的小计。
当使用列值的默认值 null 以及使用 coalesce
将其替换为字符串时,都会出现此问题。
在任何列中都没有可能导致冲突的空值。
其他高级聚合功能(grouping sets
、rollup
)也会出现此问题。
我希望使用这种插入方法,因为它是执行此操作的最有效方式。
我使用的语法是:
FROM tablename1
INSERT OVERWRITE TABLE tablename2 PARTITION (partcol1=val1) SELECT select_statement1 WHERE where_condition1 GROUP BY col_list WITH CUBE
INSERT OVERWRITE TABLE tablename2 PARTITION (partcol1=val2) SELECT select_statement2 WHERE where_condition2 GROUP BY col_list WITH CUBE ...;
有没有办法解决这个问题,或者这种方式不能使用多重插入子句?
提前感谢您的帮助。
【问题讨论】:
James 你为什么不用动态分区..? 在这种情况下,不使用动态分区有两个原因。 1. 该表包含两个分区,其中一个是在每个插入子句的 where 条件中定义的,因此必须手动设置该值。 2.批量查询的执行环境要求使用静态分区。 【参考方案1】:此问题似乎特定于 Map-reduce 执行引擎。上面的语法在执行引擎换成Tez后正常执行。
https://issues.apache.org/jira/browse/HIVE-15581
【讨论】:
以上是关于为啥我无法在 Hive 中使用具有多个插入子句的高级聚合功能?的主要内容,如果未能解决你的问题,请参考以下文章
进入 Hive 表 - 非分区表到具有多个分区的分区表 - 无法插入目标表,因为列号/类型
进入 Hive 表 - 非分区表到具有多个分区的分区表 - 无法插入目标表,因为列号/类型
为啥在具有多个连接的 WHERE 子句中,子查询比文字值执行得更好?
Hive:无法在具有 100 个或更多分区列的表中插入数据错误:在最大长度为 767 的列“PART_NAME”中