Gérer les vues

Ce document explique comment gérer les vues dans BigQuery. La gestion des vues BigQuery repose sur les actions suivantes :

Avant de commencer

Attribuez aux utilisateurs des rôles IAM (Identity and Access Management) incluant les autorisations nécessaires pour effectuer l'ensemble des tâches du présent document. Les autorisations requises pour effectuer une tâche (le cas échéant) sont répertoriées dans la section "Autorisations requises" de la tâche.

Mettre à jour une vue

Une fois que vous avez créé une vue, vous pouvez mettre à jour les propriétés suivantes :

Autorisations requises

Pour mettre à jour une vue, vous avez besoin des autorisations IAM suivantes :

  • bigquery.tables.update
  • bigquery.tables.get

Chacun des rôles IAM prédéfinis suivants inclut les autorisations dont vous avez besoin pour mettre à jour une vue :

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

En outre, si vous disposez de l'autorisation bigquery.datasets.create, vous pouvez mettre à jour les tables et les vues des ensembles de données que vous créez.

Pour mettre à jour la requête SQL d'une vue, vous devez également être autorisé à interroger les tables référencées par la requête SQL.

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

Mettre à jour la requête SQL d'une vue

Vous pouvez mettre à jour la requête SQL utilisée pour définir une vue de plusieurs façons :

  • En utilisant la console Google Cloud
  • En exécutant la commande bq update de l'outil de ligne de commande bq
  • En appelant la méthode API tables.patch
  • En utilisant les bibliothèques clientes

Vous pouvez faire passer le dialecte SQL de l'ancien SQL vers GoogleSQL dans l'API ou l'outil de ligne de commande bq. Vous ne pouvez pas mettre à jour une vue en ancien SQL vers GoogleSQL dans la console Google Cloud.

Pour mettre à jour la requête SQL d'une vue :

Console

  1. Dans le panneau Explorateur, développez votre projet et votre ensemble de données, puis sélectionnez la vue.

  2. Cliquez sur l'onglet Détails.

  3. Au-dessus de la zone Requête, cliquez sur le bouton Modifier la requête. Cliquez sur Open (Ouvrir) dans la boîte de dialogue qui apparaît.

    Modifier la requête

  4. Modifiez la requête SQL dans la zone de l'éditeur de requête, puis cliquez sur Save view (Enregistrer l'affichage).

    Enregistrer la vue

  5. Vérifiez que tous les champs sont corrects dans la boîte de dialogue Enregistrer l'affichage avant de cliquer sur Enregistrer.

bq

Exécutez la commande bq update avec l'option --view. Pour utiliser le langage GoogleSQL, ou pour faire passer le dialecte des requêtes de l'ancien SQL vers GoogleSQL, incluez l'option --use_legacy_sql et définissez-la sur false.

Si votre requête fait référence à des ressources externes de fonction définie par l'utilisateur, stockées dans Cloud Storage ou dans des fichiers locaux, spécifiez ces ressources à l'aide de l'option --view_udf_resource. L'option --view_udf_resource n'est pas présentée ici. Pour en savoir plus sur l'utilisation des fonctions définies par l'utilisateur, consultez la page Fonctions définies par l'utilisateur en GoogleSQL.

Si vous mettez à jour une vue dans un projet autre que votre projet 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 update \
    --use_legacy_sql=false \
    --view_udf_resource=path_to_file \
    --view='query' \
    project_id:dataset.view

Remplacez les éléments suivants :

  • path_to_file : chemin de l'URI ou du système de fichiers local permettant d'accéder à un fichier de code, qui doit être chargé et évalué immédiatement en tant que ressource de fonction définie par l'utilisateur utilisée par la vue. Répétez l'option pour spécifier plusieurs fichiers.
  • query : requête GoogleSQL valide.
  • project_id : ID de votre projet.
  • dataset : nom de l'ensemble de données contenant la vue que vous mettez à jour.
  • view : nom de la vue que vous mettez à jour.

Exemples

Saisissez la commande suivante pour mettre à jour la requête SQL pour une vue nommée myview dans mydataset. mydataset se trouve dans votre projet par défaut. L'exemple de requête utilisé pour mettre à jour la vue interroge les données de l'ensemble de données public Données sur les noms aux États-Unis.

bq update \
    --use_legacy_sql=false \
    --view \
    'SELECT
      name,
      number
    FROM
      `bigquery-public-data.usa_names.usa_1910_current`
    WHERE
      gender = "M"
    ORDER BY
      number DESC;' \
    mydataset.myview

Saisissez la commande suivante pour mettre à jour la requête SQL pour une vue nommée myview dans mydataset. mydataset se trouve dans myotherproject, et non dans votre projet par défaut. L'exemple de requête utilisé pour mettre à jour la vue interroge les données de l'ensemble de données public Données sur les noms aux États-Unis.

bq update \
    --use_legacy_sql=false \
    --view \
    'SELECT
      name,
      number
    FROM
      `bigquery-public-data.usa_names.usa_1910_current`
    WHERE
      gender = "M"
    ORDER BY
      number DESC;' \
    myotherproject:mydataset.myview

API

Pour mettre à jour une vue, appelez la méthode tables.patch avec une ressource de table contenant une propriété view mise à jour. Étant donné que la méthode tables.update remplace l'intégralité de la ressource de table, la méthode tables.patch est préférable.

Go

Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Go.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// updateView demonstrates updating the query metadata that defines a logical view.
func updateView(projectID, datasetID, viewID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// viewID := "myview"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	view := client.Dataset(datasetID).Table(viewID)
	meta, err := view.Metadata(ctx)
	if err != nil {
		return err
	}

	newMeta := bigquery.TableMetadataToUpdate{
		// This example updates a view into the shakespeare dataset to exclude works named after kings.
		ViewQuery: "SELECT word, word_count, corpus, corpus_date FROM `bigquery-public-data.samples.shakespeare` WHERE corpus NOT LIKE '%king%'",
	}

	if _, err := view.Update(ctx, newMeta, meta.ETag); err != nil {
		return err
	}
	return nil
}

Java

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryException;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.TableId;
import com.google.cloud.bigquery.TableInfo;
import com.google.cloud.bigquery.ViewDefinition;

// Sample to update query on a view
public class UpdateViewQuery {

  public static void runUpdateViewQuery() {
    // TODO(developer): Replace these variables before running the sample.
    String datasetName = "MY_DATASET_NAME";
    String tableName = "MY_TABLE_NAME";
    String viewName = "MY_VIEW_NAME";
    String updateQuery =
        String.format("SELECT TimestampField, StringField FROM %s.%s", datasetName, tableName);
    updateViewQuery(datasetName, viewName, updateQuery);
  }

  public static void updateViewQuery(String datasetName, String viewName, String query) {
    try {
      // Initialize client that will be used to send requests. This client only needs to be created
      // once, and can be reused for multiple requests.
      BigQuery bigquery = BigQueryOptions.getDefaultInstance().getService();

      // Retrieve existing view metadata
      TableInfo viewMetadata = bigquery.getTable(TableId.of(datasetName, viewName));

      // Update view query
      ViewDefinition viewDefinition = viewMetadata.getDefinition();
      viewDefinition.toBuilder().setQuery(query).build();

      // Set metadata
      bigquery.update(viewMetadata.toBuilder().setDefinition(viewDefinition).build());

      System.out.println("View query updated successfully");
    } catch (BigQueryException e) {
      System.out.println("View query was not updated. \n" + e.toString());
    }
  }
}

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Node.js.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

// Import the Google Cloud client library and create a client
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateViewQuery() {
  // Updates a view named "my_existing_view" in "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_existing_dataset"
  // const tableId = "my_existing_table"
  const dataset = await bigquery.dataset(datasetId);

  // This example updates a view into the USA names dataset to include state.
  const newViewQuery = `SELECT name, state 
  FROM \`bigquery-public-data.usa_names.usa_1910_current\`
  LIMIT 10`;

  // Retrieve existing view
  const [view] = await dataset.table(tableId).get();

  // Retrieve existing view metadata
  const [metadata] = await view.getMetadata();

  // Update view query
  metadata.view = newViewQuery;

  // Set metadata
  await view.setMetadata(metadata);

  console.log(`View ${tableId} updated.`);
}

Python

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Python.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

from google.cloud import bigquery

client = bigquery.Client()

view_id = "my-project.my_dataset.my_view"
source_id = "my-project.my_dataset.my_table"
view = bigquery.Table(view_id)

# The source table in this example is created from a CSV file in Google
# Cloud Storage located at
# `gs://cloud-samples-data/bigquery/us-states/us-states.csv`. It contains
# 50 US states, while the view returns only those states with names
# starting with the letter 'M'.
view.view_query = f"SELECT name, post_abbr FROM `{source_id}` WHERE name LIKE 'M%'"

# Make an API request to update the query property of the view.
view = client.update_table(view, ["view_query"])
print(f"Updated {view.table_type}: {str(view.reference)}")

Mettre à jour le délai d'expiration d'une vue

Vous pouvez définir un délai d'expiration par défaut des tables au niveau de l'ensemble de données (qui affecte à la fois les tables et les vues). Vous pouvez également définir le délai d'expiration d'une vue au moment de sa création, auquel cas le délai d'expiration par défaut des tables de l'ensemble de données est ignoré. Si vous ne définissez de délai d'expiration dans aucun de ces deux cas, la vue n'expire jamais et vous devez la supprimer manuellement.

À tout moment après la création de la vue, vous pouvez mettre à jour son délai d'expiration de plusieurs façons :

  • En utilisant la console Google Cloud
  • En utilisant une instruction LDD (langage de définition de données) écrite en syntaxe GoogleSQL
  • En exécutant la commande bq update de l'outil de ligne de commande bq
  • En appelant la méthode API tables.patch
  • En utilisant les bibliothèques clientes

Pour mettre à jour le délai d'expiration d'une vue :

Console

  1. Dans le volet de navigation, sélectionnez la vue.

  2. Sur la page Détails de la vue, cliquez sur Détails.

  3. À droite de la boîte de dialogue Informations sur la vue, cliquez sur l'icône de modification (le crayon).

  4. Dans la boîte de dialogue Informations sur la vue, cliquez sur Spécifier une date dans la section Expiration de la vue.

  5. Dans le sélecteur de date, saisissez la date et l'heure d'expiration, puis cliquez sur OK.

  6. Cliquez sur Mettre à jour. Le délai d'expiration mis à jour apparaît dans la section Informations sur la vue.

SQL

Utilisez l'instruction LDD ALTER VIEW SET OPTIONS :

  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 :

     ALTER VIEW DATASET_ID.MY_VIEW
     SET OPTIONS (
      expiration_timestamp = TIMESTAMP('NEW_TIMESTAMP'));

    Remplacez les éléments suivants :

    • DATASET_ID : ID de l'ensemble de données contenant la vue.
    • MY_VIEW : nom de la vue à mettre à jour.
    • NEW_TIMESTAMP : une valeur TIMESTAMP.

  3. Cliquez sur Exécuter.

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

bq

Exécutez la commande bq update avec l'option --expiration. Si vous mettez à jour une vue dans un projet autre que votre projet 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 update \
    --expiration integer \
    project_id:dataset.view

Remplacez les éléments suivants :

  • integer : durée de vie par défaut (en secondes) de la table. La valeur minimale est de 3 600 secondes (une heure). Le délai d'expiration correspond à l'heure actuelle plus la valeur entière.
  • project_id : ID de votre projet.
  • dataset : nom de l'ensemble de données contenant la vue que vous mettez à jour.
  • view : nom de la vue que vous mettez à jour.

Exemples

Saisissez la commande suivante pour faire passer le délai d'expiration de myview dans mydataset à cinq jours (432 000 secondes). mydataset se trouve dans votre projet par défaut.

bq update \
    --expiration 432000 \
    mydataset.myview

Saisissez la commande suivante pour faire passer le délai d'expiration de myview dans mydataset à cinq jours (432 000 secondes). mydataset se trouve dans myotherproject, et non dans votre projet par défaut.

bq update \
    --expiration 432000 \
    myotherproject:mydataset.myview

API

Appelez la méthode tables.patch, puis utilisez la propriété expirationTime de la ressource de table. Étant donné que la méthode tables.update remplace l'intégralité de la ressource de table, la méthode tables.patch est préférable. Lorsque vous utilisez l'API REST, le délai d'expiration de la vue est exprimé en millisecondes.

Go

Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Go.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

import (
	"context"
	"fmt"
	"time"

	"cloud.google.com/go/bigquery"
)

// updateTableExpiration demonstrates setting the table expiration of a table to a specific point in time
// in the future, at which time it will be deleted.
func updateTableExpiration(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	tableRef := client.Dataset(datasetID).Table(tableID)
	meta, err := tableRef.Metadata(ctx)
	if err != nil {
		return err
	}
	update := bigquery.TableMetadataToUpdate{
		ExpirationTime: time.Now().Add(time.Duration(5*24) * time.Hour), // table expiration in 5 days.
	}
	if _, err = tableRef.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

Java

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

Table beforeTable = bigquery.getTable(datasetName, tableName);

// Set table to expire 5 days from now.
long expirationMillis = DateTime.now().plusDays(5).getMillis();
TableInfo tableInfo = beforeTable.toBuilder()
        .setExpirationTime(expirationMillis)
        .build();
Table afterTable = bigquery.update(tableInfo);

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Node.js.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateTableExpiration() {
  // Updates a table's expiration.

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = 'my_dataset', // Existing dataset
  // const tableId = 'my_table', // Existing table
  // const expirationTime = Date.now() + 1000 * 60 * 60 * 24 * 5 // 5 days from current time in ms

  // Retreive current table metadata
  const table = bigquery.dataset(datasetId).table(tableId);
  const [metadata] = await table.getMetadata();

  // Set new table expiration to 5 days from current time
  metadata.expirationTime = expirationTime.toString();
  const [apiResponse] = await table.setMetadata(metadata);

  const newExpirationTime = apiResponse.expirationTime;
  console.log(`${tableId} expiration: ${newExpirationTime}`);
}

Python

Pour mettre à jour le délai d'expiration d'une vue, vous devez suivre la même procédure que pour mettre à jour celui d'une table.

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Python.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

from google.cloud import bigquery

client = bigquery.Client()

# TODO(dev): Change table_id to the full name of the table you want to update.
table_id = "your-project.your_dataset.your_table_name"

# TODO(dev): Set table to expire for desired days days from now.
expiration = datetime.datetime.now(datetime.timezone.utc) + datetime.timedelta(
    days=5
)
table = client.get_table(table_id)  # Make an API request.
table.expires = expiration
table = client.update_table(table, ["expires"])  # API request

print(f"Updated {table_id}, expires {table.expires}.")

Mettre à jour la description d'une vue

Vous pouvez mettre à jour la description d'une vue de plusieurs façons :

  • En utilisant la console Google Cloud
  • En utilisant une instruction LDD (langage de définition de données) écrite en syntaxe GoogleSQL
  • En exécutant la commande bq update de l'outil de ligne de commande bq
  • En appelant la méthode API tables.patch
  • En utilisant les bibliothèques clientes

Pour mettre à jour la description d'une vue :

Console

Vous ne pouvez pas ajouter de description lorsque vous créez une vue à l'aide de la console Google Cloud. Une fois la vue créée, vous pouvez ajouter une description sur la page Details (Détails).

  1. Dans le panneau Explorateur, développez votre projet et votre ensemble de données, puis sélectionnez la vue.

  2. Cliquez sur l'onglet Détails.

  3. Cliquez sur l'icône en forme de crayon à côté de Description.

    Modifier la description de la vue

  4. Saisissez une description dans la boîte de dialogue. Cliquez sur Mettre à jour pour enregistrer la nouvelle description.

SQL

Utilisez l'instruction LDD ALTER VIEW SET OPTIONS :

  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 :

     ALTER VIEW DATASET_ID.MY_VIEW
     SET OPTIONS (
      description = 'NEW_DESCRIPTION');

    Remplacez les éléments suivants :

    • DATASET_ID : ID de l'ensemble de données contenant la vue.
    • MY_VIEW : nom de la vue à mettre à jour.
    • NEW_DESCRIPTION : description de la nouvelle vue

  3. Cliquez sur Exécuter.

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

bq

Exécutez la commande bq update avec l'option --description. Si vous mettez à jour une vue dans un projet autre que votre projet 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 update \
    --description "description" \
    project_id:dataset.view

Remplacez les éléments suivants :

  • description est le texte décrivant la vue, entre guillemets.
  • project_id : ID de votre projet.
  • dataset : nom de l'ensemble de données contenant la vue que vous mettez à jour.
  • view : nom de la vue que vous mettez à jour.

Exemples

Saisissez la commande suivante pour remplacer la description de myview dans mydataset par "Description of myview". mydataset se trouve dans votre projet par défaut.

bq update \
    --description "Description of myview" \
    mydataset.myview

Saisissez la commande suivante pour remplacer la description de myview dans mydataset par "Description of myview". mydataset se trouve dans myotherproject, et non dans votre projet par défaut.

bq update \
    --description "Description of myview" \
    myotherproject:mydataset.myview

API

Appelez la méthode tables.patch, puis utilisez la propriété description pour mettre à jour la description de la vue dans la ressource de table. Étant donné que la méthode tables.update remplace l'intégralité de la ressource de table, la méthode tables.patch est préférable.

Go

Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Go.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// updateTableDescription demonstrates how to fetch a table's metadata and updates the Description metadata.
func updateTableDescription(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	tableRef := client.Dataset(datasetID).Table(tableID)
	meta, err := tableRef.Metadata(ctx)
	if err != nil {
		return err
	}
	update := bigquery.TableMetadataToUpdate{
		Description: "Updated description.",
	}
	if _, err = tableRef.Update(ctx, update, meta.ETag); err != nil {
		return err
	}
	return nil
}

Java

Pour mettre à jour la description d'une vue, vous devez suivre la même procédure que pour mettre à jour celle d'une table.

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

// String datasetName = "my_dataset_name";
// String tableName = "my_table_name";
// String newDescription = "new_description";

Table beforeTable = bigquery.getTable(datasetName, tableName);
TableInfo tableInfo = beforeTable.toBuilder()
    .setDescription(newDescription)
    .build();
Table afterTable = bigquery.update(tableInfo);

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Node.js.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function updateTableDescription() {
  // Updates a table's description.

  // Retreive current table metadata
  const table = bigquery.dataset(datasetId).table(tableId);
  const [metadata] = await table.getMetadata();

  // Set new table description
  const description = 'New table description.';
  metadata.description = description;
  const [apiResponse] = await table.setMetadata(metadata);
  const newDescription = apiResponse.description;

  console.log(`${tableId} description: ${newDescription}`);
}

Python

Pour mettre à jour la description d'une vue, vous devez suivre la même procédure que pour mettre à jour celle d'une table.

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Python.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

# from google.cloud import bigquery
# client = bigquery.Client()
# project = client.project
# dataset_ref = bigquery.DatasetReference(project, dataset_id)
# table_ref = dataset_ref.table('my_table')
# table = client.get_table(table_ref)  # API request

assert table.description == "Original description."
table.description = "Updated description."

table = client.update_table(table, ["description"])  # API request

assert table.description == "Updated description."

Copier des vues

Vous pouvez copier une vue à l'aide de la console Google Cloud.

L'outil de ligne de commande bq, l'API REST et les bibliothèques clientes ne permettent pas de copier une vue, mais vous pouvez copier une vue dans l'ensemble de données cible.

Autorisations requises

Pour copier une vue dans la console Google Cloud, vous devez disposer d'autorisations IAM sur les ensembles de données source et de destination.

  • Vous avez besoin des éléments suivants sur l'ensemble de données source :

    • bigquery.tables.get
    • bigquery.tables.getData (obligatoire pour accéder aux tables référencées par la requête SQL de la vue)
  • Vous avez besoin des éléments suivants sur l'ensemble de données de destination :

    • bigquery.tables.create (vous permet de créer une copie de la vue dans l'ensemble de données de destination)

Chacun des rôles IAM prédéfinis suivants inclut les autorisations dont vous avez besoin pour copier une vue :

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

En outre, si vous disposez de l'autorisation bigquery.datasets.create, vous pouvez copier des vues dans les ensembles de données que vous créez. Vous devez également accéder à l'ensemble de données de destination, sauf si vous l'avez créé.

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

Copier une vue

Pour copier une vue, procédez comme suit :

  1. Dans le panneau Explorateur, développez votre projet et votre ensemble de données, puis sélectionnez la vue.

  2. Dans le panneau de détails, cliquez sur Copier une vue.

  3. Dans la boîte de dialogue Copy view (Copier la vue) :

    • Dans la section Source, vérifiez que les champs Project name (Nom du projet), Dataset name (Nom de l'ensemble de données) et Table name (Nom de la table) sont corrects.
    • Dans la section Destination :

      • Dans Project name (Nom du projet), choisissez le projet dans lequel vous souhaitez copier la vue.
      • Dans Dataset name (Nom de l'ensemble de données), choisissez l'ensemble de données qui contiendra la vue copiée.
      • Dans Table name (Nom de la table), saisissez le nom de la vue. Vous pouvez renommer la vue en saisissant un nouveau nom dans le champ de saisie. Si vous décidez de saisir un nouveau nom, celui-ci doit respecter les règles de dénomination des vues.

      Boîte de dialogue Copy view (Copier la vue)

    • Cliquez sur Copier.

Les limites des jobs de copie s'appliquent. Pour en savoir plus, consultez la page Quotas et limites.

Renommer une vue

Actuellement, vous ne pouvez renommer une vue que si vous la copiez à l'aide de la console Google Cloud. Pour découvrir comment renommer une vue au moment de la copie, reportez-vous à la section Copier une vue.

L'outil de ligne de commande bq, l'API ou les bibliothèques clientes ne permettent pas de modifier le nom d'une vue existante. À la place, vous devez recréer la vue avec le nouveau nom.

Supprimer des vues

Vous pouvez supprimer une vue à l'aide des méthodes suivantes :

  • En utilisant la console Google Cloud
  • En utilisant la commande bq rm de l'outil de ligne de commande bq
  • En appelant la méthode API tables.delete

Actuellement, quelle que soit la méthode utilisée, vous ne pouvez supprimer qu'une vue à la fois.

Pour supprimer automatiquement des vues après une période donnée, définissez le délai d'expiration par défaut au niveau de l'ensemble de données ou spécifiez le délai d'expiration au moment où vous créez les vues.

Lorsque vous supprimez une vue autorisée, un délai de 24 heures peut être nécessaire pour que la vue supprimée soit supprimée de la liste des vues autorisées de l'ensemble de données source.

La suppression d'une vue supprime également toutes les autorisations associées à cette vue. Lorsque vous recréez une vue supprimée, vous devez également reconfigurer manuellement les autorisations d'accès qui lui sont associées.

Autorisations requises

Pour supprimer une vue, vous avez besoin des autorisations IAM suivantes :

  • bigquery.tables.delete

Chacun des rôles IAM prédéfinis suivants inclut les autorisations dont vous avez besoin pour supprimer une vue :

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

En outre, si vous disposez de l'autorisation bigquery.datasets.create, vous pouvez supprimer des vues dans les ensembles de données que vous créez.

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

Supprimer une vue

Pour supprimer une vue :

Console

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

    Accéder à BigQuery

  2. Dans le panneau Explorateur, développez votre projet et votre ensemble de données, puis sélectionnez la vue.

  3. Dans le panneau de détails, cliquez sur Supprimer la vue.

  4. Saisissez "delete" dans la boîte de dialogue et cliquez sur Supprimer pour confirmer.

SQL

Utilisez l'instruction LDD DROP VIEW :

  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 :

    DROP VIEW mydataset.myview;

    Remplacez les éléments suivants :

    • DATASET_ID : ID de l'ensemble de données contenant la vue.
    • MY_VIEW : nom de la vue à mettre à jour.
    • NEW_DESCRIPTION : description de la nouvelle vue

  3. Cliquez sur Exécuter.

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

bq

Exécutez la commande bq rm avec l'option --table (ou le raccourci -t) pour supprimer une table. Lorsque vous supprimez une vue à l'aide de l'outil de ligne de commande bq, vous devez confirmer l'action. Vous pouvez utiliser l'indicateur --force (ou le raccourci -f) pour ignorer la confirmation.

Si la vue se trouve dans un ensemble de données d'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 rm \
-f \
-t \
project_id:dataset.view

Où :

  • project_id est l'ID de votre projet.
  • dataset est le nom de l'ensemble de données contenant la table.
  • view est le nom de la vue que vous supprimez.

Exemples :

Vous pouvez utiliser l'outil de ligne de commande bq pour exécuter des commandes bq.

Dans la console Google Cloud, activez Cloud Shell :

Activer Cloud Shell

Saisissez la commande suivante pour supprimer myview de mydataset. mydataset se trouve dans votre projet par défaut.

bq rm -t mydataset.myview

Saisissez la commande suivante pour supprimer myview de mydataset. mydataset se trouve dans myotherproject, et non dans votre projet par défaut.

bq rm -t myotherproject:mydataset.myview

Saisissez la commande suivante pour supprimer myview de mydataset. mydataset se trouve dans votre projet par défaut. La commande utilise le raccourci -f pour contourner la confirmation.

bq rm -f -t mydataset.myview

API

Appelez la méthode API tables.delete et spécifiez la vue à supprimer à l'aide du paramètre tableId.

C#

Avant d'essayer cet exemple, suivez les instructions de configuration pour C# du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour C#.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.


using Google.Cloud.BigQuery.V2;
using System;

public class BigQueryDeleteTable
{
    public void DeleteTable(
        string projectId = "your-project-id",
        string datasetId = "your_dataset_id",
        string tableId = "your_table_id"
    )
    {
        BigQueryClient client = BigQueryClient.Create(projectId);
        client.DeleteTable(datasetId, tableId);
        Console.WriteLine($"Table {tableId} deleted.");
    }
}

Go

Avant d'essayer cet exemple, suivez les instructions de configuration pour Go du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Go.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

import (
	"context"
	"fmt"

	"cloud.google.com/go/bigquery"
)

// deleteTable demonstrates deletion of a BigQuery table.
func deleteTable(projectID, datasetID, tableID string) error {
	// projectID := "my-project-id"
	// datasetID := "mydataset"
	// tableID := "mytable"
	ctx := context.Background()
	client, err := bigquery.NewClient(ctx, projectID)
	if err != nil {
		return fmt.Errorf("bigquery.NewClient: %v", err)
	}
	defer client.Close()

	table := client.Dataset(datasetID).Table(tableID)
	if err := table.Delete(ctx); err != nil {
		return err
	}
	return nil
}

Java

Avant d'essayer cet exemple, suivez les instructions de configuration pour Java du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Java.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

TableId tableId = TableId.of(projectId, datasetName, tableName);
boolean deleted = bigquery.delete(tableId);
if (deleted) {
  // the table was deleted
} else {
  // the table was not found
}

Node.js

Avant d'essayer cet exemple, suivez les instructions de configuration pour Node.js du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Node.js.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

// Import the Google Cloud client library
const {BigQuery} = require('@google-cloud/bigquery');
const bigquery = new BigQuery();

async function deleteTable() {
  // Deletes "my_table" from "my_dataset".

  /**
   * TODO(developer): Uncomment the following lines before running the sample.
   */
  // const datasetId = "my_dataset";
  // const tableId = "my_table";

  // Delete the table
  await bigquery
    .dataset(datasetId)
    .table(tableId)
    .delete();

  console.log(`Table ${tableId} deleted.`);
}

PHP

Avant d'essayer cet exemple, suivez les instructions de configuration pour PHP du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour PHP.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

use Google\Cloud\BigQuery\BigQueryClient;

/** Uncomment and populate these variables in your code */
// $projectId = 'The Google project ID';
// $datasetId = 'The BigQuery dataset ID';
// $tableId = 'The BigQuery table ID';

$bigQuery = new BigQueryClient([
    'projectId' => $projectId,
]);
$dataset = $bigQuery->dataset($datasetId);
$table = $dataset->table($tableId);
$table->delete();
printf('Deleted table %s.%s' . PHP_EOL, $datasetId, $tableId);

Python

Avant d'essayer cet exemple, suivez les instructions de configuration pour Python du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Python.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.


from google.cloud import bigquery

# Construct a BigQuery client object.
client = bigquery.Client()

# TODO(developer): Set table_id to the ID of the table to fetch.
# table_id = 'your-project.your_dataset.your_table'

# If the table does not exist, delete_table raises
# google.api_core.exceptions.NotFound unless not_found_ok is True.
client.delete_table(table_id, not_found_ok=True)  # Make an API request.
print("Deleted table '{}'.".format(table_id))

Ruby

Avant d'essayer cet exemple, suivez les instructions de configuration pour Ruby du guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API BigQuery pour Ruby.

Pour vous authentifier auprès de BigQuery, configurez le service Identifiants par défaut de l'application. Pour en savoir plus, consultez la page Configurer l'authentification pour les bibliothèques clientes.

require "google/cloud/bigquery"

def delete_table dataset_id = "my_dataset_id", table_id = "my_table_id"
  bigquery = Google::Cloud::Bigquery.new
  dataset  = bigquery.dataset dataset_id
  table    = dataset.table table_id

  table.delete

  puts "Table #{table_id} deleted."
end

Restaurer une vue

Vous ne pouvez pas restaurer directement une vue supprimée, mais il existe des solutions de contournement pour certains scénarios:

  • Si une vue est supprimée en raison de la suppression de l'ensemble de données parent, vous pouvez annuler la suppression de l'ensemble de données pour récupérer la vue.
  • Si une vue est supprimée explicitement, vous pouvez la recréer à l'aide de la dernière requête utilisée pour la créer ou la mettre à jour. Vous pouvez trouver la définition de la requête de l'opération de création ou de mise à jour de la vue dans les journaux.

Afficher la sécurité

Pour contrôler l'accès aux vues dans BigQuery, consultez la page Vues autorisées.

Étapes suivantes