Azure Data Factory动态架构映射问题:字符串化JSON转JSON对象
Azure Data Factory 动态架构映射:将转义JSON字符串转为JSON对象的解决方案
方案1:修改源SQL语句,确保返回JSON对象
如果源表的data_context字段是字符串类型存储的JSON内容,直接使用JSON_QUERY无法自动解析转义字符,需要先将字符串转换为JSON类型再提取:
SELECT [table], -- 先将字符串转成JSON类型,再用JSON_QUERY返回JSON对象 JSON_QUERY(TRY_CAST(data_context AS JSON)) AS data_context, [operation], [updated_at] FROM [BIS_ChangedDataOnEventStage] WHERE [id] <= 5000
- 说明:
TRY_CAST尝试将字符串格式的JSON转为SQL Server的JSON类型,JSON_QUERY确保返回完整的JSON对象而非字符串,ADF读取时会识别为复杂对象类型。
方案2:在ADF数据流动中解析字符串为JSON对象
若无法修改源SQL,可通过数据流动的派生列转换处理:
- 在数据流动中添加源数据集,连接到目标SQL表。
- 添加派生列转换,设置派生列名为
data_context,输入表达式:
json(data_context)- 添加派生列转换,设置派生列名为
- 将处理后的数据流连接到sink数据集,此时
data_context已转为JSON对象,sink会按正常JSON结构输出。
- 将处理后的数据流连接到sink数据集,此时
方案3:调整复制活动的TabularTranslator配置
如果使用复制活动,需修改Translator配置以保留复杂类型,避免将JSON对象转为转义字符串:
{ "type": "TabularTranslator", "typeConversion": true, "typeConversionSettings": { "allowDataTruncation": true, "treatBooleanAsNumber": false }, "mapComplexValuesToString": false }
- 关键配置:
mapComplexValuesToString设为false,禁止ADF将JSON对象转为字符串;同时确保源数据集的schema中data_context字段类型设为Object(可手动调整自动检测的schema)。
验证结果
应用上述任一方案后,sink输出的JSON结构将符合预期:
[{ "table": "pnt", "data_context": { "pnt_name": "P000_KLAUS22", "pnt_no": 136 }, "operation": "DEL", "updated_at": "2023-08-17T07:51:42.447" }]
内容的提问来源于stack exchange,提问作者K N
相关产品推荐
相关产品推荐

