在Python中运行BigQuery SQL查询,如何进行身份验证?

时间:2018-01-12 11:55:49

标签: python google-bigquery

我想使用Python对BigQuery运行SQL查询,我是一个完全的初学者。我已经阅读了“使用API​​创建一个简单的应用程序”页面(https://cloud.google.com/bigquery/create-simple-app-api#bigquery-simple-app-build-service-python)并获得了如下代码:

from google.cloud import bigquery

client = bigquery.Client()

query_job = client.query("""
    #standardSQL
    SELECT date, totals.visits AS visits
    FROM `myproject.mydataset.ga_sessions_20180111`
    GROUP BY date
    """)

results = query_job.result()  # Waits for job to complete.

for row in results:
    print("{}: {}".format(row.title, row.unique_words))

当我运行此操作时,我收到错误:OSError: Project was not passed and could not be determined from the environment.

阅读此内容我认为该问题与client = bigquery.Client()的身份验证有关 - 有人可以用简单的方式向我解释这是如何工作的吗?如果我已经登录,它是否会查找我的身份验证详细信息?如果我有多个项目的权限,我是否需要指定我正在使用哪个项目?

3 个答案:

答案 0 :(得分:2)

为了对任何GCP API进行身份验证,建议使用service account credential,文档将教您如何创建和下载。

完成此步骤后,您应该拥有一个类似于以下内容的json文件:

Dim rng As Excel.Range
For Each rng In Sheets("CLIENTES").Range("F2:F300")
    If rng.Value = Me.cmbProfissional.Text Then
    Me.cmbProfissional.ListIndex(0) = rng.Value
    End If

之后,您可以将文件路径导出到操作系统中的{ "type": "service_account", "project_id": "your project", "private_key_id": "your private key id", "private_key": "private key", "client_email": "email", "client_id": "client id", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/email_id" } 变量,如下所示:

env

或者您可以在自己的脚本中直接使用json文件构建客户端:

export GOOGLE_APPLICATION_CREDENTIALS=/path/to/key.json

import google.cloud.bigquery as bq client = bq.Client.from_service_account_json("path/to/key.json") 也会自动处理(给定您创建json文件的项目)。

您询问有关使用自己的用户凭据的问题,我不确定如何使用这些凭据进行身份验证,但仍不推荐这样做,您必须管理google.auth并手动构建OAuth2步骤,所有这些已在服务帐户中自动为您完成。

答案 1 :(得分:0)

正确,您需要指定将要使用的项目。按照此Google Colab笔记本中的说明进行操作:https://colab.research.google.com/notebooks/bigquery.ipynb

您可以声明您的Google Cloud Platform项目ID: project_id = '[your project ID]'

然后,您可以仅将此变量添加到客户端对象创建中: client = bigquery.Client(project=project_id)

答案 2 :(得分:0)

pythonbq软件包使用非常简单,也是一个很好的起点。它使用python-gbq。

要开始使用,您需要为外部应用访问生成一个BQ json密钥。您可以生成密钥here

您的代码应类似于:

from pythonbq import pythonbq

myProject=pythonbq(
  bq_key_path='path/to/bq/key.json',
  project_id='myproject'
)
SQL_CODE="""
SELECT date, totals.visits AS visits
    FROM `myproject.mydataset.ga_sessions_20180111`
    GROUP BY date
"""
output=myProject.query(sql=SQL_CODE)