COLUMNS 视图
INFORMATION_SCHEMA.COLUMNS 视图中的每一行对应表中的每一列(字段)。
所需权限
如需查询 INFORMATION_SCHEMA.COLUMNS 视图,您需要拥有以下 Identity and Access Management (IAM) 权限:
bigquery.tables.getbigquery.tables.list
以下每个预定义的 IAM 角色均可提供上述权限:
roles/bigquery.adminroles/bigquery.dataViewerroles/bigquery.dataEditorroles/bigquery.metadataViewer
如需详细了解 BigQuery 权限,请参阅使用 IAM 进行访问权限控制。
架构
查询 INFORMATION_SCHEMA.COLUMNS 视图时,查询为表中的每一列(字段)返回一行结果。
INFORMATION_SCHEMA.COLUMNS 视图具有如下架构:
| 列名 | 数据类型 | 值 |
|---|---|---|
table_catalog |
STRING |
该数据集所属项目的项目 ID。 |
table_schema |
STRING |
包含表的数据集的名称,也称为 datasetId。 |
table_name |
STRING |
表或视图的名称,也称为 tableId。 |
column_name |
STRING |
列的名称。 |
ordinal_position |
INT64 |
该列在表中的偏移量,从 1 开始计数;如果该列为伪列(例如 _PARTITIONTIME 或 _PARTITIONDATE),则值为 NULL。 |
is_nullable |
STRING |
YES 或 NO,具体取决于列的模式是否允许使用 NULL 值。 |
data_type |
STRING |
列的 GoogleSQL 数据类型。 |
is_generated |
STRING |
如果列是自动生成的嵌入列,则值为 ALWAYS;否则,值为 NEVER。 |
generation_expression |
STRING |
如果列是自动生成的嵌入列,则该值为用于定义列的生成表达式;否则,该值为 NULL。 |
is_stored |
STRING |
如果列是自动生成的嵌入列,则值为 YES;否则,值为 NULL。 |
is_hidden |
STRING |
YES 或 NO,具体取决于列是否为伪列,例如 _PARTITIONTIME 或 _PARTITIONDATE。 |
is_updatable |
STRING |
值始终为 NULL。 |
is_system_defined |
STRING |
YES 或 NO,具体取决于列是否为伪列,例如 _PARTITIONTIME 或 _PARTITIONDATE。 |
is_partitioning_column |
STRING |
YES 或 NO,具体取决于列是否为分区列。 |
clustering_ordinal_position |
INT64 |
该列在表的聚簇列中的偏移量,从 1 开始计数;如果该表不是聚簇表,则值为 NULL。 |
collation_name |
STRING |
排序规则规范的名称(如果存在);否则为 NULL。如果传入了 STRING 或 ARRAY<STRING>,则系统会返回排序规则规范(如果存在);否则会返回 NULL。
|
column_default |
STRING |
列的默认值(如果存在);否则,值为 NULL。
|
rounding_mode |
STRING |
如果字段类型为参数化的 NUMERIC 或 BIGNUMERIC,则为写入到字段的值采用的舍入模式;否则,值为 NULL。
|
data_policies.name |
STRING |
附加到列以控制访问权限和遮盖的数据政策的列表。此字段处于预览版阶段。 |
policy_tags |
ARRAY<STRING> |
附加到列的政策标记的列表。 |
为了确保稳定性,我们建议您在信息架构查询中明确列出列,而不是使用通配符 (SELECT *)。明确列出列可防止底层架构发生更改时查询中断。
范围和语法
针对此视图的查询必须包含数据集或区域限定符。对于包含数据集限定符的查询,您必须拥有数据集的权限。对于包含区域限定符的查询,您必须拥有项目的权限。如需了解详情,请参阅语法。下表说明了此视图的区域和资源范围:
| 视图名称 | 资源范围 | 区域范围 |
|---|---|---|
[PROJECT_ID.]`region-REGION`.INFORMATION_SCHEMA.COLUMNS |
项目级 | REGION |
[PROJECT_ID.]DATASET_ID.INFORMATION_SCHEMA.COLUMNS |
数据集级 | 数据集位置 |
-
可选:
PROJECT_ID:您的 Google Cloud 项目的 ID。如果未指定,则使用默认项目。 -
REGION:任何数据集区域名称。 例如`region-us`。 -
DATASET_ID:您的数据集的 ID。如需了解详情,请参阅数据集限定符。
示例
以下示例从 census_bureau_usa 数据集内 population_by_zip_2010 表的 INFORMATION_SCHEMA.COLUMNS 视图中检索元数据。此数据集是 BigQuery 公共数据集计划的一部分。
由于您查询的表属于 bigquery-public-data 项目,因此您应按 `project_id`.dataset.INFORMATION_SCHEMA.view 格式将相应项目 ID 添加到数据集;例如 `bigquery-public-data`.census_bureau_usa.INFORMATION_SCHEMA.TABLES。
以下列会从查询结果中排除:
IS_UPDATABLE
SELECT * EXCEPT(is_updatable) FROM `bigquery-public-data`.census_bureau_usa.INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'population_by_zip_2010';
结果类似于以下内容。为改善可读性,结果中没有保留某些列。
+------------------------+-------------+------------------+-------------+-----------+-----------+-------------------+------------------------+-----------------------------+-------------+ | table_name | column_name | ordinal_position | is_nullable | data_type | is_hidden | is_system_defined | is_partitioning_column | clustering_ordinal_position | policy_tags | +------------------------+-------------+------------------+-------------+-----------+-----------+-------------------+------------------------+-----------------------------+-------------+ | population_by_zip_2010 | zipcode | 1 | NO | STRING | NO | NO | NO | NULL | 0 rows | | population_by_zip_2010 | geo_id | 2 | YES | STRING | NO | NO | NO | NULL | 0 rows | | population_by_zip_2010 | minimum_age | 3 | YES | INT64 | NO | NO | NO | NULL | 0 rows | | population_by_zip_2010 | maximum_age | 4 | YES | INT64 | NO | NO | NO | NULL | 0 rows | | population_by_zip_2010 | gender | 5 | YES | STRING | NO | NO | NO | NULL | 0 rows | | population_by_zip_2010 | population | 6 | YES | INT64 | NO | NO | NO | NULL | 0 rows | +------------------------+-------------+------------------+-------------+-----------+-----------+-------------------+------------------------+-----------------------------+-------------+