spark jdbc write(到mysql)在datetime和timestamp列中缺少毫秒

nkkqxpd9  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(617)

也有类似的问题,但我开始认为我的问题与sparkjdbcapis有关,因为这两个组件本身似乎工作正常。我使用的是spark2.4(它支持ms时间戳),mysql 5.7.x版本支持分秒。
我创建了一个简单的数据集,其中有一个timestamptype列,当我显示()它时,得到的结果如下:

+-----------------------+
|my_timestamp           |
+-----------------------+
|2021-02-06 12:11:45.335|
+-----------------------+

当我将其写入mysql(使用dataset.write())时,它会自动创建表,列的时间戳类型为sql,毫秒部分在插入时丢失。
对于第二个测试,我手动创建了表,并将冒号定义为timestamp(3)。当我手动插入带有ms part的时间戳时,一切正常。但是当我使用sparkjdbcapis编写时,ms部分再次被截断,变成 2021-02-06 12:11:45.0. 唯一想到的解决方法是将列保留为long/bigint,并在查询时将其转换为datetime/timestamp。
我做错什么了吗?

5vf7fwbs

5vf7fwbs1#

好吧,我来救你。显然,如果我将spark列保留为字符串,并按照mysql期望的格式设置值,例如“2020-11-20 23:06:41.745”,我就可以插入mysql timestamp(3)列,而不会出现任何截断或其他问题。
这感觉更像是一种变通方法,所以我仍然想知道是否有一种方法可以正确地做到这一点。

相关问题