Azure Data Factory REST源数据流中日期时间值全为Null的问题求助
问题描述
我在Azure Data Factory(ADF)数据流里用预定义的REST数据集当数据源,发起GET请求后,所有日期时间值全显示成Null。但用curl、Postman这些工具调用同一个接口时,日期值是正常返回的,示例格式如下:
"stats": { "ticket_id": 100000549322, "resolved_at": null, "created_at": "2023-01-04T19:09:19Z", "updated_at": "2023-01-04T19:09:22Z" }
之前查到过类似问题,说是ADF的转换逻辑导致的,建议在转换前拦截值做自定义处理,但我在ADF里看到请求返回的值已经是Null了,不知道该怎么提前拦截。希望能找到不用在ADF之外做中间处理的解决办法。
解决方案
1. 检查REST数据集的架构定义
打开你的REST数据集,看看架构里的日期字段(比如created_at、updated_at)类型是不是被错设成了非日期类型。如果ADF自动推断的架构把日期识别成字符串或者其他类型,后续转换很可能会把值置为Null。手动把这些字段的类型改成datetime,格式指定为yyyy-MM-dd'T'HH:mm:ss'Z',匹配接口返回的ISO8601格式。
2. 调整数据流源的类型转换设置
在数据流的源组件里,进入「类型转换」选项卡:
- 关掉「自动类型转换」,改成手动指定字段类型;
- 给日期字段明确设置类型为
datetime,格式填yyyy-MM-dd'T'HH:mm:ss'Z'; - 开启「保留原始值」,确保ADF不会在读取阶段就把不符合默认推断规则的日期值转成Null。
3. 用派生列转换强制解析日期值
要是上面两步还没解决,就在源组件后面立刻加一个「派生列」转换,直接从原始JSON字符串里提取日期值手动解析:
- 对每个日期字段,用类似下面的表达式解析:
这样直接引用原始JSON里的字段值,绕开ADF的自动转换环节,保证能正确读取原始字符串并转成日期类型。toDateTime(stats.created_at, 'yyyy-MM-dd\'T\'HH:mm:ss\'Z\'')
4. 检查REST源的分页和响应处理设置
如果接口返回的是分页数据,确认ADF的分页设置有没有正确处理所有响应内容,别因为分页解析错误导致日期字段丢失。另外在源组件的「设置」选项卡,检查「响应格式」是不是设成了JSON,「根路径」有没有正确指向包含日期字段的层级(比如示例里的stats节点)。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

