尝试从 BigQuery API 访问联合源(Google 表格)时,会引发以下错误:
[..]
"errorResult" : {
"location" : "/gdrive/id/<removed_file_id>",
"message" : "Encountered an error while globbing file pattern.",
"reason" : "invalid"
}
[..]
BigQuery 中的表设置为指向此文件。它通过 Web UI 运行。只有当尝试通过 API 查询表时,才会出现上述错误。
我猜这与权限有关。需要做什么才能允许从作为联合源(指向 Google Sheets)的 API 访问 BigQuery 表?
允许 API 查询 BigQuery 中的联合表时需要遵循 3 个步骤 - 该表指向云端硬盘中的文件,即 Google Sheets。
其中两个步骤记录在here(我错过了第二个步骤 - 添加驱动器范围)。最后一个是将用于访问 API 的关联服务帐户电子邮件添加到文件本身。
<project-id>-<fingerprint-hash>@developer.gserviceaccount.com
。 “查看”权限就足够了。
def create_big_query_client():
credentials, project = google.auth.default(
scopes=[
"https://www.googleapis.com/auth/cloud-platform",
"https://www.googleapis.com/auth/drive",
"https://www.googleapis.com/auth/bigquery",
]
)
bq_client = bigquery.Client(
credentials=credentials,
project=GCP_PROJECT_ID
)
return bq_client
client_with_drive_scopes = create_big_query_client()
query = """
SELECT *
FROM TABLE
"""
client_with_drive_scopes.query(query).result()
注:我发现无法使用 GCP 工作流程 Big Query Connector 设置正确的范围。因此,为了在我的工作流程中使用连接到 google 工作表的查询,我创建了一个云函数,并在其中放置了一个具有正确范围的 bq 客户端。