如何在BigQueryHook中指定项目名读取跨GCP项目的BigQuery数据
跨GCP项目读取BigQuery数据的BigQueryHook配置方法
解决方法
- 方法1:实例化Hook时直接传入项目B的ID
新版Airflow GCP Provider的BigQueryHook支持直接传入project_id参数,指定要操作的BQ所属项目即可,修改后的代码如下:hook = BigQueryHook(bigquery_conn_id='bigquery_default', delegate_to=None, use_legacy_sql=False, project_id='<替换为项目B的实际ID>') - 方法2:修改Airflow连接配置(适合多任务复用同一个跨项目连接的场景)
你可以直接修改bigquery_default连接的配置,不用在每个Hook实例化时单独传参:- 进入Airflow Web UI的「Admin > Connections」页面
- 找到
bigquery_default连接,点开编辑页 - 在「Extra」输入框中填入以下内容:
{"project_id": "<替换为项目B的实际ID>"} - 保存配置后,原有Hook代码不需要修改即可读取项目B的BQ数据
- 补充可选方案:如果只是个别任务需要跨项目读数据,也可以不用修改Hook配置,直接在写查询SQL时使用全限定表名,格式为
`项目BID.数据集名.表名`,也可以正常读取数据。
注意事项
完成上述配置后需要确认权限配置正确:项目A中Airflow Composer运行使用的服务账号,必须被授予项目B对应BQ数据集的
BigQuery Data Viewer、BigQuery Job User权限,否则仍会报权限类错误。
内容的提问来源于stack exchange,提问作者Yug
相关产品推荐
相关产品推荐

