【发布时间】:2018-05-14 00:09:29
【问题描述】:
我正在尝试插入计算分区。 分区的值需要从键列计算。 假设示例中的 key_2 始终有 10 个字符。我想在分区中使用的最后 3 个字符。我需要动态分区。
我的表是这样的:
DROP TABLE exampledb.exampletable;
CREATE TABLE exampledb.exampletable (
key_1 STRING,
key_2 STRING,
col_1 STRING,
col_2 STRING
)
PARTITIONED BY (my_part STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\u0001'
;
我尝试了以下 HQL 的多种变体:
INSERT OVERWRITE TABLE exampledb.exampletable
PARTITION(my_part)
SELECT
key_1,
key_2,
col_1,
col_2,
SUBSTR(key_2, -3) as my_part -- not sure how to insert partition
FROM exampledb.exampletable_temp;
我不知道什么是正确的解决方案。 我总是遇到语法错误。
有没有人知道这个问题的解决方案? 谢谢
更新:
FAILED: SemanticException Partition spec {my_part=null} contains non-partition columns
更新 2:
我也尝试通过使用此解决方案来避免 NULL 值(如下所示,但错误相同):
INSERT OVERWRITE TABLE hvdb_as_aqua_guk_core.hvtb_aqua_guk_finding_mgn
PARTITION(my_part) ( key_1, key_2, col_1, col_2, my_part )
SELECT
key_1,
key_2,
col_1,
col_2,
SUBSTR(key_2, -3) as my_part -- not sure how to insert partition
FROM hvdb_as_aqua_guk_core.hvtb_aqua_guk_finding_mgn_temp2
WHERE key_2 IS NOT NULL
AND SUBSTR(key_2, -3) IS NOT NULL;
【问题讨论】:
-
我已经更新了问题...
标签: sql hadoop hive hql hiveql