DataX icon indicating copy to clipboard operation
DataX copied to clipboard

数据库为postgresql, 执行sql的where 条件出现了乱码,请问这种情况一般需要如何处理的~?

Open wingshu opened this issue 2 years ago • 7 comments

com.alibaba.datax.common.exception.DataXException: Code:[DBUtilErrorCode-06], Description:[执行数据库 Sql 失败, 请检查您的配置的 column/table/where/querySql或者向 DBA 寻求帮助.]. - 执行的SQL为: select image_count,scan_time,create_time,id from acceptance where ('Fyay8-7ygQ7iQM73`{g7 |d3k' <= id AND id < 'H)M&&K MS:^zC

wingshu avatar Jan 11 '23 07:01 wingshu

因为你配置的splitPk字段是字符串类型,这是正常现象,代码逻辑就这样的.

修改建议:

  1. splitPk字段是数字类型[PS:强烈建议设置splitPk为数字类型].
  2. splitPk字段是字符串类型,但需保证该字段的字符集是大小写敏感的,不然会出问题,会导致你同步的数据不对,比如你原表只有100条数据,但最终却有120条入库.
  3. 不使用splitPk字段,此时任务不会切分,可能运行时间长.

该现象是这个类导致的 common/src/main/java/com/alibaba/datax/common/util/RangeSplitUtil.java 问题出在stringToBigInteger()和bigIntegerToString()这两个方法上.

Y-evil avatar Jan 12 '23 03:01 Y-evil

(自动回复)邮件已收到,谢谢。

wingshu avatar Jan 12 '23 03:01 wingshu

因为你配置的splitPk字段是字符串类型,这是正常现象,代码逻辑就这样的.

修改建议:

  1. splitPk字段是数字类型[PS:强烈建议设置splitPk为数字类型].
  2. splitPk字段是字符串类型,但需保证该字段的字符集是大小写敏感的,不然会出问题,会导致你同步的数据不对,比如你原表只有100条数据,但最终却有120条入库.
  3. 不使用splitPk字段,此时任务不会切分,可能运行时间长.

该现象是这个类导致的 common/src/main/java/com/alibaba/datax/common/util/RangeSplitUtil.java 问题出在stringToBigInteger()和bigIntegerToString()这两个方法上.

嗯嗯,谢谢你 。 可不可以指定其他数字类型唯一键作为任务切分的条件噶?

wingshu avatar Jan 16 '23 01:01 wingshu

你看下这个文档的说明 postgresqlreader/doc/postgresqlreader.md

splitPk仅支持整型(bigint, bigserial, integer, smallint, serial),不支持浮点类型,字符串,日期等类型.

Y-evil avatar Jan 16 '23 06:01 Y-evil

ok, 感谢你的答复~

wingshu avatar Jan 16 '23 09:01 wingshu

我来挖坟了。。。 mysql下 测了下主键id为 varchar 的 uuid 发现当都为大写时,比如 00293063EC8D48059FB32FD86DDC7C4F 竟然导出的数据量是准的。。。。 但是 ,我测试表填充的是小写uuid时,的确数据量不一致。

ilaotan avatar May 23 '23 12:05 ilaotan

(自动回复)邮件已收到,谢谢。

wingshu avatar May 23 '23 12:05 wingshu