0

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

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

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

依次使用命令行工具“bq ls -j”只给我度量洞察作业 ID,而不是使用私钥身份验证运行的那些。有get all方法吗?

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

4

4 回答 4

1

从 2.0.10 版本开始,bq 客户端支持使用服务帐户凭据进行 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以获取更多信息。

于 2012-10-30T20:59:43.047 回答
0

我的预感是,列出所有用户的工作已被破坏,并且没有人提到它,因为通常有一种解决方法。我目前正在调查。

于 2012-10-30T22:29:47.913 回答
0

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

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

如果我可以仅通过某个顶级身份验证创建一个列表来获取此报告的底层数据,那将是理想的。有了这个,我认为从时间戳和实际的 SQL 文本中我可以将每个查询归因于一个源。

可能使这个问题变得更容易的一件事是,如果工作记录中有更多信息(或 job_id 中的一些文本修饰用于查询)。我看不到我可以在查询中分配我自己的 jobID(也许我错过了?),也许在工作记录中记录一些源信息是可能的?现在只是大声思考...

于 2012-10-30T22:44:01.877 回答
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

于 2020-07-07T09:27:38.353 回答