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

如何使用Azure Synapse Analytics动态复制Google BigQuery项目的所有数据集及表

问题

是否可以将Google BigQuery项目中的所有数据集动态复制到Azure Synapse Analytics,并进一步动态复制每个数据集内的所有表?已知可通过参考《Loop over of table names ADFv2》实现单个BigQuery数据集内表的动态复制,但能否通过Lookup activity在项目级别遍历所有数据集?是否可对数据集执行SELECT *操作?

解答

一、全项目数据集+表的动态复制可行

完全可以实现BigQuery项目级的数据集和表批量复制到Synapse,核心是做双层循环嵌套:先遍历所有数据集,再遍历每个数据集内的表,具体步骤如下:

  • 第一步:获取项目下所有数据集列表
    因为Lookup活动仅支持绑定到具体的BigQuery数据集,没法直接用它查项目下的所有数据集,但可以通过两种方式解决:
    1. 用BigQuery的元数据API:在ADF/Synapse中创建自定义活动,调用BigQuery的projects.datasets.list接口,直接拉取当前项目的所有数据集名称。
    2. 预生成数据集列表:在BigQuery控制台执行以下SQL导出数据集列表,把结果存到ADLS或BigQuery临时表中,再用Lookup活动读取这个列表:
      SELECT schema_name
      FROM `gcp_project_name.INFORMATION_SCHEMA.SCHEMATA`
      
  • 第二步:双层循环执行复制
    1. 第一层ForEach循环:把获取到的数据集列表作为输入,逐个遍历每个数据集。
    2. 第二层循环:在每个数据集的遍历逻辑里,用你提供的查询语句(替换数据集名为当前遍历项)获取该数据集下的所有表:
      SELECT *
      FROM `gcp_project_name.@{item()}.INFORMATION_SCHEMA.TABLES`
      WHERE table_type = 'BASE TABLE'
      
      用Lookup读取表列表后,再套一层ForEach循环,逐个执行表到Synapse的复制操作。

二、Lookup活动的项目级遍历限制

Lookup活动确实只能绑定到具体的BigQuery数据集,直接在Lookup查询里只填项目名会触发「找不到数据集」的错误,所以必须先通过其他方式拿到数据集列表,再基于列表做后续Lookup操作。

三、数据集级SELECT *操作说明

可以对数据集执行SELECT *,但必须指定具体表,比如:

SELECT * FROM `gcp_project_name.dataset_name.target_table`

如果是要获取数据集的元数据(比如所有表的信息),则需要用INFORMATION_SCHEMA相关视图,就是你给出的单数据集表查询示例的用法。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 09:06:36