Google cloud platform 我可以将json文件从Project_a推送/加载到Project_B的BigQuery吗?i、 e.整个项目
我可以将json文件从Project_a推送/加载到Project_B的BigQuery吗?如果是,怎么做? 我试过的代码Google cloud platform 我可以将json文件从Project_a推送/加载到Project_B的BigQuery吗?i、 e.整个项目,google-cloud-platform,google-bigquery,google-cloud-functions,Google Cloud Platform,Google Bigquery,Google Cloud Functions,我可以将json文件从Project_a推送/加载到Project_B的BigQuery吗?如果是,怎么做? 我试过的代码 os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = key_file_of_proj_B client = bigquery.Client() client.load_table_from_file( source_json_file,table_ref_of_proj_B,location="US&q
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = key_file_of_proj_B
client = bigquery.Client()
client.load_table_from_file(
source_json_file,table_ref_of_proj_B,location="US",
job_config=job_config)
现在,当我在项目A中运行它时,CloudFunction开始抛出错误,因为它找不到项目B的表ref(因为它在项目A中搜索)
此外,我还尝试使用服务凭据,例如,使用os.environ['GOOGLE_APPLICATION_Credentials']=Proj_A中的Proj_B_key_文件设置项目的服务凭据,但不知何故,这并没有帮助。
有什么想法吗
用例:我有一些服务,它们可以做一些工作,例如从一堆平台中提取数据,然后根据需要将数据填充回客户机的BigQuery表。我建议您看看这里,这里解释了如何跨项目复制数据集,如前所述: 您可以在一个区域内或从一个区域复制数据集到另一个区域,而无需将数据提取、移动和重新加载到BigQuery中。您可以一次性或按自定义的定期计划复制数据集
只考虑对该动作有适当的权限:
- bigquery.transfers.update权限创建副本传输
- 源数据集上的bigquery.tables.list权限
bq mk --transfer_config --project_id=PROJECT_ID --data_source=DATA_SOURCE --target_dataset=DATASET --display_name=NAME --params='PARAMETERS'
这比我想象的要容易。 只要把auth弄得一团糟就行了。 例如,在项目A中,我将执行以下任一操作:
bigquery.Client(project='Proj_B', credentials=credsobject_of_Proj_B)
or
# Don't pass the credentials and let it default to inferred from the environment
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = Key_File_Proj_B
bigquery.Client(project='Proj_B')
这样,BigQuery不会在当前项目中搜索数据集,而是在作为param传递的项目中搜索数据集。请记住在Proj_B中为服务帐户BigQuery jobs create和editor提供访问权限,以允许其写入数据。您的流程的真正目的是什么?我这样问是因为你可能在尝试一些低效的东西,我想确保为你提供正确的见解。作为一个快速的回答,你不需要把项目B中的专用密钥文件作为函数的标识。而是在项目B的IAM权限中向您的云功能声明关联的服务帐户,并对其设置正确的权限。{bigquery.tables.create,bigquery.tables.updateData,bigquery.jobs.create}。参照应遵循模式;PROJECT_ID:DATASET.table感谢@chaiyachaiya的响应-添加了用例。如果它能工作,对你有好处,但我一直认为它有点奇怪。您不需要从项目B创建密钥文件,这样项目a中的流程就好像它属于项目B一样,因此在项目B中查找表(默认情况下)。我的建议。保留云功能的默认标识,并在项目B的IAM中声明具有所需权限的关联服务帐户。在最初的问题中,您可能还拼错了需要项目ID:TableReference.from_string('my-project.mydataset.mytable')的表ref。此外,您还应该在流中添加一个中间步骤,即将原始数据放在datalake中。如果需要重播数据,该怎么办?当您决定删除时,它可能已从源URI中消失。GCS是一个很好的位置,可以从低存储价格和到BigQuery的高传输性能中获益。通过将云函数附加到GCS中的文件创建事件,可以自动完成传输。