TABLES 视图

INFORMATION_SCHEMA.TABLES 视图为数据集中的每个表或视图返回一行。TABLESTABLE_OPTIONS 视图还包含关于视图的概要信息。如需查看详细信息,请查询 INFORMATION_SCHEMA.VIEWS 视图。

所需权限

如需查询 INFORMATION_SCHEMA.TABLES 视图,您需要拥有以下 Identity and Access Management (IAM) 权限:

  • bigquery.tables.get
  • bigquery.tables.list
  • bigquery.routines.get
  • bigquery.routines.list

以下每个预定义的 IAM 角色均可提供上述权限:

  • roles/bigquery.admin
  • roles/bigquery.dataViewer
  • roles/bigquery.metadataViewer

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

架构

查询 INFORMATION_SCHEMA.TABLES 视图时,查询结果为数据集中的每个表或视图返回一行。 如需详细了解视图,请改为查询 INFORMATION_SCHEMA.VIEWS 视图

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

列名 数据类型
table_catalog STRING 该数据集所属项目的项目 ID。
table_schema STRING 包含表或视图的数据集的名称,也称为 datasetId
table_name STRING 表或视图的名称,也称为 tableId
table_type STRING 表类型;以下项之一:
is_insertable_into STRING YESNO,具体取决于表是否支持 DML INSERT 语句
is_typed STRING 值始终为 NO
creation_time TIMESTAMP 表的创建时间
base_table_catalog STRING 对于表克隆表快照,此字段为基表的项目。仅适用于 table_type 设置为 CLONESNAPSHOT 的表。
base_table_schema STRING 对于表克隆表快照,此字段为基表的数据集。仅适用于 table_type 设置为 CLONESNAPSHOT 的表。
base_table_name STRING 对于表克隆表快照,此字段为基表的名称。仅适用于 table_type 设置为 CLONESNAPSHOT 的表。
snapshot_time_ms TIMESTAMP 对于表克隆表快照,在基表上运行克隆快照操作的时间创建这个表。如果使用时间旅行,则此字段包含时间旅行时间戳。否则,snapshot_time_ms 字段与 creation_time 字段相同。仅适用于 table_type 设置为 CLONESNAPSHOT 的表。
replica_source_catalog STRING 对于具体化视图副本,这是基础具体化视图的项目。
replica_source_schema STRING 对于具体化视图副本,此字段为基本具体化视图的数据集。
replica_source_name STRING 对于具体化视图副本,此字段为基本具体化视图的名称。
replication_status STRING 对于具体化视图副本,从基础具体化视图到具体化视图副本的复制状态;以下项之一:
  • REPLICATION_STATUS_UNSPECIFIED
  • ACTIVE:复制正在进行,没有出现错误
  • SOURCE_DELETED:来源具体化视图已删除
  • PERMISSION_DENIED:来源具体化视图尚未在包含创建具体化视图的查询中使用的来源 Amazon S3 BigLake 表的数据集上授权
  • UNSUPPORTED_CONFIGURATION:副本的前提条件(来源具体化视图授权除外)存在问题。
replication_error STRING 如果 replication_status 表明具体化视图副本存在复制问题,则 replication_error 会提供有关该问题的更多详细信息。
ddl STRING 可用于重新创建表的 DDL 语句,例如 CREATE TABLECREATE VIEW
default_collation_name STRING 默认排序规则规范的名称(如果存在),否则为 NULL
upsert_stream_apply_watermark TIMESTAMP 对于使用变更数据捕获 (CDC) 的表,这是上次应用行修改的时间。如需了解详情,请参阅监控表插入/更新操作进度

范围和语法

针对此视图的查询必须包含数据集或区域限定符。对于包含数据集限定符的查询,您必须拥有数据集的权限。对于包含区域限定符的查询,您必须拥有项目的权限。如需了解详情,请参阅语法。下表说明了此视图的区域和资源范围:

视图名称 资源范围 区域范围
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.TABLES 项目级 REGION
[PROJECT_ID.]DATASET_ID.INFORMATION_SCHEMA.TABLES 数据集级 数据集位置
请替换以下内容:

  • 可选:PROJECT_ID:您的 Google Cloud 项目的 ID。如果未指定,则使用默认项目。
  • REGION:任何数据集区域名称。例如 region-us
  • DATASET_ID:您的数据集的 ID。如需了解详情,请参阅数据集限定符

示例

-- Returns metadata for tables in a single dataset.
SELECT * FROM myDataset.INFORMATION_SCHEMA.TABLES;

示例

示例 1:

以下示例会检索名为 mydataset 的数据集中所有表的表元数据。返回的元数据包括默认项目的 mydataset 中所有类型的表。

mydataset 包含以下表:

  • mytable1:标准 BigQuery 表
  • myview1:BigQuery 视图

如需对非默认项目运行查询,请按 `project_id`.dataset.INFORMATION_SCHEMA.view 格式将相应的项目 ID 添加到数据集,例如 `myproject`.mydataset.INFORMATION_SCHEMA.TABLES

SELECT
  table_catalog, table_schema, table_name, table_type,
  is_insertable_into, creation_time, ddl
FROM
  mydataset.INFORMATION_SCHEMA.TABLES;

结果类似于以下内容。为改善可读性,结果中没有保留某些列。

+----------------+---------------+----------------+------------+--------------------+---------------------+---------------------------------------------+
| table_catalog  | table_schema  |   table_name   | table_type | is_insertable_into |    creation_time    |                     ddl                     |
+----------------+---------------+----------------+------------+--------------------+---------------------+---------------------------------------------+
| myproject      | mydataset     | mytable1       | BASE TABLE | YES                | 2018-10-29 20:34:44 | CREATE TABLE `myproject.mydataset.mytable1` |
|                |               |                |            |                    |                     | (                                           |
|                |               |                |            |                    |                     |   id INT64                                  |
|                |               |                |            |                    |                     | );                                          |
| myproject      | mydataset     | myview1        | VIEW       | NO                 | 2018-12-29 00:19:20 | CREATE VIEW `myproject.mydataset.myview1`   |
|                |               |                |            |                    |                     | AS SELECT 100 as id;                        |
+----------------+---------------+----------------+------------+--------------------+---------------------+---------------------------------------------+
示例 2:

以下示例从 INFORMATION_SCHEMA.TABLES 视图中检索类型为 CLONESNAPSHOT 的所有表的元数据。返回的元数据包括默认项目的 mydataset 中的表。

如需对非默认项目运行查询,请按 `project_id`.dataset.INFORMATION_SCHEMA.view 格式将相应的项目 ID 添加到数据集,例如 `myproject`.mydataset.INFORMATION_SCHEMA.TABLES

  SELECT
    table_name, table_type, base_table_catalog,
    base_table_schema, base_table_name, snapshot_time_ms
  FROM
    mydataset.INFORMATION_SCHEMA.TABLES
  WHERE
    table_type = 'CLONE'
  OR
    table_type = 'SNAPSHOT';

结果类似于以下内容。为改善可读性,结果中没有保留某些列。

  +--------------+------------+--------------------+-------------------+-----------------+---------------------+
  | table_name   | table_type | base_table_catalog | base_table_schema | base_table_name | snapshot_time_ms    |
  +--------------+------------+--------------------+-------------------+-----------------+---------------------+
  | items_clone  | CLONE      | myproject          | mydataset         | items           | 2018-10-31 22:40:05 |
  | orders_bk    | SNAPSHOT   | myproject          | mydataset         | orders          | 2018-11-01 08:22:39 |
  +--------------+------------+--------------------+-------------------+-----------------+---------------------+

示例 3:

以下示例从 census_bureau_usa 数据集中 population_by_zip_2010 表的 INFORMATION_SCHEMA.TABLES 视图中检索 table_nameddl 列。此数据集是 BigQuery 公共数据集计划的一部分。

由于您查询的表属于其他项目,因此您应按以下格式将相应项目 ID 添加到数据集:`project_id`.dataset.INFORMATION_SCHEMA.view。在此示例中,该值为 `bigquery-public-data`.census_bureau_usa.INFORMATION_SCHEMA.TABLES

SELECT
  table_name, ddl
FROM
  `bigquery-public-data`.census_bureau_usa.INFORMATION_SCHEMA.TABLES
WHERE
  table_name = 'population_by_zip_2010';

结果类似于以下内容:

+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|       table_name       |                                                                                                            ddl                                                                                                             |
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| population_by_zip_2010 | CREATE TABLE `bigquery-public-data.census_bureau_usa.population_by_zip_2010`                                                                                                                                               |
|                        | (                                                                                                                                                                                                                          |
|                        |   geo_id STRING OPTIONS(description="Geo code"),                                                                                                                                                                           |
|                        |   zipcode STRING NOT NULL OPTIONS(description="Five digit ZIP Code Tabulation Area Census Code"),                                                                                                                          |
|                        |   population INT64 OPTIONS(description="The total count of the population for this segment."),                                                                                                                             |
|                        |   minimum_age INT64 OPTIONS(description="The minimum age in the age range. If null, this indicates the row as a total for male, female, or overall population."),                                                          |
|                        |   maximum_age INT64 OPTIONS(description="The maximum age in the age range. If null, this indicates the row as having no maximum (such as 85 and over) or the row is a total of the male, female, or overall population."), |
|                        |   gender STRING OPTIONS(description="male or female. If empty, the row is a total population summary.")                                                                                                                    |
|                        | )                                                                                                                                                                                                                          |
|                        | OPTIONS(                                                                                                                                                                                                                   |
|                        |   labels=[("freebqcovid", "")]                                                                                                                                                                                             |
|                        | );                                                                                                                                                                                                                         |
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+