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 表的创建时间
ddl STRING 可用于重新创建表的 DDL 语句,例如 CREATE TABLECREATE VIEW
clone_time TIMESTAMP 对于表克隆预览版),此字段为克隆基表以创建该表的时间。如果使用时间旅行,则此字段包含时间旅行时间戳。否则,clone_time 字段与 creation_time 字段相同。仅适用于 table_type 设置为 CLONE 的表。
base_table_catalog STRING 对于表克隆预览版),此字段为基表的项目。仅适用于 table_type 设置为 CLONE 的表。
base_table_schema STRING 对于表克隆预览版),此字段为基表的数据集。仅适用于 table_type 设置为 CLONE 的表。
base_table_name STRING 对于表克隆预览版),此字段为基表的名称。仅适用于 table_type 设置为 CLONE 的表。
default_collation_name STRING 默认排序规则规范的名称(如果存在),否则为 NULL

范围和语法

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

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

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

示例

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

示例

示例 1:

以下示例会检索名为 mydataset 的数据集中所有表的表元数据。该查询从 INFORMATION_SCHEMA.TABLES 视图中选择 is_typed(该列留待将来使用)以外的所有列。返回的元数据包括默认项目的 mydataset 中所有类型的表。

mydataset 包含以下表:

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

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

  SELECT
    * EXCEPT(is_typed)
  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 视图中检索类型为 BASE TABLE 的所有表。不包括 is_typed 列。 返回的元数据包括默认项目的 mydataset 中的所有表。

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

  SELECT
    * EXCEPT(is_typed)
  FROM
    mydataset.INFORMATION_SCHEMA.TABLES
  WHERE
    table_type = 'BASE TABLE';

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

  +----------------+---------------+----------------+------------+--------------------+---------------------+---------------------------------------------+
  | table_catalog  | table_schema  |   table_name   | table_type | is_insertable_into |    creation_time    |                     ddl                     |
  +----------------+---------------+----------------+------------+--------------------+---------------------+---------------------------------------------+
  | myproject      | mydataset     | mytable1       | BASE TABLE | YES                | 2018-10-31 22:40:05 | CREATE TABLE myproject.mydataset.mytable1 |
  |                |               |                |            |                    |                     | (                                           |
  |                |               |                |            |                    |                     |   id INT64                                  |
  |                |               |                |            |                    |                     | );                                          |
  +----------------+---------------+----------------+------------+--------------------+---------------------+---------------------------------------------+
  

示例 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", "")]                                                                                                                                                                                             |
|                        | );                                                                                                                                                                                                                         |
+------------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+