alibaba / DataX

DataX是阿里云DataWorks数据集成的开源版本。
Other
15.88k stars 5.42k forks source link

oracle 特殊语法导致不能使用splitPk配置 #625

Open Python-dedede opened 4 years ago

Python-dedede commented 4 years ago

一、"splitPk":"\"id\"",导致在确认字段阶段,报没有 "id" 字段,日志信息如下: .....table:["order_tb"] has columns:[id,type,relationId]. .......:[您填写的主键列不合法, DataX 仅支持切分主键为一个,并且类型为整数或者字符串类型.]. - 您的配置文件中的列配置信息有误. 因为根据您的配置,您读取的数据库表:"order_tb" 中没有主键名为:"id". 请检查您的配置并作出修改.

二、"splitPk":"id",导致在同步数据阶段,oracle sql语法报错,日志信息如下: com.alibaba.datax.common.exception.DataXException: Code:[ORACLEErrCode-05], Description:[SQL语句执行出错,原因可能是你填写的列不存在或者where条件不符合要求,1,请检查该列是否存在,如果是常量或者变量,请使用英文单引号’包起来; 2,请检查Where条件是否存在拼写或语法错误]. - 执行的SQL为: SELECT * FROM ( SELECT id FROM "order_tb" SAMPLE (0.1) WHERE (id IS NOT NULL) ORDER BY DBMS_RANDOM.VALUE) WHERE ROWNUM <= 15 ORDER by id ASC 具体错误信息为:java.sql.SQLSyntaxErrorException: ORA-00904: "ID": invalid identifier

bugmeng commented 4 years ago

这个属性好像在oracle不生效的,你的问题提示信息都给出来了呀

Python-dedede commented 4 years ago

oracle查询语法:select "id" from "tb_name" datax检查splitPk字段在对应的表中是否存在:将“id”视为一个字段,但是datax遍历表的字段是id,没有带双引号。

因此呢产生了一个非常矛盾的现象:我将字段加上双引号,oracle语句没有语法问题,但是在检查字段是否存在时,"id" <-> id比较,直接报属性不存在的错误提示; 我取消双引号呢,虽然字段是否存在的检查能够通过,但是oracle语句有语法问题。

bugmeng commented 4 years ago

bug @Python-dedede

meixikyi commented 3 years ago

@Python-dedede 请问后面怎么解决的这个问题呢?

bear-xiong commented 7 months ago

蹲个大佬,怎么解决这个问题