Gérer les tables en cluster
Ce document explique comment obtenir des informations sur les tables clusterisées dans BigQuery et contrôler l'accès à ces tables.
Pour en savoir plus, consultez les ressources suivantes :
- Pour en savoir plus sur la prise en charge des tables en cluster dans BigQuery, consultez Présentation des tables en cluster.
- Pour découvrir comment créer des tables en cluster, consultez Créer des tables en cluster.
Avant de commencer
Pour obtenir des informations sur les tables, vous devez disposer de l'autorisation bigquery.tables.get
. Les rôles IAM prédéfinis suivants incluent les autorisations bigquery.tables.get
:
roles/bigquery.metadataViewer
roles/bigquery.dataViewer
roles/bigquery.dataOwner
roles/bigquery.dataEditor
roles/bigquery.admin
En outre, si un utilisateur dispose de l'autorisation bigquery.datasets.create
, lorsqu'il crée un ensemble de données, il obtient également le rôle bigquery.dataOwner
qui lui permet d'y accéder.
L'accès bigquery.dataOwner
permet à l'utilisateur d'obtenir des informations sur les tables d'un ensemble de données.
Pour en savoir plus sur les rôles et les autorisations IAM dans BigQuery, consultez la page Rôles prédéfinis et autorisations.
Contrôler l'accès aux tables en cluster
Pour configurer l'accès aux tables et aux vues, vous pouvez attribuer un rôle IAM à une entité située aux niveaux suivants, classés par ordre de ressources autorisées (de la plus grande à la plus petite) :
- À un niveau élevé dans la hiérarchie des ressourcesGoogle Cloud , tel qu'au niveau du projet, du dossier ou de l'organisation
- Au niveau de l'ensemble de données
- Au niveau de la table ou de la vue
Vous pouvez également restreindre l'accès aux données dans les tables à l'aide des méthodes suivantes :
L'accès avec n'importe quelle ressource protégée par IAM est cumulatif. Par exemple, si une entité n'a pas accès au niveau supérieur (un projet, par exemple), vous pouvez lui accorder l'accès au niveau de l'ensemble de données afin qu'elle ait accès aux tables et aux vues de l'ensemble de données. De même, si l'entité n'a pas accès au niveau supérieur ou au niveau de l'ensemble de données, vous pouvez lui accorder l'accès au niveau de la table ou de la vue.
L'attribution de rôles IAM à un niveau supérieur dans la hiérarchie des ressourcesGoogle Cloud, tel qu'au niveau du projet, du dossier ou de l'organisation, permet à l'entité d'accéder à un vaste ensemble de ressources. Par exemple, si vous attribuez un rôle à une entité au niveau du projet, elle obtient des autorisations qui s'appliquent à tous les ensembles de données du projet.
L'attribution d'un rôle au niveau de l'ensemble de données spécifie les opérations qu'une entité est autorisée à effectuer sur les tables et les vues de cet ensemble de données spécifique, même si cette entité n'a pas accès à un niveau supérieur. Pour en savoir plus sur la configuration des contrôles d'accès aux ensembles de données, consultez la page Contrôler l'accès aux ensembles de données.
L'attribution d'un rôle au niveau de la table ou de la vue spécifie les opérations qu'une entité est autorisée à effectuer sur des tables et des vues spécifiques, même si cette entité n'a pas accès à un niveau supérieur. Pour en savoir plus sur la configuration des contrôles d'accès au niveau des tables, consultez la page Contrôler l'accès aux tables et aux vues.
Vous pouvez également créer des rôles personnalisés IAM. Si vous créez un rôle personnalisé, les autorisations que vous accordez dépendent des opérations spécifiques que vous souhaitez autoriser l'entité à effectuer.
Vous ne pouvez pas définir une autorisation "deny" sur une ressource protégée par IAM.
Pour en savoir plus sur les rôles et les autorisations, consultez la page Comprendre les rôles dans la documentation IAM ainsi que la page rôles et autorisations IAM de BigQuery.
Obtenir des informations sur des tables en cluster
Sélectionnez l'une des options suivantes :
Console
Dans la console Google Cloud , accédez au volet Ressources.
Cliquez sur le nom de votre ensemble de données pour le développer, puis sur le nom de la table que vous voulez afficher.
Cliquez sur Détails.
Les détails de la table s'affichent, y compris les colonnes de clustering.
SQL
Pour les tables en cluster, vous pouvez interroger la colonne CLUSTERING_ORDINAL_POSITION
dans la vue INFORMATION_SCHEMA.COLUMNS
pour rechercher le décalage avec un indice de 1 de la colonne dans les colonnes de clustering de la table :
Dans la console Google Cloud , accédez à la page BigQuery.
Dans l'éditeur de requête, saisissez l'instruction suivante :
CREATE TABLE mydataset.data (column1 INT64, column2 INT64) CLUSTER BY column1, column2; SELECT column_name, clustering_ordinal_position FROM mydataset.INFORMATION_SCHEMA.COLUMNS;
Cliquez sur
Exécuter.
Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.
La position ordinale de clustering est 1 pour column1
et 2 pour column2
.
D'autres métadonnées de table sont disponibles via les vues TABLES
, TABLE_OPTIONS
, COLUMNS
et COLUMN_FIELD_PATH
dans INFORMATION_SCHEMA
.
bq
Exécutez la commande bq show
pour afficher toutes les informations sur la table. L'option --schema
permet de n'afficher que les informations de schéma de table. L'option --format
peut être utilisée pour contrôler le résultat.
Si vous souhaitez obtenir des informations sur une table se trouvant dans un projet autre que celui par défaut, ajoutez l'ID du projet au nom de l'ensemble de données, en respectant le format suivant : project_id:dataset
.
bq show \ --schema \ --format=prettyjson \ PROJECT_ID:DATASET.TABLE
Remplacez les éléments suivants :
PROJECT_ID
: ID de votre projetDATASET
: nom de l'ensemble de donnéesTABLE
: nom de la table
Exemples :
Saisissez la commande suivante pour afficher toutes les informations sur la table myclusteredtable
de l'ensemble de données mydataset
. mydataset
se trouve dans votre projet par défaut.
bq show --format=prettyjson mydataset.myclusteredtable
Le résultat doit se présenter sous la forme suivante :
{ "clustering": { "fields": [ "customer_id" ] }, ... }
API
Appelez la méthode bigquery.tables.get
et définissez tous les paramètres pertinents.
Répertorier les tables en cluster dans un ensemble de données
Les autorisations requises pour répertorier les tables en cluster et les étapes pour y arriver sont les mêmes que pour les tables standards. Pour en savoir plus, consultez Répertorier les tables d'un ensemble de données.
Modifier la spécification du clustering
Vous pouvez modifier ou supprimer les spécifications de clustering d'une table, ou modifier l'ensemble des colonnes en cluster dans une table en cluster. Cette méthode de mise à jour de l'ensemble de colonnes en cluster est utile pour les tables qui utilisent des insertions en flux continu, car elles ne peuvent pas facilement être échangées par d'autres méthodes.
Suivez ces étapes pour appliquer une nouvelle spécification de clustering à des tables non partitionnées ou partitionnées.
Dans l'outil bq, mettez à jour la spécification de clustering de votre table pour qu'elle corresponde au nouveau clustering :
bq update --clustering_fields=CLUSTER_COLUMN DATASET.ORIGINAL_TABLE
Remplacez les éléments suivants :
CLUSTER_COLUMN
: colonne sur laquelle vous effectuez le clustering, par exemplemycolumn
DATASET
: nom de l'ensemble de données contenant la table, par exemplemydataset
ORIGINAL_TABLE
: nom de votre table d'origine, par exemplemytable
Vous pouvez également appeler la méthode API
tables.update
outables.patch
pour modifier la spécification du clustering.Pour mettre en cluster toutes les lignes conformément à la nouvelle spécification de clustering, exécutez l'instruction
UPDATE
suivante :UPDATE DATASET.ORIGINAL_TABLE SET CLUSTER_COLUMN=CLUSTER_COLUMN WHERE true
Étapes suivantes
- Pour en savoir plus sur l'interrogation de tables en cluster, consultez Interroger des tables en cluster.
- Pour une présentation de la compatibilité des tables partitionnées dans BigQuery, consultez la page Présentation des tables partitionnées.
- Pour apprendre à créer des tables partitionnées, consultez la page Créer des tables partitionnées.