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