【问题标题】:Query returns empty results with BigQuery/User permissions but correct results with BigQuery/Admin permissions查询返回具有 BigQuery/User 权限的空结果,但具有 BigQuery/Admin 权限的正确结果
【发布时间】:2020-06-03 21:22:28
【问题描述】:

当我在具有 BigQuery/User 权限的服务帐户下执行查询时,我得到空结果,没有错误,但结果是空的。如果我将服务帐户的权限更改为 BigQuery/Admin,我会得到正确的结果。如果权限不足,我希望弹出错误而不是空结果。 我无法发布查询。查询由一个 DECLARE/SET 运算符和一个带有 ARRAY_AGG 和子查询的 SELECT 组成。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    问题似乎与permissions 有关,但可能比我最初想象的要复杂。

    为了验证我的理论,我创建了一个具有 BigQuery 用户角色的服务帐户,并从一个新实例运行以下命令:

    gcloud auth activate-service-account [ACCOUNT] --key-file=[KEY_FILE]
    
    bq query --nouse_legacy_sql 'SELECT
       COUNT(*)
     FROM
       `bigquery-public-data`.samples.shakespeare'
    

    它运行良好并返回了正确的结果。

    我通过运行检查了我是否使用了正确的帐户:

    gcloud auth list
    

    此外,在文档中它声明“对于您创建的任何作业,您自动拥有该作业的 bigquery.jobs.get 和 bigquery.jobs.update 等效权限。”这意味着,如果您能够运行查询,您应该能够为其检索结果。

    在使用 BQ 用户服务帐户时,您能否检查查询公共数据是否会为您产生正确的结果或仍然是空白结果?

    注意:我意识到在 bq 查询调用中指定的服务帐户是 deprecated,所以我必须重新检查是否正确

    【讨论】:

    • 那么为什么我会得到bigquery.jobs.create 权限异常,如果假设DataViewer 用户角色但在这种情况下为空结果?这是设计使然并记录在某处吗?
    • 我修改了我的答案。根据错误消息,它在您缺乏运行查询的权限时显示。 BigQuery 用户拥有运行查询所需的权限,因此不会显示错误消息。为什么不检索结果可能需要进一步研究。您可以通过将结果保存在某个“虚拟”表中来测试查询是否确实运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    相关资源
    最近更新 更多