DataX column作为变量传到json中解析不正确

mnemlml8  于 3个月前  发布在  其他
关注(0)|答案(7)|浏览(97)

reader中配置 “querysql”:["${sql}"] writer 中配置 “column”:["${incolumns}"]

无论我怎么传-Dcolumns的参数
python datax.py x.json -p "-Dsql=" select id,name from tbxx" -Dcolumns=id,name"

python datax.py x.json -p "-Dsql=" select id,name from tbxx" -Dcolumns="id","name" "

python datax.py x.json -p "-Dsql=" select id,name from tbxx" -Dcolumns="id","name""

执行的时候看到的x.json都解析成了“column”:["id,name"]
求怎么能让x.json解析成 “column”:["id","name"]

qco9c6ql

qco9c6ql1#

"columns": ["$col2"]
-Dcol2 = name","name2","name3

关键在于中间带引号,靠近括号的地方开始和结束不带。注意添加斜杠转义字符

nnvyjq4y

nnvyjq4y2#

“列”: [“$col 2”] -Dcol2 = 名称“,”名称 2“,”名称 3

关键在于中间带引号,靠近括号的地方开始和结束不带。注意添加斜杠转义字符

这个不行呀...使用\斜杠做转义也没法正常传递
-DcolumnList=id","username","mobile","create_time","update_time

cgyqldqp

cgyqldqp3#

“列”: [“$col 2”] -Dcol2 = 名称“,”名称 2“,”名称 3
关键在于中间带引号,靠近括号的地方开始和结束不带。注意添加斜杠转义字符

这个不行呀...使用\斜杠做转义也没法正常传递 -DcolumnList=id","username","mobile","create_time","update_time

楼主成功了,你是不是shell启动,shell 还得多加一个斜杠

ljo96ir5

ljo96ir54#

``python /app/sinova/zbz/datax_oracle_new/datax/bin/datax.py -p "-DcolumnList=id","username","mobile","create_time","update_time" /app/sinova/zbz/datax_oracle_new/oracle_test.json
执行的这个 不行

omhiaaxx

omhiaaxx5#

``python /app/sinova/zbz/datax_oracle_new/datax/bin/datax.py -p "-DcolumnList=id","username","mobile","create_time","update_time" /app/sinova/zbz/datax_oracle_new/oracle_test.json 执行的这个 不行
三个斜杠

j5fpnvbx

j5fpnvbx6#

我最后试验成功了,总结了一下,还是因为shell命令最基本的单引号和双引号理解不够透彻导致的。
首先明确一点最终传递到-Dcolumn里面的应该是 id","name","filesize 这个字符串,前后的双引号是省略的。

剩下的就是shell调用python的时候,双引号和单引号的问题。
function exp {
echo $1 $2 $3
sql=$1
column=${2//,/","}
postsql=${3//;/\";\"}
echo $sql $column $postsql
python xxx.json -p "-Dsql="$sql" -Dcolumn='$column' -Dpostsql="$postsql" "
}

exp "select '1' as id,filename,filesize from tb" "id,filename,filesize" "select 1; select 2"

column在执行的时候是单引号引用的,函数内将逗号换成双引号逗号双引号,转义双引号
postsql在执行的时候是双引号引用的,函数内将分号换成双引号分号双引号。转义双引号,反斜杠需要再次转义。

sql参数中如果使用了单引号转列名的时候,执行的语句中用双引号将sql引起来,以前也有不少兄弟遇到过这种问题。

还有就是presql和postsql,,其实如果要执行两条语句,在执行数据同步,直接传递“select 1;select2“ 是不行的 应该传“select 1” “select 2”,按照我们的本意是两条语句直接执行用分号隔开,但是datax,一次不能执行2条语句,要一条一条的执行。

2cmtqfgy

2cmtqfgy7#

最后我在执行脚本的python中进行修改.json文件解决的,执行前先修改json文件正常

相关问题