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

如何在ADF复制活动中将Azure Blob Parquet分区名写入Azure SQL表

Azure Blob分区Parquet同步到Azure SQL时提取分区字段的实现方案

问题根因说明

你遇到的预览正常但同步后为NULL的核心原因是:Parquet的分区列属于元数据层面的虚拟列,Copy Activity的自动映射规则默认不会将虚拟分区列、自定义附加列同步到目标,需要手动配置映射,同时表达式提取逻辑要适配你的路径规则。

方案1:通过附加列+ADF表达式提取分区值(无需修改数据集配置)

  • 在Copy Activity源配置的「附加列」模块新增名为time_period的自定义列
  • 列值使用ADF动态表达式提取年月分区,以下两种写法二选一:
    • 路径规则固定时用split拆分(稳定性更高):
      假设你的路径格式为容器/xxx/time_period=202105/xxx.parquet,表达式为:
      @split(split($$FILEPATH, 'time_period=')[1], '/')[0]
    • 路径有小幅度差异时用正则匹配:
      匹配6位数字的年月分区,表达式为:
      @regexExtract($$FILEPATH, 'time_period=([0-9]{6})', 1)
  • 如果SQL侧time_period字段为INT类型,可在表达式外层套类型转换:
    @int(split(split($$FILEPATH, 'time_period=')[1], '/')[0])
  • 必须在Copy Activity的「映射」标签页,手动新增time_period列的映射关系,将源端的附加列绑定到目标SQL表的对应字段,不要使用自动映射

方案2:直接读取分区虚拟列(无需写提取逻辑)

  • 打开Parquet源数据集的配置页,找到「分区选项」,选择「从文件路径/分区结构自动推断」
  • 手动指定分区列的名称为time_period,数据类型和SQL侧目标字段对齐
  • 回到Copy Activity的「映射」标签页,手动将源端推断出的time_period虚拟列映射到目标SQL表的对应字段即可
  • 该方案和你在源预览界面看到的分区列逻辑完全一致,无需额外处理路径

常见踩坑排查

  • 附加列/虚拟列必须手动配置映射,自动映射会默认忽略非Parquet文件内的实体列
  • $$FILEPATH是Copy Activity运行时变量,调试预览时显示正常就说明表达式没问题,同步后为NULL优先检查映射配置
  • 若提取结果为空,先确认路径中的分区键名是否和表达式中一致,比如是year_month还是time_period

内容的提问来源于stack exchange,提问作者Mariah Akinbi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:36:05