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 ou TIMESTAMP.
  • 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

CONSTRAINT_CATALOG

STRING

O nome do projeto de restrição.

CONSTRAINT_SCHEMA

STRING

O nome do conjunto de dados de restrição.

CONSTRAINT_NAME

STRING

O nome da restrição.

TABLE_CATALOG

STRING

O nome do projeto na tabela restrita.

TABLE_SCHEMA

STRING

O nome do conjunto de dados da tabela restrita.

TABLE_NAME

STRING

O nome da tabela restrita.

CONSTRAINT_TYPE

STRING

PRIMARY KEY ou FOREIGN KEY.

IS_DEFERRABLE

STRING

YES ou NO, dependendo de uma restrição ser adiada. Somente NO é aceito.

INITIALLY_DEFERRED

STRING

Somente NO é aceito.

ENFORCED

STRING

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
Substitua:

  • 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 |
+-----------------------------+