如何列出所有用户的工作ID?

时间:2012-10-30 20:37:46

标签: google-bigquery

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

Bigquery.Jobs.List list = bigquery.jobs().list(projectId);
list.setAllUsers(true);

但它没有列出由Web应用程序的客户端ID运行的作业ID(即指标洞察)我正在使用私钥认证。

使用命令行工具'bq ls -j'反过来只给我使用度量标准洞察作业ID,而不是使用私钥auth运行的那些。是否有一个get all方法?

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

4 个答案:

答案 0 :(得分:1)

从版本2.0.10开始,bq client支持使用服务帐户凭据进行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了解详情。

答案 1 :(得分:0)

我的预感是,所有用户的列出工作都被打破,没有人提及它,因为通常有一个解决方法。我正在调查。

答案 2 :(得分:0)

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

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

如果只使用一个顶级身份验证的一个列表,我可以获得此报告的底层数据,这将是理想的选择。有了这个,我想从时间戳和实际的SQL文本我可以将每个查询归因于一个源。

如果作业记录中有更多信息(或者查询的job_id中有一些文本装饰),那么可能会使这个问题变得更容易的一件事就是如此。我没有看到我可以在查询上分配我自己的jobID(也许我错过了它?)并且可能在作业记录中记录一些源信息是可能的?现在大声思考......

答案 3 :(得分:0)

您可以查询三个表。

region-**.INFORMATION_SCHEMA.JOBS_BY_{USER, PROJECT, ORGANIZATION}

**应替换为您所在的地区。

JOBS_BY_USER区域中查询eu的示例:

select
  count(*) as num_queries,
  date(creation_time) as date,
  sum(total_bytes_processed) as total_bytes_processed,
  sum(total_slot_ms) as total_slot_ms_cost
from
 `region-eu.INFORMATION_SCHEMA.JOBS_BY_USER` as jobs_by_user,
 jobs_by_user.referenced_tables
group by
 2
order by 2 desc, total_bytes_processed desc;

文档可在以下位置找到:

https://cloud.google.com/bigquery/docs/information-schema-jobs