gpt4 book ai didi

hadoop - 从Pig生成的CurrentTime()在Hive Datetime列中显示为NULL

转载 作者:行者123 更新时间:2023-12-02 18:34:24 25 4
gpt4 key购买 nike

在Pig脚本中,我生成了datetime列,其值为CurrentTime()。
从Hive Table读取PigScript生成的输出数据时,它显示为NULL。
有什么方法可以从PIG加载当前日期时间列以显示在Hive表中?
文件中的数据看起来像2020-07-24T14:38:26.748-04:00,而在配置单元表中,该列属于timestamp数据类型

最佳答案

hive 时间戳记应采用'yyyy-MM-dd HH:mm:ss.SSS'格式(不包括T和时区-04:00)
1.将Hive栏定义为STRING
2.Transfom字符串格式与Hive时间戳兼容
如果不需要毫秒:

--use your string column instead of literal
from_unixtime(unix_timestamp('2020-07-24T14:38:26.748-04:00',"yyyy-MM-dd'T'HH:mm:ss.SSSX"))
返回值:
2020-07-24 18:38:26 
如果需要毫秒,则另外提取毫秒并与转换后的时间戳连接:
select concat(from_unixtime(unix_timestamp('2020-07-24T14:38:26.748-04:00',"yyyy-MM-dd'T'HH:mm:ss.SSSX")), 
'.',regexp_extract('2020-07-24T14:38:26.748-04:00','\\.(\\d{3})',1))
结果:
2020-07-24 18:38:26.748
这两个结果均与Hive时间戳兼容,并且可以根据需要使用 CAST(str as timestamp)函数将其显式转换为Timestamp类型,尽管将这些字符串与时间戳进行比较或插入时间戳时无需显式转换即可。
或者,您可以将Pig中的时间戳格式设置为 'yyyy-MM-dd HH:mm:ss.SSS'。我没有Pig,也无法检查ToString的工作方式。
同样对于LazySimpleSerDe,可以通过将格式提供给SerDe属性 "timestamp.formats"(从1.2.0版本开始,带有 HIVE-9298)来支持其他时间戳格式。试试 "yyyy-MM-dd'T'HH:mm:ss.SSSX"

关于hadoop - 从Pig生成的CurrentTime()在Hive Datetime列中显示为NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63080648/

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