簡體   English   中英

如何從具有動態分區的Hive列中的select查詢插入?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM