使用BigQuery中的不同服务帐户联接不同项目中的表

时间:2018-07-20 05:52:46

标签: python google-bigquery

任何人都可以帮助解释如何使用Python代码在BigQuery的不同项目中联接表,并为每个项目使用不同的服务帐户和单独的密钥吗?

导入日志 从google.cloud导入bigquery

def get_data_from_bigquery():

creds = 'key.json'
client = bigquery.Client.from_service_account_json(creds) #Project 1 keys
logging.info('Starting  BQ data fetch :')

testquery = \
    """
    INSERT INTO `Project1.Dataset.Table` 
    SELECT DISTINCT o.VName,o.RName,a.Id,a.Name FROM  `Project1.Dataset.Table` o 
    INNER JOIN `Project2.Dataset.Table` a ON o.Id = a.Id  """

job_config = bigquery.QueryJobConfig()

testquery_query_job = client.query(testquery, job_config=job_config)

testquery_query_job.result()
return True

1 个答案:

答案 0 :(得分:1)

从技术上讲,您可以执行此操作,它独立于python。

首先需要授予该服务帐户访问另一个项目的权限,然后从该服务帐户的角度运行查询,该服务帐户可以访问两个项目/资源。

要在Project2中从creds ='key.json'添加对服务帐户的访问权限,可以转到https://console.cloud.google.com/iam-admin/iam/

然后,您不需要在python代码中做任何魔术,因为BigQuery是在后台进行授权的

------更新---- 由于不建议在BigQuery级别上执行此操作,因此建议这样做,因为这样做可以提高性能,您可以使用pandas库来实现。 因此,您需要运行两个单独的查询,然后在python代码中加入(合并操作)结果,然后将结果插入BigQuery。

此处的合并示例:https://github.com/GoogleCloudPlatform/training-data-analyst/blob/master/CPB100/lab4a/demandforecast.ipynb通过“合并”查找

在此处插入:Write a Pandas DataFrame to Google Cloud Storage or BigQuery通过“ table.insert”查看