Google bigquery 如何列出所有用户的作业ID?

Google bigquery 如何列出所有用户的作业ID?,google-bigquery,Google Bigquery,我正在使用JavaAPI使用下面的代码查询所有作业ID Bigquery.Jobs.List list = bigquery.jobs().list(projectId); list.setAllUsers(true); 但它并没有列出由客户端ID为web应用程序运行的作业ID,例如,我正在使用私钥身份验证 使用命令行工具'bq ls-j'依次只提供metric insight作业ID,而不提供使用私钥auth运行的作业ID。有没有一种通吃的方法 我这样做的原因是为了更好地了解哪些查询占用了我

我正在使用JavaAPI使用下面的代码查询所有作业ID

Bigquery.Jobs.List list = bigquery.jobs().list(projectId);
list.setAllUsers(true);
但它并没有列出由客户端ID为web应用程序运行的作业ID,例如,我正在使用私钥身份验证

使用命令行工具'bq ls-j'依次只提供metric insight作业ID,而不提供使用私钥auth运行的作业ID。有没有一种通吃的方法

我这样做的原因是为了更好地了解哪些查询占用了我们的数据使用。我们有多种查询来源:metric insights、内部自动化、一些手动完成等。

从2.0.10版开始,支持使用服务帐户凭据进行API授权。您可以指定使用具有以下标志的特定服务帐户:

bq --service_account your_service_account_here@developer.gserviceaccount.com \
    --service_account_credential_store my_credential_file  \
    --service_account_private_key_file mykey.p12 <your_commands, etc>

键入bq-help以获取更多信息。

我的直觉是,为所有用户列出作业是不正确的,并且没有人提到过它,因为通常都有解决方法。我目前正在调查。

乔丹-听起来你在琢磨我们想做什么。对于我们允许进入项目/数据集的所有访问,我们希望为执行的所有查询生成totalBytesProcessed的聚合/报告

我们正在努力解决的问题是,我们有几个不同的java程序访问我们的数据,一个第三方服务度量洞察和7-8个通过web界面进行查询访问的个人用户。幸运的是,传入的数据只有一个来源,因此解释这方面的成本很简单。对于查询,虽然我现在有点盲目,而且查询似乎将是每月账单的主要部分

如果我只需要一个列表,就可以通过某个顶级身份验证获得此报告的underyling数据,这将是非常理想的。有了它,我认为从时间戳和实际的SQL文本中,我可以将每个查询归因于一个源


有一件事可能会让这个问题变得容易得多,那就是如果作业记录中有更多的信息,或者作业id中有一些文本装饰,用于查询。我看不出我可以为查询分配自己的JobID,也许我错过了?也许可以在工作记录中记录一些源信息?现在大声想一想…

有三个表可以查询

区域-**.INFORMATION\u SCHEMA.JOBS\u按{用户、项目、组织}

其中**应替换为您所在的地区

欧盟地区用户对职位的查询示例:

选择 将*计数为num_查询, 日期创建时间作为日期, sumtottal_bytes_处理为total_bytes_处理, 将槽位总成本合计为槽位总成本 从…起 `区域eu.信息\u模式.JOBS\u BY\u USER`as JOBS\u BY\u USER, 作业按用户引用的表列出 分组 2. 按2描述排序,总字节数处理描述; 文件可从以下网址获取:


谢谢你的指点。什么是我的凭证文件?我不知道去哪里买。然而,我们的主要目标是洞察我们的成本。仪表板中有关用法的信息仍然未被解析。您可以为查询分配自己的作业ID。创建查询时,只需填写job job引用的job id部分,我再看一看,在java api或普通bigquery api引用中都没有看到。我可能只是瞎了,这不是第一次了。当然,这只会在某些地方对我们有所帮助,我不怀疑我们可以控制来自第三方或来自web界面的查询的jobid。列出所有来源的所有查询仍然很好,我将从它来自的sql中推断,我也找不到使用java API为查询作业设置作业Id的API。如果作业状态结果中包含客户端id,那就太好了。是的,现在应该可以了。我们还没有发布支持ls-j-a的新版本的bq,但是如果您使用的是如上所示的JavaAPI,那么可以列出一个项目的所有作业。