sql - 如何从具有动态分区的选择查询中插入 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;
我不知道什么是正确的解决方案。我总是收到语法错误。
有没有人知道解决方案?谢谢
更新:
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 OVERWRITE
,但似乎不起作用,但INSERT INTO
正在工作。一种解决方法可能是使用 删除目标表中的TRUNCATE TABLE exampledb.exampletable
所有数据,或使用 删除特定分区中的所有数据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;
推荐阅读
- integration - NetSuite SuiteScript 2.0 与外部挂钩的集成
- c# - 编组结构列表时出现意外结果
- java - 如何将文件附加到可以在此 jar 中编辑的 jar?
- reactjs - 模型属性改变时调用组件方法
- julia - 使用 Gadfly 的 Julia 中的子图
- html - 如何让我的表单站点在每台设备上工作(响应式)
- ruby-on-rails - 如何在 rails 5 中修复此错误“HasManyThroughCantAssociateThroughHasOneOrManyReflection”?
- python - 根据条件 [PYTHON] 从多维列表中删除子列表
- python - 在 Python 中将多个操作压缩为单行
- javascript - 基于多标准的电子邮件警报触发器