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

Azure Data Factory对接Google BigQuery复制活动嵌套列名丢失问题咨询

根因说明

这个是Azure Data Factory BigQuery连接器的默认行为:默认导出格式如果为自动检测/CSV,会将BigQuery的RECORD、ARRAY等嵌套类型序列化为BigQuery内部JSON格式,也就是你看到的带v(值)、f(字段)的字符串结构,并非连接器故障。

方案1:ADF原生配置修改(优先尝试,无需修改SQL、无需UNNEST)

该方案完全不需要调整原有表结构和查询逻辑,可直接保留完整嵌套结构:

  • 打开你的BigQuery源数据集配置页,切换到「连接」选项卡
  • 找到「导出格式」配置项,将默认的自动检测修改为Parquet
  • 回到复制活动的源配置,确认读取模式为「表」(全量同步场景)
  • 目标Sink如果为Parquet格式,无需额外调整映射配置,直接运行测试即可,嵌套的RECORD、ARRAY类型会完整保留写入目标文件。

如果上述配置调整后仍存在序列化问题,可改用查询模式读取,不需要全量UNNEST:

  • 复制活动源选择「查询」读取模式,编写SQL显式保留嵌套结构,示例如下:
SELECT
  -- 保留所有普通字段
  *,
  -- 嵌套字段显式构造为STRUCT数组,不需要打平
  ARRAY(SELECT AS STRUCT * FROM UNNEST(你的嵌套列名)) AS 你的嵌套列名
FROM `你的GBQ表完整ID`
  • 在复制活动的「映射」选项卡手动将嵌套列的类型指定为Array,子元素指定为Struct并匹配内部字段名即可。

方案2:ADF数据流转换(无需引入额外计算服务)

如果你的同步链路已经完全基于ADF搭建,不想引入外部依赖,可在复制活动后追加数据流处理:

  • 添加「派生列」转换,使用parse_json()函数解析带v/f的序列化字符串
  • 手动指定解析后的嵌套结构Schema为Array/Struct类型,直接写入目标Sink即可,适合数据量中等的场景。

方案3:Databricks同步(适合超大数据量、嵌套结构极复杂的场景)

如果你已经考虑过Databricks方案,该方案的兼容性和稳定性最高:

  • 使用Databricks官方BigQuery连接器直接读取GBQ全表数据,嵌套的RECORD、ARRAY类型会自动映射为Spark的ArrayType/StructType,无需额外处理
  • 处理完成后直接写入目标Sink,后续可继续通过ADF调度后续链路即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:36:02