【发布时间】:2016-11-21 10:44:50
【问题描述】:
有一个包含大约 100 列的 HIVE 表,按列 ClientNumber 和 Date 进行分区。
我正在尝试将另一个 HIVE 表中的数据插入到仅 30 列中,并动态创建 Date 分区。
问题是所有数据都加载到“ClientNumber=123/date=__HIVE_DEFAULT_PARTITION__”分区中,这并不完全是预期的。
脚本如下所示:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
FROM DBName.Table2
INSERT INTO TABLE DBName.Table1
PARTITION(ClientNumber=123, `Date`)
(col1, col2, ..., col29, `Date`)
SELECT
col1, col2, ..., col29, eventDate as `Date`
Date 查询检索到的值都是正确的,没有 NULL 或其他异常值。
删除或添加动态分区参数没有区别。
提供特定的Date 值(而不是动态查询填充的值)会导致创建正确的分区。
在分区表中填充特定数量的列时,我是否遗漏了什么技巧或一些问题?
附:是否值得考虑将导入脚本中的所有其他列 (col31 - col100) 列为 NULL?
【问题讨论】:
-
更新: 1.
Date列在创建表时被声明为分区字段。列的保留关键字或别名不是问题 - 在其他情况下也适用。 2. 使用'cast(NULL as string) as colN'定义列出所有剩余的列可以被认为是这种情况的解决方法。但是,脚本变得更大,我仍然想了解 INSERT 特定字段的问题。
标签: hadoop hive hadoop-partitioning