【问题标题】:Join tables in different projects with different service accounts in BigQuery在 BigQuery 中使用不同服务帐号连接不同项目中的表
【发布时间】:2020-02-11 03:30:57
【问题描述】:

任何人都可以帮助解释如何使用 Python 代码在 BigQuery 中的不同项目中加入表,并为每个项目提供不同的服务帐号和单独的键吗?

import logging
from google.cloud import 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

【问题讨论】:

    标签: python google-bigquery


    【解决方案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”

    【讨论】:

    • 由于我无权在 project2 中添加访问权限,是否还有其他方法可以通过 python 脚本来实现?
    • @stzmv 我已更新答案以考虑您的评论
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2021-09-03
    • 2015-08-29
    • 2018-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多