我正在使用Java API使用下面的代码查询所有作业ID
Bigquery.Jobs.List list = bigquery.jobs().list(projectId);
list.setAllUsers(true);
但它没有列出由Web应用程序的客户端ID运行的作业ID(即指标洞察)我正在使用私钥认证。
使用命令行工具'bq ls -j'反过来只给我使用度量标准洞察作业ID,而不是使用私钥auth运行的那些。是否有一个get all方法?
我这样做的原因是为了更好地了解哪些查询占用了我们的数据用量。我们有多种查询来源:指标洞察,内部自动化,一些手动完成等。
答案 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