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
ouTIMESTAMP
.
- 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 restore 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 |
---|---|---|
|
|
Nom de projet de la contrainte. |
|
|
Nom de l'ensemble de données de la contrainte. |
|
|
Nom de la contrainte. |
|
|
Nom du projet de la table avec des contraintes. |
|
|
Nom de l'ensemble de données de la table avec des contraintes. |
|
|
Nom de la table avec des contraintes. |
|
|
PRIMARY KEY ou
FOREIGN KEY . |
|
|
YES ou NO selon qu'une contrainte est différable ou non. Seule l'option NO est acceptée. |
|
|
Seule l'option NO est acceptée. |
|
|
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 |
- Facultatif :
PROJECT_ID
: ID de votre projet Google Cloud. Si non spécifié, le projet par défaut est utilisé.
Exemples
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 | +-----------------------------+