簡體   English   中英

通過Unix時間戳進行Hive動態分區

[英]Hive dynamic partition by unix timestamp

我正在Hive中創建一個表,運行一個映射器轉換,然后保存一個表。 我想根據運行Hive查詢的時間對表進行分區。

我創建表:

CREATE EXTERNAL TABLE IF NOT EXISTS testtable (
    test_test STRING
) PARTITIONED BY (time STRING)
LOCATION 'loc/table'
;

然后運行轉換並嘗試嘗試保存表:

FROM (
MAP 
one.test_test
USING 
'python job.py' 
AS test1
FROM 
one
) test_step
INSERT OVERWRITE TABLE testtable PARTITION (time=unix_timestamp())
SELECT CAST ( test_step.test1 AS STRING ) AS test_test
;

但是,當我做

時間= unix_timestamp()

,我例外。 我將如何去做呢?

謝謝

我認為,如果您使用動態分區( https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DML#LanguageManualDML-DynamicPartitionInserts ),它應該可以工作。 分區字段只是表中的另一列,因此,如果查詢中有該列的值,則Hive會自動將其放在正確的分區中。 所以你的陳述看起來像這樣

FROM (
MAP 
one.test_test
USING 
'python job.py' 
AS test1
FROM 
one
) test_step
INSERT OVERWRITE TABLE testtable PARTITION (time)
SELECT CAST ( test_step.test1 AS STRING ) AS test_test,
unix_timestamp() as time
;

這樣做可能會創建很多分區,因為unix_timestamp()的值將在查詢執行期間改變。 最好使用額外的語句先創建分區然后再插入。

編輯:要事先添加分區,您需要以某種方式設置時間戳,例如腳本的參數。 然后

ALTER TABLE testtable ADD PARTITION (time=your_timestamp_here);

這將在原始查詢之前執行,在該查詢中,您將unix_timestamp()替換為your_timestamp_here(這當然是有效的unix時間戳)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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