Azure Data Factory中如何将特殊字符作为参数传递?
Azure Data Factory中如何将特殊字符作为参数传递?
你碰到的这个问题我之前也踩过坑!核心原因是:当你在SQL数据库里把\u0006存成varchar类型时,它其实是作为普通字符串存储的(也就是字面量的"\u0006"),而不是对应的ASCII控制字符(SOH,十进制ASCII码是6)。ADF拿到这个参数后,会直接把它当成普通文本,自然没法识别成列分隔符——但你硬编码的时候,ADF会自动解析\u0006为实际的特殊字符,所以就能正常工作。
给你几个实用的解决办法,按需选就行:
方法一:直接在SQL中存储实际的特殊字符
如果可以修改SQL里的存储方式,别存\u0006这个字符串,而是用SQL的CHAR()函数生成实际的控制字符。比如执行以下语句更新你的参数值:
UPDATE 你的参数表 SET delimiter_col = CHAR(6) WHERE ...
这样当ADF从SQL读取这个参数时,拿到的就是真正的ASCII 6字符,直接传给CSV数据集的列分隔符参数就能正常识别了。
方法二:在ADF中把转义字符串转换成实际字符
如果没法修改SQL的存储内容,那就在ADF里做转换。你可以用表达式函数把\u0006这种转义字符串转换成对应的字符:
- 假设你的管道参数名为
DelimiterParam,值是从SQL读取的\u0006 - 在数据集的列分隔符字段里,使用以下表达式:
char(int(replace(pipeline().parameters.DelimiterParam, '\u', ''), 16))
这个表达式的逻辑是:先把\u替换掉,剩下0006,再把十六进制的0006转换成十进制的6,最后用char(6)生成实际的特殊字符。
方法三:用ADF变量中转处理
如果表达式写起来太复杂,也可以用变量来分步处理:
- 在管道里创建一个字符串类型的变量,比如
ActualDelimiter - 给变量赋值时用上面的转换表达式:
@char(int(replace(pipeline().parameters.DelimiterParam, '\u', ''), 16)) - 然后在CSV数据集的列分隔符字段里,直接引用这个变量
@variables('ActualDelimiter')
最后记得测试一下,不管用哪种方法,只要确保传给数据集的是实际的特殊字符而不是转义字符串,Copy Data活动就能正确识别分隔符啦。
备注:内容来源于stack exchange,提问作者Berto
相关产品推荐
相关产品推荐

