TABLE_CONSTRAINTS 视图
TABLE_CONSTRAINTS
视图包含 BigQuery 数据集中的主键和外键关系。
在典型的关系型数据库中,主键和外键用于确保数据完整性。主键值对于每一行都是唯一的,并且不是 NULL
;而一行中的每个外键值都必须存在于主键表的主键列中,或者为 NULL
。主键和外键关系通过 DDL 语句创建和管理。
限制
- 系统不强制要求满足主键和外键的值限制条件;但用户需要确保值满足其各自的限制条件,否则可能会获得错误的结果。具体而言:
- 主键必须具有唯一值。
- 主键不能超过 16 列。
- 外键必须具有存在于主键表列中的值;这些值可以为 NULL。
- 主键和外键必须是以下类型之一:
BIGNUMERIC
、BOOLEAN
、DATE
、DATETIME
、INT64
、NUMERIC
、STRING
或TIMESTAMP
。
- 只能在顶级列上设置主键和外键。
- 主键不能命名。
- 不能重命名包含主键限制条件的表。
- 包含主键和外键关系的表必须位于同一数据集中。
- 一个表最多可包含 64 个在表中定义的外键。
- 外键不能引用同一表中的列。
RANGE
类型不支持主键和外键。- 作为主键限制条件或外键限制条件构成部分的字段不能重命名,也不能更改其类型。
- 如果您在对表执行复制、克隆、restore或快照操作时没有使用
-a
或--append_table
选项,则系统会复制源表的限制条件并使用其覆盖目标表。如果您使用了-a
或--append_table
选项,则系统只会将源表记录添加到目标表中,而不会添加表限制条件。
所需权限
您需要以下 Identity and Access Management (IAM) 权限:
bigquery.tables.get
,用于查看主键和外键定义。bigquery.tables.list
,用于查看表信息架构。
以下每个预定义角色都包含执行本文档中详述的工作流所需的权限:
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.admin
如需详细了解 BigQuery 中的 IAM 角色和权限,请参阅预定义的角色和权限。
架构
INFORMATION_SCHEMA.TABLE_CONSTRAINTS
视图具有如下架构:
列名称 | 类型 | 含义 |
---|---|---|
|
|
限制条件项目名称。 |
|
|
限制条件数据集名称。 |
|
|
限制条件名称。 |
|
|
受限表项目名称。 |
|
|
受限表数据集名称。 |
|
|
受限表名称。 |
|
|
PRIMARY KEY 或 FOREIGN KEY 。 |
|
|
YES 或 NO ,具体取决于限制条件是否可延期。仅支持 NO 。 |
|
|
仅支持 NO 。 |
|
|
YES 或 NO ,具体取决于限制条件是否要强制执行。仅支持 NO 。 |
范围和语法
针对此视图的查询必须包括数据集限定符。对于包含数据集限定符的查询,您必须拥有数据集的权限。如需了解详情,请参阅语法。下表展示了此视图的区域和资源范围:
视图名称 | 资源范围 | 区域范围 |
---|---|---|
[PROJECT_ID.]DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS; |
数据集级 | 数据集位置 |
- 可选:
PROJECT_ID
:您的 Google Cloud 项目的 ID。如果未指定,则使用默认项目。
示例
以下查询展示了数据集中单个表的限制条件:
SELECT * FROM PROJECT_ID.DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE table_name = TABLE;
请替换以下内容:
PROJECT_ID
:可选。您的 Cloud 项目的名称。如果未指定,则此命令会使用默认项目。DATASET
:您的数据集的名称。TABLE
:表格的名称。
与上述查询相反,以下查询展示了单个数据集中所有表的限制条件。
SELECT * FROM PROJECT_ID.DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
如果有现有限制条件,则查询结果类似于以下内容:
+-----+---------------------+-------------------+-----------------------+---------------------+--------------+------------+-----------------+---------------+--------------------+----------+ | Row | constraint_catalog | constraint_schema | constraint_name | table_catalog | table_schema | table_name | constraint_type | is_deferrable | initially_deferred | enforced | +-----+---------------------+-------------------+-----------------------+---------------------+--------------+------------+-----------------+---------------+--------------------+----------+ | 1 | myConstraintCatalog | myDataset | orders.pk$ | myConstraintCatalog | myDataset | orders | PRIMARY KEY | NO | NO | NO | | 2 | myConstraintCatalog | myDataset | orders.order_customer | myConstraintCatalog | myDataset | orders | FOREIGN KEY | NO | NO | NO | +-----+---------------------+-------------------+-----------------------+---------------------+--------------+------------+-----------------+---------------+--------------------+----------+
如果表或数据集没有任何限制条件,则查询结果如下所示:
+-----------------------------+ | There is no data to display | +-----------------------------+