You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ADF复制活动启用动态范围分区时触发空值参数错误求助

解决ADF复制活动动态范围分区的"dictionary cannot be null"错误

错误原因分析

从日志文件名sql_some_table_name_crt_ts_NA_09242023062959_0.txt中的NA标识,结合报错信息,可定位问题核心:ADF在生成动态范围分区查询时,无法获取有效分区边界值,导致参数字典为空,触发System.ArgumentNullException。可能的诱因包括:

  • JSON配置存在语法错误,导致源配置解析异常
  • 分区列crt_ts的数据类型与ADF动态分区逻辑不兼容
  • 手动指定的上下边界格式不符合SQL Server的日期解析规则
  • 自托管IR版本存在动态分区的兼容性bug

解决方案

1. 修复JSON配置语法错误

查看复制活动的解析输入,additionalColumns数组中的对象末尾存在多余逗号,这会导致JSON解析失败,进而影响分区逻辑的执行。修正后的配置如下:

"additionalColumns": [
    {
        "name": "ADF_RUN_ID"
    }
]

2. 确保分区列数据类型兼容

  • 确认SQL Server中crt_ts列的类型为datetime/datetime2/smalldatetime,避免使用字符串类型存储日期时间值
  • 如果crt_ts是字符串类型,需先将其转换为日期时间类型,或在sqlReaderQuery中显式转换,例如:
select somecolumns, CONVERT(datetime2, crt_ts, 120) as crt_ts from some_table where ?DfDynamicRangePartitionCondition

3. 调整分区边界格式

将手动指定的上下边界改为SQL Server兼容的日期格式,替换原ISO 8601带T的格式:

"partitionSettings": {
    "partitionColumnName": "crt_ts",
    "partitionUpperBound": "2024-10-16 12:59:59",
    "partitionLowerBound": "2022-09-01 00:00:00"
}

4. 尝试自动获取边界值

如果手动指定边界仍有问题,可移除partitionUpperBound和partitionLowerBound配置,让ADF自动查询crt_ts列的最大/最小值作为边界,但需确保源表中存在数据(空表会导致边界获取失败)。

5. 更新自托管IR版本

检查自托管集成运行时的版本,升级至最新稳定版,旧版本可能存在动态范围分区的已知bug。

验证方法

修改配置后,运行小规模测试任务:

  • 查看生成的日志文件名,确认其中包含有效的边界值而非NA
  • 查看复制活动的监控日志,确认分区查询语句正常生成并执行

内容的提问来源于stack exchange,提问作者Rishav Putatunda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 04:42:16