如何在Spark SQL中执行INSERT语句插入Timestamp类型列
解决Spark SQL插入Timestamp类型值的问题
你报错的核心原因是日期格式符使用不符合Spark SQL规则,以下是几种可行的修正方案:
方案1:修正to_timestamp的格式参数
Spark SQL遵循Java日期格式规范,你之前的格式字符串存在两处错误:
- 月份需用大写
MM,小写mm代表分钟 - 24小时制小时用
HH,而非hh24 - 纳秒部分用
SSSSSSSSSS匹配9位数字
修正后的插入语句:
insert_query="insert into tbl2 partition(year='2022') values (101,to_timestamp('2019-06-13 13:22:30.521000000', 'yyyy-MM-dd HH:mm:ss.SSSSSSSSS'))" spark.sql(insert_query)
方案2:直接传入ISO标准格式字符串
如果你的时间字符串是yyyy-MM-dd HH:mm:ss.SSSSSSSSS这类ISO兼容格式,无需调用to_timestamp,Spark会自动转换为Timestamp类型:
insert_query="insert into tbl2 partition(year='2022') values (101,'2019-06-13 13:22:30.521000000')" spark.sql(insert_query)
方案3:通过时间戳数值插入
也可以传入毫秒/纳秒级时间戳,借助from_unixtime转换:
# 示例:基于毫秒级时间戳1560439350521转换 insert_query="insert into tbl2 partition(year='2022') values (101,from_unixtime(1560439350521/1000))" spark.sql(insert_query)
内容的提问来源于stack exchange,提问作者Surendiran Balasubramanian
相关产品推荐
相关产品推荐

