ASSIGNMENT_CHANGES 视图

INFORMATION_SCHEMA.ASSIGNMENT_CHANGES 视图包含管理项目中分配的所有变更的近乎实时列表。每一行代表对单个分配进行的一项更改。如需详细了解预留,请参阅预留简介

所需权限

如需查询 INFORMATION_SCHEMA.ASSIGNMENT_CHANGES 视图,您需要拥有项目的 bigquery.reservationAssignments.list Identity and Access Management (IAM) 权限。以下每个预定义的 IAM 角色均可提供所需的权限:

  • roles/bigquery.resourceAdmin
  • roles/bigquery.resourceEditor
  • roles/bigquery.resourceViewer
  • roles/bigquery.user
  • roles/bigquery.admin

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

架构

INFORMATION_SCHEMA.ASSIGNMENT_CHANGES 视图具有如下架构:

列名 数据类型
change_timestamp TIMESTAMP 此项更改发生的时间。
project_id STRING 管理项目的 ID。
project_number INTEGER 管理项目的编号。
assignment_id STRING 唯一标识分配的 ID。
reservation_name STRING 分配使用的预留的名称。
job_type STRING 可以使用该预留的作业的类型。可以是 PIPELINEQUERY
assignee_id STRING 唯一标识分配对象资源的 ID。
assignee_number INTEGER 唯一标识分配对象资源的编号。
assignee_type STRING 分配对象资源的类型。可以是 organizationfolderproject
action STRING 分配发生的事件类型。可以是 CREATEUPDATEDELETE
user_email STRING 执行更改的用户的电子邮件地址或员工身份联合的主题。如果是 Google 执行的更改,则为 google。如果电子邮件地址未知,则为 NULL
state STRING 分配的状态。 可以是 PENDINGACTIVE

数据保留

此视图包含当前分配和已删除的分配,后者最多保留 41 天,之后会从视图中移除。

范围和语法

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

视图名称 资源范围 区域范围
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.ASSIGNMENT_CHANGES[_BY_PROJECT] 项目级 REGION
请替换以下内容:
  • 可选:PROJECT_ID:您的 Google Cloud 项目的 ID。如果未指定,则使用默认项目。
  • REGION:任何数据集区域名称。 例如 `region-us`

示例

查找分配的最新更改

以下示例显示了在指定日期对特定分配执行最新分配更新的用户。

SELECT   user_email,   change_timestamp,   reservation_name,   assignment_id FROM   `region-us`.INFORMATION_SCHEMA.ASSIGNMENT_CHANGES WHERE   change_timestamp BETWEEN '2021-09-30' AND '2021-10-01'   AND assignment_id = 'assignment_01' ORDER BY   change_timestamp DESC LIMIT 1;

结果类似于以下内容:

 +--------------------------------+-----------------------+--------------------+-----------------+ |           user_email           |    change_timestamp   |  reservation_name  |  assignment_id  | +--------------------------------+-----------------------+--------------------+-----------------+ |  [email protected]  |2021-09-30 09:30:00 UTC|   my_reservation   |  assignment_01  | +--------------------------------+-----------------------+--------------------+-----------------+ 

确定特定时间点的预留分配状态

以下示例显示了在特定时间点预留的所有有效分配。

SELECT     reservation_name,     assignee_id,     assignee_type,     job_type FROM     `region-REGION`.INFORMATION_SCHEMA.ASSIGNMENT_CHANGES WHERE     reservation_name = RESERVATION_NAME     AND change_timestamp < TIMESTAMP QUALIFY ROW_NUMBER() OVER(PARTITION BY assignee_id, job_type ORDER BY change_timestamp DESC) = 1 AND action != 'DELETE';

替换以下内容:

  • REGION:预留所在的区域
  • RESERVATION_NAME:分配使用的预留的名称
  • TIMESTAMP:表示检查分配列表时所处的特定时间点的时间戳

结果类似于以下内容:

 +-------------------------+---------------------------+---------------+----------+ |    reservation_name     |        assignee_id        | assignee_type | job_type | +-------------------------+---------------------------+---------------+----------+ | test-reservation        | project_1                 | PROJECT       | QUERY    | | test-reservation        | project_2                 | PROJECT       | QUERY    | +-------------------------+---------------------------+---------------+----------+ 

确定特定作业执行时预留的分配状态

如需显示在执行特定作业时处于有效状态的分配,请使用以下示例。

SELECT     reservation_name,     assignee_id,     assignee_type,     job_type FROM     `region-REGION`.INFORMATION_SCHEMA.ASSIGNMENT_CHANGES WHERE     reservation_name = RESERVATION_NAME     AND change_timestamp < (SELECT creation_time FROM PROJECT_ID.`region-REGION`.INFORMATION_SCHEMA.JOBS WHERE job_id = JOB_ID) QUALIFY ROW_NUMBER() OVER(PARTITION BY assignee_id, job_type ORDER BY change_timestamp DESC) = 1 AND action != 'DELETE';

替换以下内容:

  • REGION:预留所在的区域
  • RESERVATION_NAME:分配使用的预留的名称
  • PROJECT_ID:执行作业的 Google Cloud 项目的 ID
  • JOB_ID:检查分配状态时所依据的作业 ID