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 :

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

  1. Dans la console Google Cloud , accédez au volet Ressources.

  2. 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.

  3. Cliquez sur Détails.

    Les détails de la table s'affichent, y compris les colonnes de clustering.

    Détails de la table.

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 :

  1. Dans la console Google Cloud , accédez à la page BigQuery.

    Accéder à BigQuery

  2. 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;

  3. 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 projet
  • DATASET : nom de l'ensemble de données
  • TABLE : 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.

  1. 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 exemple mycolumn
    • DATASET : nom de l'ensemble de données contenant la table, par exemple mydataset
    • ORIGINAL_TABLE : nom de votre table d'origine, par exemple mytable

    Vous pouvez également appeler la méthode API tables.update ou tables.patch pour modifier la spécification du clustering.

  2. 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