gpt4 book ai didi

mysql - 按 unix 时间戳的 Hive 动态分区

转载 作者:可可西里 更新时间:2023-11-01 16:30:26 25 4
gpt4 key购买 nike

我正在 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
;

但是,当我这样做的时候

time=unix_timestamp()

,我得到一个异常(exception)。我该怎么做呢?

谢谢

最佳答案

我认为如果您使用动态分区 ( 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 时间戳)的原始查询之前进行。

关于mysql - 按 unix 时间戳的 Hive 动态分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35858201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com