Vista TABLE_CONSTRAINTS

La vista TABLE_CONSTRAINTS contiene las relaciones de clave primaria y externa en un conjunto de datos de BigQuery.

En las bases de datos relacionales típicas, se usan claves primarias y externas para garantizar la integridad de los datos. Un valor de clave primaria es único para cada fila y no es NULL. Cada valor de clave externa en una fila debe estar presente en la columna de clave primaria de la tabla de la clave primaria o debe ser NULL. Las relaciones de claves primarias y externas se crean y administran a través de sentencias de DDL.

Limitaciones

  • No se aplican las restricciones de valor para las claves primarias y las externas. Los usuarios deben asegurarse de que los valores coincidan con sus restricciones respectivas. De lo contrario, pueden obtener resultados incorrectos. En particular, haz lo siguiente:
    • Las claves primarias deben tener valores únicos.
    • Las claves primarias no pueden superar las 16 columnas.
    • Las claves externas deben tener valores que están presentes en la columna de la tabla de clave primaria. Estos valores pueden ser NULL.
    • Las claves primarias y las externas deben ser de los siguientes tipos: BIGNUMERIC, BOOLEAN, DATE, DATETIME, INT64, NUMERIC, STRING o TIMESTAMP.
  • Las claves primarias y las externas solo se pueden establecer en columnas de nivel superior.
  • No se pueden nombrar las claves primarias.
  • No se puede cambiar el nombre de las tablas con restricciones de clave primaria.
  • Las tablas con una clave primaria y relaciones de clave externa deben estar en el mismo conjunto de datos.
  • Una tabla puede contener hasta 64 claves externas definidas en la tabla.
  • Una clave externa no puede hacer referencia a una columna en la misma tabla.
  • Las claves primarias y las externas no son compatibles con el tipo RANGE.
  • Es posible que no se cambie el nombre ni el tipo de los campos que forman parte de restricciones de claves primarias o externas.
  • Si copias, clonas, restableces o creas una instantánea de una tabla sin la opción -a o --append_table, las restricciones de la tabla de origen se copian y se reemplazan en la tabla de destino. Si usas la opción -a o --append_table, solo los registros de la tabla de origen se agregan a la tabla de destino sin las restricciones de la tabla.

Permisos necesarios

Necesitas los siguientes permisos de Identity and Access Management (IAM):

  • bigquery.tables.get para ver las definiciones de clave primaria y externa.
  • bigquery.tables.list para ver esquemas de información de tabla.

Cada uno de los siguientes roles predefinidos tiene los permisos necesarios para realizar los flujos de trabajo detallados en este documento:

  • roles/bigquery.dataEditor
  • roles/bigquery.dataOwner
  • roles/bigquery.admin

Para obtener más información sobre las funciones de IAM y los permisos en BigQuery, consulta Funciones y permisos predefinidos.

Esquema

La vista INFORMATION_SCHEMA.TABLE_CONSTRAINTS tiene el siguiente esquema:

Nombre de la columna Tipo Significado

CONSTRAINT_CATALOG

STRING

El nombre del proyecto de la restricción.

CONSTRAINT_SCHEMA

STRING

El nombre del conjunto de datos de la restricción.

CONSTRAINT_NAME

STRING

El nombre de la restricción.

TABLE_CATALOG

STRING

El nombre del proyecto de la tabla restringida.

TABLE_SCHEMA

STRING

El nombre del conjunto de datos de la tabla restringida.

TABLE_NAME

STRING

El nombre de la tabla restringida.

CONSTRAINT_TYPE

STRING

PRIMARY KEY o FOREIGN KEY

IS_DEFERRABLE

STRING

YES o NO, lo cual depende de si una restricción es diferible. Solo se admite NO.

INITIALLY_DEFERRED

STRING

Solo se admite NO.

ENFORCED

STRING

YES o NO, según si se aplica la restricción.
Solo se admite NO.

Permiso y sintaxis

Las consultas realizadas a esta vista deben tener un calificador de conjunto de datos. Para consultas con un calificador de conjunto de datos, debes tener permisos para el conjunto de datos. Para obtener más información, consulta Sintaxis. En la siguiente tabla, se explican los permisos de la región y los recursos para esta vista:

Nombre de la vista Permiso del recurso Permiso de la región
[PROJECT_ID.]DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS; Nivel de conjunto de datos Ubicación del conjunto de datos
Reemplaza lo siguiente:

  • Opcional: PROJECT_ID: el ID del proyecto de Google Cloud. Si no se especifica, se usa el proyecto predeterminado.

Ejemplos

La siguiente consulta muestra las restricciones para una sola tabla en un conjunto de datos:

SELECT *
FROM PROJECT_ID.DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE table_name = TABLE;

Reemplaza lo siguiente:

  • PROJECT_ID: Opcional El nombre de tu proyecto de la nube. Si no se especifica, este comando usa el proyecto predeterminado.
  • DATASET: nombre del conjunto de datos.
  • TABLE: el nombre de la tabla.

Por otro lado, en la siguiente consulta se muestran las restricciones para todas las tablas de un conjunto de datos único.

SELECT *
FROM PROJECT_ID.DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

Con las restricciones existentes, los resultados de la consulta son similares a los siguientes:

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

Si la tabla o el conjunto de datos no tienen restricciones, los resultados de la consulta se verán de la siguiente manera:

+-----------------------------+
| There is no data to display |
+-----------------------------+