使用 BigQuery API 和 Google Sheets 时出现“匹配文件模式时遇到错误”错误

问题描述 投票:0回答:2

尝试从 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 表?

google-drive-api google-bigquery google-sheets-api
2个回答
12
投票

允许 API 查询 BigQuery 中的联合表时需要遵循 3 个步骤 - 该表指向云端硬盘中的文件,即 Google Sheets。

其中两个步骤记录在here(我错过了第二个步骤 - 添加驱动器范围)。最后一个是将用于访问 API 的关联服务帐户电子邮件添加到文件本身。

  1. 使用 Google Cloud Platform Console 为进行 API 调用的项目启用 Google Drive API
  2. 除了 BigQuery 的范围之外,
  3. 还请求 Google Drive 的 OAuth 范围。
  4. 将您正在使用的服务帐户电子邮件添加到云端硬盘中的文件中。它看起来像
  5. <project-id>-<fingerprint-hash>@developer.gserviceaccount.com
    。 “查看”权限就足够了。

0
投票
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 客户端。

© www.soinside.com 2019 - 2024. All rights reserved.