INFORMATION_SCHEMA.SHARED_DATASET_USAGE 视图

INFORMATION_SCHEMA.SHARED_DATASET_USAGE 视图包含有关共享数据集表的使用情况的近乎实时元数据。如需开始在各个组织之间共享数据,请参阅 Analytics Hub

所需的角色

如需获得查询 INFORMATION_SCHEMA.SHARED_DATASET_USAGE 视图所需的权限,请让管理员在源项目上为您授予 BigQuery Data Owner (roles/bigquery.dataOwner) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

此预定义角色可提供 bigquery.datasets.listSharedDatasetUsage 权限,查询 INFORMATION_SCHEMA.SHARED_DATASET_USAGE 视图需要该权限。

您也可以使用自定义角色或其他预定义角色来获取此权限。

架构

底层数据按 job_start_time 列进行分区,并按 project_iddataset_id 进行聚簇。

INFORMATION_SCHEMA.SHARED_DATASET_USAGE 具有以下架构:

列名 数据类型
project_id STRING (聚簇列包含共享数据集的项目的 ID。
dataset_id STRING (聚簇列共享数据集的 ID。
table_id STRING 已访问表的 ID。
data_exchange_id STRING 数据交换的资源路径。
listing_id STRING 列表的资源路径。
job_start_time TIMESTAMP (分区列)此作业的开始时间。
job_end_time TIMESTAMP 此作业的结束时间。
job_id STRING 作业 ID。例如,bquxjob_1234
job_project_number INTEGER 此作业所属项目的编号。
job_location STRING 作业的位置。
linked_project_number INTEGER 订阅者项目的项目编号。
linked_dataset_id STRING 订阅者数据集的关联数据集 ID。
subscriber_org_number INTEGER 作业运行的组织的编号。这是订阅者所在组织的编号。对于没有组织的项目,此字段为空。
subscriber_org_display_name STRING 人类可读的字符串,表示运行作业的组织。这是订阅者所在组织的编号。对于没有组织的项目,此字段为空。
num_rows_processed INTEGER 作业从此表中处理的行数。
total_bytes_processed INTEGER 作业从此表中处理的总字节数。

数据保留

INFORMATION_SCHEMA.SHARED_DATASET_USAGE 视图包含正在运行的作业和过去 180 天的作业历史记录。

范围和语法

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

视图名称 资源范围 区域范围
[PROJECT_ID.]INFORMATION_SCHEMA.SHARED_DATASET_USAGE 项目级 美国区域
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.SHARED_DATASET_USAGE 项目级 REGION
替换以下内容:

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

示例

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

PROJECT_ID.region-REGION_NAME.INFORMATION_SCHEMA.SHARED_DATASET_USAGE

例如 myproject.region-us.INFORMATION_SCHEMA.SHARED_DATASET_USAGE

获取在所有共享表上执行的作业总数

以下示例会计算项目的订阅者运行的作业总数:

SELECT
  COUNT(DISTINCT job_id) AS num_jobs
FROM
  `region-us`.INFORMATION_SCHEMA.SHARED_DATASET_USAGE

结果类似于以下内容:

+------------+
| num_jobs   |
+------------+
| 1000       |
+------------+

如需检查订阅者运行的作业总数,请使用 WHERE 子句:

  • 对于数据集,请使用 WHERE dataset_id = "..."
  • 对于表格,请使用 WHERE dataset_id = "..." AND table_id = "..."

根据处理的行数获取最常用表

以下查询会根据订阅者处理的行数计算最常用表。

SELECT
  dataset_id,
  table_id,
  SUM(num_rows_processed) AS usage_rows
FROM
  `region-us`.INFORMATION_SCHEMA.SHARED_DATASET_USAGE
GROUP BY
  1,
  2
ORDER BY
  3 DESC
LIMIT
  1

输出类似于以下内容:

+---------------+-------------+----------------+
| dataset_id    | table_id      | usage_rows     |
+---------------+-------------+----------------+
| mydataset     | mytable     | 15             |
+---------------+-------------+----------------+

查找使用您的表的顶级组织

以下查询会根据表中处理的字节数计算热门订阅者。您还可以将 num_rows_processed 列用作指标。

SELECT
  subscriber_org_number,
  ANY_VALUE(subscriber_org_display_name) AS subscriber_org_display_name,
  SUM(total_bytes_processed) AS usage_bytes
FROM
  `region-us`.INFORMATION_SCHEMA.SHARED_DATASET_USAGE
GROUP BY
  1

输出类似于以下内容:

+--------------------------+--------------------------------+----------------+
|subscriber_org_number     | subscriber_org_display_name    | usage_bytes    |
+-----------------------------------------------------------+----------------+
| 12345                    | myorganization                 | 15             |
+--------------------------+--------------------------------+----------------+

对于没有组织的订阅者,您可以使用 job_project_number 代替 subscriber_org_number

获取数据交换的用量指标

如果数据交换和源数据集位于不同的项目中,请按照以下步骤查看数据交换的用量指标:

  1. 查找属于数据交换的所有列表
  2. 检索附加到清单的源数据集。
  3. 如需查看数据交换的用量指标,请使用以下查询:
SELECT
  *
FROM
  source_project_1.`region-us`.INFORMATION_SCHEMA.SHARED_DATASET_USAGE
WHERE
  dataset_id='source_dataset_id'
AND data_exchange_id="projects/4/locations/us/dataExchanges/x1"
UNION ALL
SELECT
  *
FROM
  source_project_2.`region-us`.INFORMATION_SCHEMA.SHARED_DATASET_USAGE
WHERE
  dataset_id='source_dataset_id'
AND data_exchange_id="projects/4/locations/us/dataExchanges/x1"