[英]How to insert from a select query with dynamic partitioning on a column in Hive?
我正在尝试插入计算分区。 需要从键列中计算分区的值。 假定示例中的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;
我不知道什么是正确的解决方案。 我总是收到语法错误。
Enyone知道解决方案吗? 谢谢
更新:
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;
您应该明确指定要插入的所有列名称。 例如,您的命令应如下所示:
INSERT OVERWRITE TABLE exampledb.exampletable
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)
FROM exampledb.exampletable_temp;
这应该工作。
更新
我试图创建一个测试用例,但是INSERT INTO
INSERT OVERWRITE
似乎不起作用,但是INSERT INTO
起作用了。 一种解决方法是使用TRUNCATE TABLE exampledb.exampletable
从目标表中删除所有数据,或者使用TRUNCATE TABLE test6 PARTITION (my_part = '001');
从特定分区中删除所有数据TRUNCATE TABLE test6 PARTITION (my_part = '001');
,然后运行INSERT INTO
:
INSERT INTO exampledb.exampletable
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)
FROM exampledb.exampletable_temp;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.