hive是否支持任何特定的时间戳格式?我的spark作业有一个时间戳“yyyy-mm-dd hh-mm-ss”,但是在hive中存储相同的时间戳时,数据正在转换为null?配置单元表的数据类型为timestamp
blmhpbnm1#
是的,您可以查看配置单元语言手册支持传统的unix时间戳和可选的纳秒精度。支持的转换:整数数字类型:以秒为单位解释为unix时间戳浮点数字类型:用十进制精度解释为unix时间戳(以秒为单位)strings:jdbc兼容java.sql.timestamp格式“yyyy-mm-dd hh:mm:ss.fffffff”(精确到小数点后9位)我想这就是你的情况文本文件中的时间戳必须使用yyyy-mm-dd hh:mm:ss[.f…]格式。如果是其他格式,请将其声明为适当的类型(int、float、string等),并使用自定义项将其转换为时间戳。
68bkxrlz2#
一个方法(结束昂贵的一个)是设置 mergeSchema 至 true 更简单的方法是处理 null 在timestamp列中使用deafult值,如 coalesce(col("<spark_ts_column>"),lit("1970-01-01-00-00-00").cast(TimestampType)) 顺便说一句,时间戳的格式看起来不标准,示例数据/代码会有所帮助。
mergeSchema
true
null
coalesce(col("<spark_ts_column>"),lit("1970-01-01-00-00-00").cast(TimestampType))
2条答案
按热度按时间blmhpbnm1#
是的,您可以查看配置单元语言手册
支持传统的unix时间戳和可选的纳秒精度。
支持的转换:
整数数字类型:以秒为单位解释为unix时间戳
浮点数字类型:用十进制精度解释为unix时间戳(以秒为单位)
strings:jdbc兼容java.sql.timestamp格式“yyyy-mm-dd hh:mm:ss.fffffff”(精确到小数点后9位)
我想这就是你的情况
文本文件中的时间戳必须使用yyyy-mm-dd hh:mm:ss[.f…]格式。如果是其他格式,请将其声明为适当的类型(int、float、string等),并使用自定义项将其转换为时间戳。
68bkxrlz2#
一个方法(结束昂贵的一个)是设置
mergeSchema
至true
更简单的方法是处理null
在timestamp列中使用deafult值,如coalesce(col("<spark_ts_column>"),lit("1970-01-01-00-00-00").cast(TimestampType))
顺便说一句,时间戳的格式看起来不标准,示例数据/代码会有所帮助。