Vue TABLE_CONSTRAINTS

La vue TABLE_CONSTRAINTS contient les relations de clé primaire et étrangère dans un ensemble de données BigQuery.

Dans les bases de données relationnelles classiques, les clés primaires et les clés étrangères permettent d'assurer l'intégrité des données. Une valeur de clé primaire est unique pour chaque ligne et n'est pas NULL. Chaque valeur de clé étrangère d'une ligne doit s'afficher dans la colonne de clé primaire de la table de clé primaire ou NULL. Les relations de clé primaire et étrangère sont créées et gérées via des instructions LDD.

Limites

  • Les contraintes de valeur pour les clés primaires et les clés étrangères ne sont pas appliquées. Les utilisateurs doivent s'assurer que les valeurs correspondent à leurs contraintes respectives, sinon ils pourraient obtenir des résultats incorrects. Plus précisément :
    • Les clés primaires doivent avoir des valeurs uniques.
    • Les clés primaires ne peuvent pas dépasser 16 colonnes.
    • Les clés étrangères doivent comporter des valeurs présentes dans la colonne de la table de clé primaire. Ces valeurs peuvent être nulles.
    • Les clés primaires et étrangères doivent être de l'un des types suivants : BIGNUMERIC, BOOLEAN, DATE, DATETIME, INT64, NUMERIC, STRING ou TIMESTAMP.
  • Les clés primaires et étrangères ne peuvent être définies que sur des colonnes de premier niveau.
  • Les clés primaires ne peuvent pas être nommées.
  • Les tables avec des contraintes de clé primaire ne peuvent pas être renommées.
  • Les tables dotées de relations de clé primaire et étrangère doivent se trouver dans le même ensemble de données.
  • Une table peut contenir jusqu'à 64 clés étrangères définies dans la table.
  • Une clé étrangère ne peut pas faire référence à une colonne de la même table.
  • Les clés primaires et étrangères ne sont pas compatibles avec le type RANGE.
  • Les champs qui font partie de contraintes de clé primaire ou de clé étrangère ne peuvent pas être renommés, ou subir de modifications de type.
  • Si vous effectuez des opérations de copie, de clonage, de restauration ou de création d'instantané sur une table sans utiliser l'option -a ou --append_table, les contraintes de la table source sont copiées et écrasées dans la table de destination. Si vous utilisez l'option -a ou --append_table, seuls les enregistrements de la table source sont ajoutés à la table de destination, sans les contraintes de la table.

Autorisations requises

Vous avez besoin des autorisations IAM (Identity and Access Management) suivantes :

  • bigquery.tables.get pour afficher les définitions de clé primaire et étrangère.
  • bigquery.tables.list pour afficher les schémas d'informations de table.

Chacun des rôles prédéfinis suivants dispose des autorisations nécessaires pour effectuer les workflows détaillés dans ce document :

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

Pour en savoir plus sur les rôles et les autorisations IAM dans BigQuery, consultez la page Rôles prédéfinis et autorisations.

Schéma

La vue INFORMATION_SCHEMA.TABLE_CONSTRAINTS présente le schéma suivant :

Nom de la colonne Type Signification

CONSTRAINT_CATALOG

STRING

Nom de projet de la contrainte.

CONSTRAINT_SCHEMA

STRING

Nom de l'ensemble de données de la contrainte.

CONSTRAINT_NAME

STRING

Nom de la contrainte.

TABLE_CATALOG

STRING

Nom du projet de la table avec des contraintes.

TABLE_SCHEMA

STRING

Nom de l'ensemble de données de la table avec des contraintes.

TABLE_NAME

STRING

Nom de la table avec des contraintes.

CONSTRAINT_TYPE

STRING

PRIMARY KEY ou FOREIGN KEY.

IS_DEFERRABLE

STRING

YES ou NO selon qu'une contrainte est différable ou non. Seule la fonctionnalité NO est prise en charge.

INITIALLY_DEFERRED

STRING

Seule la fonctionnalité NO est prise en charge.

ENFORCED

STRING

YES ou NO selon que la contrainte est appliquée ou non.
Seule la fonctionnalité NO est prise en charge.

Champ d'application et syntaxe

Les requêtes exécutées sur cette vue doivent inclure un qualificatif d'ensemble de données. Pour les requêtes avec un qualificatif d'ensemble de données, vous devez disposer d'autorisations pour l'ensemble de données. Pour en savoir plus, consultez la section Syntaxe. Le tableau suivant explique le champ d'application des régions et des ressources pour cette vue :

Nom de la vue Champ d'application de la ressource Champ d'application de la région
[PROJECT_ID.]DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS; Niveau de l'ensemble de données Emplacement d'un ensemble de données
Remplacez les éléments suivants :

  • Facultatif : PROJECT_ID : ID de votre projet Google Cloud. Si non spécifié, le projet par défaut est utilisé.

Examples

La requête suivante montre les contraintes pour une seule table d'un ensemble de données :

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

Remplacez les éléments suivants :

  • PROJECT_ID : facultatif. Nom de votre projet Cloud. Si aucune valeur n'est spécifiée, cette commande utilise le projet par défaut.
  • DATASET : nom de votre ensemble de données.
  • TABLE : nom de la table.

À l'inverse, la requête suivante affiche les contraintes pour toutes les tables d'un même ensemble de données.

SELECT *
FROM PROJECT_ID.DATASET.INFORMATION_SCHEMA.TABLE_CONSTRAINTS;

Avec des contraintes existantes, les résultats de la requête ressemblent à ce qui suit :

+-----+---------------------+-------------------+-----------------------+---------------------+--------------+------------+-----------------+---------------+--------------------+----------+
| 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 table ou l'ensemble de données ne présente aucune contrainte, les résultats de la requête se présentent comme suit :

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