我如何知道Bigquery查询使用的插槽数?

时间:2016-11-22 19:47:29

标签: google-bigquery

我想弄清楚每个大查询查询使用的插槽数。有没有办法找到它?

4 个答案:

答案 0 :(得分:3)

job.statistics.query.timeline 中确实有此信息,该信息构成BigQuery(https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#resource)Jobs API的一部分。当您获得此信息时,它将以如下数组形式出现:

timeline: 
    [ '{"elapsedMs":"750","totalSlotMs":"2795","pendingUnits":"8","completedUnits":"66","activeUnits":"9"}',
      '{"elapsedMs":"1252","totalSlotMs":"3617","pendingUnits":"1","completedUnits":"73","activeUnits":"1"}',
      '{"elapsedMs":"2944","totalSlotMs":"5643","pendingUnits":"0","completedUnits":"78","activeUnits":"0"}' ],

所以您可以做什么取决于您的实际问题:

1)如果您的问题是“查询在其运行时间内使用的插槽总数是多少?”,请查看 completedUnits

的最终值。

2)如果您的问题是“查询运行期间如何利用插槽?”,那么您可以在每个时间片的completedUnits上构建elapsedMs的平均值。

答案 1 :(得分:2)

Stackdriver Monitoring For BigQuery中有一个插槽利用率图表 它显示所选项目的已分配和可用插槽

不幸的是,我并不认为每个查询都有这样的统计数据

答案 2 :(得分:0)

您可以使用INFORMATION_SCHEMA tables for jobs获得每个查询的广告位利用率。

查询示例,以获取当前项目当前查询的广告位利用率:

SELECT
  project_id,
  job_id,
  start_time,
  end_time,
  query,
  total_slot_ms,
  total_bytes_processed/1e9 AS gbs_processed,
  destination_table.table_id AS destination_table
FROM
`region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE DATE(creation_time)=CURRENT_DATE

我猜您正在寻找total_slot_ms字段。

用Google的话来说,它表示“作业在整个持续时间内的毫秒级”。 (来自schema documentation)。

对于个人用户(INFORMATION_SCHEMA)和整个组织(INFORMATION_SCHEMA.JOBS_BY_USER)都有等效的INFORMATION_SCHEMA.JOBS_BY_ORGANIZATION表。

答案 3 :(得分:0)

根据Google文档,通过这种方式,我们可以计算已使用的广告位数量(平均)。

插槽数= total_slot_ms / TIMESTAMP_DIFF(结束时间,开始时间,MILLISECOND)

select job_id
       ,total_slot_ms / TIMESTAMP_DIFF(end_time,start_time,MILLISECOND) as num_slot
from `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT

,或者如果您无权访问上表,则手动使用BQ UI执行详细信息。

Number of slot = Slot time consumed (convert in MILLISECOND)/Elapses time (convert in MILLISECOND)