ADF数据流任务中调用Azure Maps地理编码API转换经纬度时遇到类型不匹配及字段不存在错误
ADF数据流任务中调用Azure Maps地理编码API转换经纬度时遇到类型不匹配及字段不存在错误
嗨,我来帮你排查这个问题~ 你遇到的两个错误(字段不存在+类型不匹配)大概率是因为API返回的结构没正确解析,或者字段路径写错了,咱们一步步来解决:
先确认字段路径是否正确
你写的body.results1.position.lon里的results1可能是个笔误?Azure Maps地理编码API的默认返回结构里,结果是放在results数组里的,不是results1。另外,哪怕只有一个匹配地址,results也是数组类型,不能直接取position,得先指定数组索引,比如取第一个结果的话应该是body.results[0].position.lon。
建议你在数据流里先预览API调用后的输出数据,看看实际的层级结构,确认字段的正确路径——比如是不是你把API输出的数据集别名改成了results1?如果是,那路径应该是body.results1[0].position.lon哦。解决类型不匹配问题
当路径正确后,如果还是报类型不匹配,那可能是API返回的经纬度是字符串类型,或者存在null值的情况。你可以用条件判断+类型转换的组合来处理:iif(isNull(body.results[0].position.lon), null(), toDecimal(body.results[0].position.lon))这样既处理了null值的情况,也确保只有有效数据才会被转换成Decimal类型。
额外检查:API调用是否成功返回数据
有时候如果API调用返回了错误(比如地址无法解析),那results数组可能是空的,这时候取results[0]也会报错。你可以先判断数组是否为空:iif(length(body.results) == 0, null(), toDecimal(body.results[0].position.lon))这样能避免因无匹配结果导致的报错。
备注:内容来源于stack exchange,提问作者Artosu
相关产品推荐
相关产品推荐

