datax数据导入starrocks表报列数量不匹配错误,问题解决思路

背景

在做客户数据导入任务的时候,需要将客户oracle的数据通过datax导入到 starrocks的表中,但是datax的配置文件中SQL查找客户数据的列数和要导入的starrocks表的列数都是相同且对应的,但是导入结果就是报了列数不对等的错误,Error: Value count does not match column count. Expect 20, but got 21. Row

如图所示:

datax数据导入starrocks表报列数量不匹配错误,问题解决思路_第1张图片

解决思路:

对于这类问题,由于查找的列的数量很多,我们并不知道客户那边是哪个字段里面有个什么字符,导致本来是一列的结果被datax误判为两列

  • 首先复制一份datax配置文件,执行如下命令(配置文件名字不一定相同):cp abc.json abc_test.json

  • 然后修改 abc_test.json 配置文件中的writer,将写到 storrocks表的数据改为输出到控制台中,如图所示:

datax数据导入starrocks表报列数量不匹配错误,问题解决思路_第2张图片
  • 修改完成以后,开始从客户那边数据查询出来,并将数据导入到一个临时文件test.log中,执行如下命令:python datax.py abc_test.json >test.log 2>&1

  • 之后编辑 test.log文件,执行如下命令:vim test.log,将test.log文件中的开头和结尾非数据部分给删掉

  • 剩下的test.log中全是同步过来的数据部分,然后将每一行列数同步到另外一个临时文件test2.log中,执行如下命令:awk -F '\t' '{print NF}' >test2.log

  • 此时我们再次编辑test2.log,找到不是正常列数对应的行,记录这是第几行

datax数据导入starrocks表报列数量不匹配错误,问题解决思路_第3张图片
  • 然后在test.log中找到不正常列数的行,查看对应的数据,究竟是那一字段中有特殊字符,例如在客户中发现是字符中同时有 \t 和 \n导致列数不对。

  • 在datax的abc_test.json配置文件中,将查找的SQL,使用替换的方式,将\t和\n分别替换为空格,如图所示:

datax数据导入starrocks表报列数量不匹配错误,问题解决思路_第4张图片
  • 之后再次测试一遍,执行如下命令:python datax.py abc_test.json >test.log 2>&1

  • 之后编辑 test.log文件,执行如下命令:vim test.log,将test.log文件中的开头和结尾非数据部分给删掉

  • 剩下的test.log中全是同步过来的数据部分,然后将每一行列数同步到另外一个临时文件test2.log中,执行如下命令:awk -F '\t' '{print NF}' >test2.log

  • 此时我们再次编辑test2.log,找到不是正常列数对应的行,直到没有不正常列数对应的行,此时可以正式修改pm_history.json,来进行正常同步数据。

你可能感兴趣的:(Linux,datax,数据同步,列数不匹配,starrocks,linux)