Visualização TABLE_CONSTRAINTS
A visualização TABLE_CONSTRAINTS
contém as relações de chave primária e
externa em um conjunto de dados do BigQuery.
Em bancos de dados relacionais típicos, as chaves primárias e externas são usadas para
garantir a integridade dos dados. Um valor de chave primária é exclusivo para cada linha e não é
NULL
. Cada valor de chave externa em uma linha precisa estar presente na coluna de chave primária
da tabela de chaves primária ou ser NULL
. As relações de chave primária e externa
são criadas e gerenciadas por
instruções DDL.
Limitações
- As restrições de valor para chaves primárias e externas não são aplicadas.
Os usuários precisam garantir que os valores correspondam às respectivas restrições.
Caso contrário, eles podem receber resultados incorretos. Especificamente:
- As chaves primárias precisam ter valores exclusivos.
- As chaves primárias não podem ultrapassar 16 colunas.
- As chaves estrangeiras precisam ter valores que estejam presentes na coluna da tabela de chaves primária. Esses valores podem ser NULL.
- As chaves primárias e externas precisam ser de um dos seguintes tipos:
BIGNUMERIC
,BOOLEAN
,DATE
,DATETIME
,INT64
,NUMERIC
,STRING
ouTIMESTAMP
.
- As chaves primárias e externas só podem ser definidas em colunas de nível superior.
- Não é possível nomear as chaves primárias.
- Não é possível renomear tabelas com restrições de chave primária.
- As tabelas com uma chave primária e relações de chave externa precisam estar no mesmo conjunto de dados.
- Uma tabela pode conter até 64 chaves externas definidas na tabela.
- Uma chave externa não pode ter referência a uma coluna na mesma tabela.
- Chaves primárias e chaves estrangeiras não são compatíveis com o tipo
RANGE
. - Os campos que fazem parte das restrições de chave primária ou externa não podem ser renomeados ou ter o tipo alterado.
- Se você
copiar,
clonar,
restore
ou
fazer um snapshot de uma
tabela sem as opções
-a
ou--append_table
, as restrições da tabela de origem são copiadas e substituídas para a tabela de destino. Se você usar a opção-a
ou--append_table
, somente os registros da tabela de origem serão adicionados à tabela de destino sem as restrições da tabela.
Permissões necessárias
Você precisa das seguintes permissões do Identity and Access Management (IAM):
bigquery.tables.get
para visualizar as definições de chave primária e externa.bigquery.tables.list
para visualizar esquemas de informações da tabela.
Cada um dos papéis predefinidos a seguir tem as permissões necessárias para executar os fluxos de trabalho detalhados neste documento:
roles/bigquery.dataEditor
roles/bigquery.dataOwner
roles/bigquery.admin
Para mais informações sobre os papéis e as permissões do IAM no BigQuery, consulte Papéis e permissões predefinidos.
Esquema
A visualização INFORMATION_SCHEMA.TABLE_CONSTRAINTS
tem o seguinte esquema:
Nome da coluna | Tipo | Significado |
---|---|---|
|
|
O nome do projeto de restrição. |
|
|
O nome do conjunto de dados de restrição. |
|
|
O nome da restrição. |
|
|
O nome do projeto na tabela restrita. |
|
|
O nome do conjunto de dados da tabela restrita. |
|
|
O nome da tabela restrita. |
|
|
PRIMARY KEY ou
FOREIGN KEY . |
|
|
YES ou NO , dependendo de uma restrição ser
adiada. Somente NO é aceito. |
|
|
Somente NO é aceito. |
|
|
YES ou NO , dependendo da aplicação da
restrição. Somente NO é aceito. |
Escopo e sintaxe
As consultas nesta visualização precisam ter um qualificador de conjunto de dados. Para consultas com um qualificador de conjunto de dados, é preciso ter permissões para o conjunto de dados. Para mais informações, consulte Sintaxe. A tabela a seguir explica os escopos de região e recurso dessa visualização:
Nome da visualização | Escopo do recurso | Escopo da região |
---|---|---|
[PROJECT_ID.]DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS; |
Nível do conjunto de dados | Local do conjunto de dados |
- Opcional:
PROJECT_ID
: o ID do seu projeto do Google Cloud. Se não for especificado, o projeto padrão será usado.
Exemplos
A consulta a seguir mostra as restrições de uma única tabela em um conjunto de dados:
SELECT * FROM PROJECT_ID.DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE table_name = TABLE;
Substitua:
PROJECT_ID
: opcional. O nome do projeto na nuvem. Se não for especificado, esse comando usará o projeto padrão.DATASET
: o nome do conjunto de dados.TABLE
: o nome da tabela.
Por outro lado, a consulta a seguir mostra as restrições de todas as tabelas em um único conjunto de dados.
SELECT * FROM PROJECT_ID.DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS;
Com as restrições atuais, os resultados da consulta serão semelhantes aos seguintes:
+-----+---------------------+-------------------+-----------------------+---------------------+--------------+------------+-----------------+---------------+--------------------+----------+ | 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 | +-----+---------------------+-------------------+-----------------------+---------------------+--------------+------------+-----------------+---------------+--------------------+----------+
Se a tabela ou o conjunto de dados não tiver restrições, os resultados da consulta serão parecidos com estes:
+-----------------------------+ | There is no data to display | +-----------------------------+