【报错记录】解决Clickhouse DateTime保存报错问题:Cannot parse string ‘XX‘ as DateTime: syntax error at position

前言

原来的clickhouse insert方法使用的clickhouse0.3.2版本,不会报任何错,Java类使用的也是Date类型,但是更换到0.4.0版本的clickhouse驱动后,保存数据就开始报这个错,如下图所示:

解决方案

看到这个问题后感觉一脸懵逼,不就是换了一个clickhouse的驱动版本吗,从clickhouse-jdbc-0.3.2.jar换到clickhouse-jdbc-0.4.0.jar,怎么时间保存就报错了呢?

然后发现报错在

而这个值是毫秒,我就意识到可能是DateTime类型的长度不够了,不足以存入毫秒值,因此只需要将该字段的时间类型改为DateTime64即可,问题就能顺利解决!

但是又有一个新的问题,之前的那些数据怎么办,Clickhouse是无法直接改变字段类型的。

修改clickhouse的字段类型

我这里全程使用DBeaver操作,这是少数能直接操作clickhouse的工具了

  1. 先找到需要修改的表,打开DDL

图中的表我已经都改成DateTime64了

  1. 复制这个DDL,到文本编辑器中,将DateTime改为DateTime64。

  1. 修改CREATE TABLE中的表名,将其改为另一个表名,使用DBeaver执行这个SQL,再建一张表

  1. 右键需要备份的表,选择“导出数据”

导出为SQL即可。

  1. 打开导出的SQL,批量修改INSERT INTO 后的表名,执行这个SQL(由于数据保密要求,这里就不截图了)

  1. 修改原来的表名

rename table `my_table` to `my_table_backup`;

  1. 修改改完字段类型的表的表名

rename table `my_table2` to `my_table`;

完成

这样就做到了既修改了clickhouse的列的数据类型,又做到数据不丢失

猜你喜欢

转载自blog.csdn.net/DCTANT/article/details/128974365
今日推荐