以编程方式列出已授予访问权限的 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的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 API(补丁)授予对 BigQuery 数据集的新视图访问权限