以编程方式列出已授予访问权限的 Bigquery 数据集,而无需事先知道项目 ID

Posted

技术标签:

【中文标题】以编程方式列出已授予访问权限的 Bigquery 数据集,而无需事先知道项目 ID【英文标题】:Programmatically listing Bigquery datasets to which access has been granted, without knowing project ID in advance 【发布时间】:2015-08-11 13:08:06 【问题描述】:

有没有办法(使用 BigQuery API)以编程方式列出帐户已被授予访问权限的所有数据集无需知道项目名称) 提前包含这些数据集?我感觉 API 可能不会公开这些信息。

我希望获得类似于出现在 BigQuery 网络控制台左侧的数据集列表的内容。

我指的是我无权访问包含它们的项目的数据集,并且仅被授予访问特定数据集的权限。否则,我们可以简单地使用 API 列出项目,然后查询每个项目的数据集列表。

大概这将不得不排除公共数据集(太多),并且只包括那些我的帐户已被明确授予访问权限的数据集。

【问题讨论】:

(顺便说一句,花了一秒钟来编辑你帖子中的感谢。虽然把它放进去绝对是个好主意,但它被认为是 Stack 上的噪音 :) 你通过发布高质量的帖子来表示尊重和赞赏并根据质量投票:)。欢迎来到本站!) 你自己尝试过吗? 我已经尝试探索 API,但我找不到任何看起来可以工作的东西。 projects().list() 仅返回您具有项目级访问权限的项目。而 datasets().list() 需要 projectId 作为参数。 如果您已经知道包含您有权访问的数据集的项目的名称,那么您可以使用 datasets().list(projectId) 列出您有权访问的数据集(即使您没有项目级访问权限)。 【参考方案1】:

目前无法在 BigQuery API 中执行此操作。正如您所说,您可以获取您所属的项目列表,然后列出这些项目中的数据集,但无法获得已与您共享的所有数据集的完整列表。

我们希望在未来提供更好的搜索和发现功能,但遗憾的是目前无法实现。

【讨论】:

【参考方案2】:

Google 的大多数工具都有 API 浏览器。每当您有这样的问题时,我建议您查看资源管理器,因为它可以准确地告诉您什么是强制性的,您可以做什么,不能做什么。

如果您查看 API 资源管理器 here(来自官方文档中的“数据集 -> 列表”),您会看到只有一个必填字段:projectID。所以你的问题的答案是否定的,你需要项目的名称

【讨论】:

谢谢。我检查了 API 资源管理器,这就是我问这个问题的原因。还有项目->列表,但这仅返回您具有项目级访问权限的项目(而不是您仅被授予访问某些数据集的项目)。也许我应该在我最初的问题中注意到这一点,但我试图将其浓缩并避免添加任何绒毛 @JasonDavey 包括您尝试过的内容和更多详细信息并非空穴来风:)。无论如何,是的,没有 CLI(我认为 CLI 与“projects->list”有同样的问题),我看不到直接的方法:S 是的 - 似乎不可能。这可能是因为理论上这会返回世界上每个公共数据集的列表,所以结果会太多。我真正想要的是一种仅列出我已明确授予访问权限的方法。 @JasonDavey 宾果游戏。我不知道到底有多少公共数据集,但它肯定会抓住它们。您正在寻找“我可以查询的任何数据集”,并且所有公共数据集都遵循该标准。不确定这里有解决方案 同意。也许我可以请求谷歌实现“我可以查询的所有数据集,不包括那些公开的数据集”=P。我认为目前唯一的“解决方法”是手动创建此类项目的列表并将其存储在 config 某处【参考方案3】:

使用BQ command line tool:

bq ls --format=prettyjson

这会返回一个格式如下的 JSON:

[
    
        "datasetId": "wr_1"
    ,
    
        "datasetId": "wr_2"
    ,
    
        "datasetId": "wr_3"
    ,
    
        "datasetId": "wr_4"
    
]

您也可以通过 API 执行此操作,但您需要进行多次调用

首先获取项目: https://cloud.google.com/bigquery/docs/reference/v2/projects/list 然后从项目https://cloud.google.com/bigquery/docs/reference/v2/datasets/list获取数据集

【讨论】:

我正要评论缺少使用 API 执行此操作的方法。狡猾的编辑先生! :P 如果没有双重 API 调用,我确实看不到另一种方法(除了 CLI,但如果需要基于 API ......可能不适用于 OP) 据我所知,projects->list 仅返回您已被授予项目级访问权限的项目。我正在尝试获取已授予访问权限的单个数据集的列表(但我没有项目级别的访问权限)。

以上是关于以编程方式列出已授予访问权限的 Bigquery 数据集,而无需事先知道项目 ID的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式为 Android 服务授予权限

如何通过 API(补丁)授予对 BigQuery 数据集的新视图访问权限

如何授予帐户列出已启用 API 的权限?

已授予账号 "以服务方式登录"的权限

Google BigQuery:授予服务帐户权限以仅在某些特定数据集中创建作业

以编程方式向用户授予特定表权限的最佳方法?