Azure新手求助:ADF数据流参数查询Cosmos DB无结果排查
解决Azure Data Factory数据流中Cosmos DB参数化查询无结果的问题
嘿,我来帮你搞定这个问题!你遇到的核心问题其实是参数值的单引号和查询语句里的单引号重复嵌套了,另外还有个小笔误也得注意。
问题根源分析
你硬编码查询的时候,用的是:
select c.column1,c.column2 from c where c.time_stamp >= '2010-01-01T20:28:45Z' and c.time_stamp <= '2020-09-11T20:28:45Z'
这里的日期字符串被单引号正确包裹,Cosmos DB能识别为合法的日期格式字符串。
但你设置的参数值已经自带了单引号:
"oldwatermark": "'2010-01-01T20:28:45Z'", "newwatermark": "'2020-09-11T20:28:45Z'"
然后查询语句又给参数加了一层单引号:
select c.column1,c.column2 from c where c.time_stamp >= ‘$oldwatermark’ and c.time_stamp <= ‘$oldwatermark’
这就导致实际执行的查询变成了:
select c.column1,c.column2 from c where c.time_stamp >= ''2010-01-01T20:28:45Z'' and c.time_stamp <= ''2010-01-01T20:28:45Z''
日期字符串被两层单引号包裹,Cosmos DB自然匹配不到任何数据。另外你还把第二个参数写成了$oldwatermark,应该是$newwatermark哦,这个小笔误也会影响结果。
两种解决办法
办法一:修改参数值,去掉单引号
把参数值改成不带单引号的纯日期字符串:
"oldwatermark": "2010-01-01T20:28:45Z", "newwatermark": "2020-09-11T20:28:45Z"
然后查询语句保留单引号包裹参数:
select c.column1,c.column2 from c where c.time_stamp >= '$oldwatermark' and c.time_stamp <= '$newwatermark'
办法二:保留参数值的单引号,查询里去掉外层单引号
如果不想修改参数值,直接在查询里使用参数即可,不用再加单引号:
select c.column1,c.column2 from c where c.time_stamp >= $oldwatermark and c.time_stamp <= $newwatermark
额外提醒
记得把查询语句里的第二个$oldwatermark改成$newwatermark,不然你的查询条件会变成时间戳同时大于等于和小于等于同一个值,即使参数对了,结果也可能不符合预期。
内容的提问来源于stack exchange,提问作者Amit Anand
相关产品推荐
相关产品推荐

