ADF数据管道导入Schema报错:couldn't understand path 0
问题描述
我正尝试在Azure Data Factory(ADF)中创建数据管道,通过Copy Activity从REST API提取数据并存储至Azure SQL数据库。该REST API的列名与数据值分属不同数组,示例JSON结构如下:
{"dataset": {"id": num_id,"dataset_code": "CodeX","database_code": "BSE","name": "copmany","description": "company description","refreshed_at": "2023-09-01 14:25:40 UTC","newest_available_date": "2020-03-20","oldest_available_date": "2010-03-18","column_names": ["Date","Open","High","Low","Close"],"frequency": "daily","type": "Time Series","premium": false,"limit": null,"transform": null,"column_index": null,"start_date": "2010-03-18","end_date": "2020-03-20","data": [["2020-03-20",4.5,4.7,4.45,4.48],["2020-03-19",4.55,4.67,4.15,4.5]],"collapse": null,"order": null,"database_id": 3287}}
导入Schema时会包含所有数据集描述信息,因此我设置集合引用路径为$['dataset']['data']以仅获取数据值,但此时导入Schema失败,报错信息为**"couldn't understand path 0"**。我期望将数据按指定结构(Date为日期类型,Open、Close、High、Low为小数类型)存储到Azure SQL sink中。
解决方案
针对这种列名与数据分离的REST API结构,直接用Copy Activity自动导入Schema无法匹配列名,需按以下步骤处理:
1. 配置Copy Activity源与手动映射
- 源数据集设置:集合引用路径保持
$['dataset']['data'],确保仅读取数据数组。 - 映射阶段放弃自动导入Schema,改用Derived Column手动解析数组元素:
- 新建列
Date,表达式为@item()[0],数据类型设为Date/Time。 - 新建列
Open,表达式为@item()[1],数据类型设为Decimal。 - 依次创建
High(@item()[2])、Low(@item()[3])、Close(@item()[4])列,均设为Decimal类型。
- 新建列
2. 配置Azure SQL Sink
- 在Azure SQL数据库中提前创建目标表,结构示例:
CREATE TABLE StockData ( Date DATE, Open DECIMAL(10,2), High DECIMAL(10,2), Low DECIMAL(10,2), Close DECIMAL(10,2) ) - 在Copy Activity的Sink配置中选择该表,将Derived Column生成的列与表中列一一对应。
3. 解决"couldn't understand path 0"报错
该报错因ADF无法识别纯数组集合的默认结构,需确保:
- 源数据集的JSON路径设置正确指向
$['dataset']['data']。 - 不依赖自动导入Schema,手动通过表达式解析数组元素生成列。
(可选)动态映射列名(适配列名变化场景)
- 添加Lookup Activity,指向目标REST API数据源,设置集合引用路径为
$['dataset']['column_names'],获取列名列表。 - 将Lookup输出存储到变量中,结合ADF的动态内容功能,自动生成Derived Column的映射规则,避免硬编码索引值。
内容的提问来源于stack exchange,提问作者user11593389
相关产品推荐
相关产品推荐

