Créer des clones de table

Ce document explique comment copier une table dans un clone de table à l'aide d'une instruction SQL CREATE TABLE CLONE, d'une commande bq cp ou d'un appel d'API jobs.insert. Ce document est destiné aux utilisateurs qui connaissent déjà les clones de table.

Autorisations et rôles

Cette section décrit les autorisations Identity and Access Management (IAM) dont vous avez besoin pour créer un clone de table, ainsi que les rôles IAM prédéfinis qui accordent ces autorisations.

Autorisations

Pour créer un clone de table, vous avez besoin des autorisations suivantes :

Autorisation Ressource
Tous les éléments suivants :

bigquery.tables.get
bigquery.tables.getData
La table à partir de laquelle vous souhaitez créer un clone.
bigquery.tables.create
bigquery.tables.updateData
L'ensemble de données contenant le clone de la table.

Rôles

Voici les rôles BigQuery prédéfinis qui fournissent les autorisations requises :

Rôle Ressource
Au choix :

bigquery.dataViewer
bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
La table à partir de laquelle vous souhaitez créer un clone.
Au choix :

bigquery.dataEditor
bigquery.dataOwner
bigquery.admin
L'ensemble de données contenant le nouvel instantané de table.

Créer un clone de table

Utilisez GoogleSQL, l'outil de ligne de commande bq ou l'API BigQuery pour créer un clone de table.

SQL

Pour cloner une table, utilisez l'instruction CREATE TABLE CLONE.

  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
    myproject.myDataset_backup.myTableClone
    CLONE myproject.myDataset.myTable;
    

  3. Cliquez sur Exécuter.

Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.

Remplacez les éléments suivants :

  • PROJECT est l'ID du projet cible. Ce projet doit appartenir à la même organisation que le projet contenant la table que vous clonez.
  • DATASET est le nom de l'ensemble de données cible. Cet ensemble de données doit se trouver dans la même région que celui contenant la table que vous clonez.
  • CLONE_NAME est le nom du clone de table que vous créez.

bq

Exécutez une commande bq cp avec l'option --clone:

Accéder à Cloud Shell

bq cp --clone -n project1:myDataset.myTable PROJECT:DATASET.CLONE_NAME

Remplacez les éléments suivants :

  • PROJECT est l'ID du projet cible. Ce projet doit appartenir à la même organisation que le projet contenant la table que vous clonez.
  • DATASET est le nom de l'ensemble de données cible. Cet ensemble de données doit se trouver dans la même région que celui contenant la table que vous clonez. Si l'ensemble de données ne se trouve pas dans la même région que celui contenant la table que vous clonez, une table complète est copiée.
  • CLONE_NAME est le nom du clone de table que vous créez.

Si vous créez un clone dans le même projet que la table de base, vous pouvez ignorer la spécification d'un projet, comme indiqué ci-dessous:

bq cp --clone -n myDataset.myTable DATASET.CLONE_NAME

API

Appelez la méthode jobs.insert avec le champ operationType défini sur CLONE :

Paramètre Valeur
projectId ID du projet qui exécute la tâche.
Corps de la requête
{
  "configuration": {
    "copy": {
      "sourceTables": [
        {
          "projectId": "myProject",
          "datasetId": "myDataset",
          "tableId": "myTable"
        }
      ],
      "destinationTable": {
        "projectId": "PROJECT",
        "datasetId": "DATASET",
        "tableId": "CLONE_NAME"
      },
      "operationType": "CLONE",
      "writeDisposition": "WRITE_EMPTY",
    }
  }
}

Remplacez les éléments suivants :

  • PROJECT est l'ID du projet cible. Ce projet doit appartenir à la même organisation que le projet contenant la table que vous clonez.
  • DATASET est le nom de l'ensemble de données cible. Cet ensemble de données doit se trouver dans la même région que celui contenant la table que vous clonez. Si l'ensemble de données ne se trouve pas dans la même région que celui contenant la table, vous clonez une table complète.
  • CLONE_NAME est le nom du clone de table que vous créez.

Contrôle des accès

Lorsque vous créez un clone de table, l'accès au clone de table est défini comme suit :

  • Les règles d'accès au niveau des lignes sont copiées depuis la table de base vers le clone de la table.
  • Les règles d'accès au niveau des colonnes sont copiées depuis la table de base vers le clone de la table.
  • L'accès au niveau de la table est déterminé comme suit :

    • Si le clone de la table écrase une table existante, l'accès au niveau de la table est conservé. Les tags ne sont pas copiés depuis la table de base.
    • Si le clone de la table est une nouvelle ressource, l'accès au niveau de la table pour le clone est déterminé par les stratégies d'accès de l'ensemble de données dans lequel le clone de la table est créé. De plus, les tags sont copiés depuis la table de base vers le clone de la table.

Étapes suivantes

  • Une fois le clone de table créé, vous pouvez l'utiliser de la même manière que les tables standards. Pour en savoir plus, consultez la page Gérer les tables.