JOBS_TIMELINE_BY_ORGANIZATION 视图

INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION 视图包含与当前项目关联的组织中提交的所有作业的近乎实时 BigQuery 元数据(按时间片划分)。此视图包含当前正在运行的作业和已完成的作业。

所需权限

如需查询 INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION 视图,您需要具有组织的 bigquery.jobs.listAll Identity and Access Management (IAM) 权限。以下每个预定义的 IAM 角色均可提供所需的权限:

  • 组织级层的 BigQuery Resource Admin
  • Organization Owner
  • 组织管理员

JOBS_BY_ORGANIZATION 架构表仅可供所指定的 Google Cloud 组织的用户使用。

如需详细了解 BigQuery 权限,请参阅使用 IAM 进行访问权限控制

架构

当您查询 INFORMATION_SCHEMA.JOBS_TIMELINE_BY_* 视图时,每个 BigQuery 作业的每秒执行都会有一行对应的查询结果。每个时间段均以 1 秒为间隔,且刚好持续 1 秒。

INFORMATION_SCHEMA.JOBS_TIMELINE_BY_* 视图具有如下架构:

列名 数据类型
period_start TIMESTAMP 此时间段的开始时间。
period_slot_ms INTEGER 此时间段内使用的槽毫秒数。
period_shuffle_ram_usage_ratio FLOAT 选定时间段内的 shuffle 使用率。
project_id STRING (聚簇列)项目的 ID。
project_number INTEGER 项目编号。
folder_numbers REPEATED INTEGER 包含项目的文件夹的数字 ID,从直接包含项目的文件夹开始,后跟包含子文件夹的文件夹,以此类推。例如,如果“folder_numbers”为“[1, 2, 3]”,则文件夹“1”直接包含项目,文件夹“2”包含“1”,文件夹“3”包含“2”。
user_email STRING (聚簇列)运行作业的用户的电子邮件地址或服务账号。
job_id STRING 作业的 ID。例如 bquxjob_1234
job_type STRING 作业的类型。可以是 QUERYLOADEXTRACTCOPYnull。作业类型 null 表示内部作业,例如脚本作业语句评估或具体化视图刷新。
statement_type STRING 查询语句(如果有效的话)的类型。例如 SELECTINSERTUPDATEDELETE
job_creation_time TIMESTAMP (分区列)此作业的创建时间。分区基于此时间戳的世界协调时间 (UTC)。
job_start_time TIMESTAMP 此作业的开始时间。
job_end_time TIMESTAMP 此作业的结束时间。
state STRING 在此时间段结束时作业处于运行状态。有效状态包括 PENDINGRUNNINGDONE
reservation_id STRING 在此时间段结束时,分配给此作业的主要预留的名称(如果适用的话)。
total_bytes_processed INTEGER 作业处理的字节总数。
error_result RECORD 错误的详细信息(如有),为 ErrorProto.
cache_hit BOOLEAN 查询此作业的查询结果是否来自缓存。
period_estimated_runnable_units INTEGER 可以立即安排在此时间段的工作单元。通过为这些工作单元分配额外的槽,您可以加快查询速度,但前提是预留中没有其他查询需要额外的槽。

数据保留

此视图包含当前正在运行的作业和过去 180 天的作业历史记录。

范围和语法

针对此视图的查询必须包含区域限定符。如果您未指定区域限定符,则会从所有区域检索元数据。下表说明了此视图的区域范围:

视图名称 资源范围 区域范围
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION 包含指定项目的组织 REGION
请替换以下内容:

  • 可选:PROJECT_ID:您的 Google Cloud 项目的 ID。如果未指定,则使用默认项目。
  • REGION:任何数据集区域名称。例如 region-us

示例

示例:查看每分钟的槽总用量

如需对非默认项目运行查询,请按以下格式添加项目 ID:

`PROJECT_ID`.`region-REGION_NAME`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION
例如 `myproject`.`region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION

以下示例展示分配给 YOUR_RESERVATION_ID 的所有项目在所有作业中的每分钟槽用量:

SELECT
  res.period_start,
  SUM(jobs.period_slot_ms) / 1000 / 60 AS period_slot_minutes,
  ANY_VALUE(res.slots_assigned) AS slot_assigned,
  ANY_VALUE(res.slots_max_assigned) AS slots_max_assigned
FROM
  `region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION jobs
JOIN
  `region-us`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE res
  ON
    TIMESTAMP_TRUNC(jobs.period_start, MINUTE) = res.period_start
    AND jobs.reservation_id = res.reservation_id
WHERE
  jobs.job_creation_time
    BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
    AND CURRENT_TIMESTAMP()
  AND res.reservation_id = 'YOUR_RESERVATION_ID'
  AND (jobs.statement_type != "SCRIPT" OR jobs.statement_type IS NULL)  -- Avoid duplicate byte counting in parent and children jobs.
GROUP BY
  period_start
ORDER BY
  period_start DESC;

结果类似于以下内容:

+-----------------------+---------------------+---------------+-------------------+
|     period_start      | period_slot_minutes | slots_assigned| slots_max_assigned|
+-----------------------+---------------------+---------------+-------------------+
|2021-06-08 21:33:00 UTC|       100.000       |      100      |        100        |
|2021-06-08 21:32:00 UTC|        96.753       |      100      |        100        |
|2021-06-08 21:31:00 UTC|        41.668       |      100      |        100        |
+-----------------------+---------------------+---------------+-------------------+

示例:预留的槽用量

以下示例展示了过去一天中每个预留的每分钟槽用量:

SELECT
  res.period_start,
  res.reservation_id,
  SUM(jobs.period_slot_ms) / 1000 / 60 AS period_slot_minutes,
  ANY_VALUE(res.slots_assigned) AS slots_assigned,
  ANY_VALUE(res.slots_max_assigned) AS slots_max_assigned,
FROM
  `region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_ORGANIZATION jobs
JOIN
  `region-us`.INFORMATION_SCHEMA.RESERVATIONS_TIMELINE res
  ON TIMESTAMP_TRUNC(jobs.period_start, MINUTE) = res.period_start
     AND jobs.reservation_id = res.reservation_id
WHERE
  jobs.job_creation_time
  BETWEEN TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 1 DAY)
  AND CURRENT_TIMESTAMP()
  AND (jobs.statement_type != "SCRIPT" OR jobs.statement_type IS NULL)  -- Avoid duplicate byte counting in parent and children jobs.
GROUP BY
  period_start,
  reservation_id
ORDER BY
  period_start DESC,
  reservation_id;

结果类似于以下内容:

+-----------------------+----------------+---------------------+---------------+--------------------+
|     period_start      | reservation_id | period_slot_minutes | slot_assigned | slots_max_assigned |
+-----------------------+----------------+---------------------+---------------+--------------------+
|2021-06-08 21:33:00 UTC|     prod01     |       100.000       |      100      |        100         |
|2021-06-08 21:33:00 UTC|     prod02     |       177.201       |      200      |        500         |
|2021-06-08 21:32:00 UTC|     prod01     |        96.753       |      100      |        100         |
|2021-06-08 21:32:00 UTC|     prod02     |       182.329       |      200      |        500         |
+-----------------------+----------------+---------------------+---------------+--------------------+