Créer des vues

Ce document explique comment créer des vues dans BigQuery.

Vous pouvez créer une vue dans BigQuery :

  • en utilisant la console GCP ou l'interface utilisateur Web classique de BigQuery ;
  • en utilisant la commande bq mk de l'outil de ligne de commande ;
  • en appelant la méthode API tables.insert ;
  • en soumettant une instruction LDD (langage de définition de données) CREATE VIEW.

Dénomination des vues

Lorsque vous créez une vue dans BigQuery, son nom doit être unique pour chaque ensemble de données. Le nom de la vue peut :

  • contenir jusqu'à 1 024 caractères ;
  • contenir des lettres (majuscules ou minuscules), des chiffres et des traits de soulignement.

Limites associées aux vues

Les vues BigQuery font l'objet des limites suivantes :

  • L'ensemble de données contenant la vue et celui contenant les tables référencées par celle-ci doivent se trouver dans le même emplacement.
  • Vous ne pouvez pas exécuter une tâche BigQuery qui exporte des données à partir d'une vue.
  • Vous ne pouvez pas utiliser la méthode API JSON TableDataList pour extraire des données d'une vue. Pour en savoir plus, consultez la page relative à la méthode Tabledata : list.
  • Lorsque vous utilisez des vues, vous ne pouvez pas combiner des requêtes en SQL standard et en ancien SQL. Une requête en SQL standard ne peut pas référencer une vue définie à l'aide d'une syntaxe en ancien SQL.
  • Les schémas des tables sous-jacentes sont stockés avec la vue lors de la création de celle-ci. Si des colonnes sont par exemple ajoutées ou supprimées après la création de la vue, le schéma indiqué sera inexact jusqu'à ce que la vue soit mise à jour. Même avec un schéma inexact, toutes les requêtes soumises produisent des résultats corrects.
  • Vous ne pouvez pas mettre à jour automatiquement une vue en ancien SQL vers la syntaxe SQL standard. Pour modifier la requête utilisée pour définir une vue, utilisez l'option Modifier la requête dans la console ou l'UI Web classique de BigQuery, servez-vous de la commande CLI bq update --view, ou utilisez les méthodes API update ou patch.
  • Vous ne pouvez pas inclure de fonction définie par l'utilisateur dans la requête SQL qui définit une vue.
  • Vous ne pouvez pas référencer de vue dans une requête de table générique.

Pour plus d'informations sur les quotas et les limites applicables aux vues, consultez la section Limites associées aux vues.

Autorisations requises

Les vues sont traitées comme des ressources de table dans BigQuery. Par conséquent, la création d'une vue nécessite les mêmes autorisations que la création d'une table. Pour créer une vue, vous devez disposer d'un accès WRITER au niveau de l'ensemble de données ou bien d'un rôle IAM au niveau du projet qui inclut les autorisations bigquery.tables.create. Les rôles IAM prédéfinis au niveau du projet incluent les autorisations bigquery.tables.create :

En outre, étant donné que le rôle bigquery.user dispose des autorisations bigquery.datasets.create, un utilisateur dont le rôle est bigquery.user peut créer des vues dans tous les ensembles de données créés par des utilisateurs. Lorsqu'un utilisateur détenant le rôle bigquery.user crée un ensemble de données, il bénéficie d'un accès OWNER à celui-ci. L'accès OWNER à un ensemble de données confère à l'utilisateur un contrôle total sur celui-ci, et sur toutes les tables et les vues qu'il contient.

Pour en savoir plus sur les autorisations et les rôles IAM dans BigQuery, consultez la page Contrôle des accès. Pour en savoir plus sur les rôles au niveau de l'ensemble de données, consultez la section Rôles primitifs pour les ensembles de données.

Créer une vue

Vous pouvez créer une vue en saisissant une requête SQL utilisée pour définir les données accessibles à la vue.

Dans la requête SQL standard utilisée pour créer une vue, vous devez inclure l'ID de projet dans les références de table et de vue sous la forme `[PROJECT_ID].[DATASET].[TABLE]`. Le langage SQL standard nécessite des ID de projet explicites pour éviter toute ambiguïté lorsque les vues sont interrogées à partir de différents projets.

Pour créer une vue :

Console

  1. Après avoir exécuté une requête, pour enregistrer celle-ci en tant que vue, cliquez sur le bouton Save view (Enregistrer l'affichage) qui figure au-dessus de la fenêtre des résultats de la requête.

    Enregistrer l'affichage

  2. Dans la boîte de dialogue Enregistrer l'affichage :

    • Comme Nom du projet, sélectionnez le projet qui servira à stocker la vue.
    • Pour Nom de l'ensemble de données, choisissez l'ensemble de données qui contiendra la vue. L'ensemble de données contenant la vue et celui contenant les tables référencées par celle-ci doivent se trouver dans le même emplacement.
    • Dans Nom de la table, saisissez le nom de la vue.
    • Cliquez sur Enregistrer.

UI classique

  1. Après avoir exécuté une requête, cliquez sur le bouton Enregistrer la vue dans la fenêtre des résultats de la requête pour enregistrer la requête en tant que vue.

    Enregistrer l'affichage

  2. Dans la boîte de dialogue Enregistrer la vue :

    • Pour le champ Projet, sélectionnez le projet dans lequel la vue sera stockée.
    • Pour le champ Ensemble de données, choisissez l'ensemble de données qui contiendra la vue. L'ensemble de données contenant la vue et celui contenant les tables référencées par celle-ci doivent se trouver dans le même emplacement.
    • Pour l'ID de la table, saisissez le nom de la vue.
    • Cliquez sur OK.

Ligne de commande

Utilisez la commande mk avec l'indicateur --view. Pour les requêtes SQL standard, ajoutez l'indicateur --use_legacy_sql et définissez-le sur false. Les paramètres facultatifs incluent --expiration, --description et --label.

Si votre requête fait référence à des ressources externes de fonction définie par l'utilisateur stockées dans Google Cloud Storage ou dans des fichiers locaux, spécifiez ces ressources à l'aide de l'indicateur --view_udf_resource. L'indicateur --view_udf_resource n'est pas présenté 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 SQL standard.

Si vous créez une vue dans un projet autre que votre projet par défaut, spécifiez l'ID du projet en utilisant l'indicateur --project_id.

bq mk --use_legacy_sql=false --view_udf_resource=[PATH_TO_FILE] --expiration [INTEGER] --description "[DESCRIPTION]" --label [KEY:VALUE, KEY:VALUE] --view '[QUERY]' --project_id [PROJECT_ID] [DATASET].[VIEW]

Où :

  • [PATH_TO_FILE] est le 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'indicateur pour spécifier plusieurs fichiers.
  • [INTEGER] est la durée de vie par défaut (en secondes) de la vue. La valeur minimale est de 3 600 secondes (une heure). Le délai d'expiration correspond à l'heure actuelle plus la valeur entière. Si vous définissez le délai d'expiration lorsque vous créez une vue, le paramètre d'expiration de la table par défaut de l'ensemble de données est ignoré.
  • [DESCRIPTION] est la description du libellé.
  • [KEY:VALUE] est la paire clé/valeur qui représente un libellé. Vous pouvez entrer plusieurs libellés en utilisant une liste séparée par des virgules.
  • [QUERY] est une requête valide. Pour les vues SQL standards, la requête doit inclure l'ID de projet dans les références de table et de vue sous la forme `[PROJECT_ID].[DATASET].[TABLE]`.
  • [PROJECT_ID] est l'ID de votre projet (si vous n'avez pas configuré de projet par défaut).
  • [DATASET] est un ensemble de données dans votre projet.
  • [VIEW] est le nom de la vue que vous souhaitez créer.

Exemples :

Entrez la commande suivante pour créer une vue partitionnée nommée myview dans mydataset au sein de votre projet par défaut. L'heure d'expiration est définie sur 3 600 secondes (une heure), la description est définie sur This is my view et le libellé est défini sur organization:development. La requête utilisée pour créer la vue interroge les données de l'ensemble de données public Données sur les noms aux États-Unis.

bq mk --use_legacy_sql=false --expiration 3600 --description "This is my view" --label organization:development --view 'SELECT name,number FROM `bigquery-public-data.usa_names.usa_1910_current` WHERE gender = "M" ORDER BY number DESC' mydataset.myview

Entrez la commande suivante pour créer une vue nommée myview dans mydataset au sein de myotherproject. L'heure d'expiration est définie sur 3 600 secondes (une heure), la description est définie sur This is my view et le libellé est défini sur organization:development. La requête utilisée pour créer la vue interroge les données de l'ensemble de données public Données sur les noms aux États-Unis.

bq mk --use_legacy_sql=false --expiration 3600 --description "This is my view" --label organization:development --view 'SELECT name,number FROM `bigquery-public-data.usa_names.usa_1910_current` WHERE gender = "M" ORDER BY number DESC' --project_id myotherproject mydataset.myview

Une fois la vue créée, vous pouvez mettre à jour son délai d'expiration, sa description et ses libellés. Pour en savoir plus, consultez la page Mettre à jour les propriétés d'une vue.

API

Appelez la méthode tables.insert avec une ressource de table contenant une propriété view.

Go

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Go décrite dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API BigQuery Go.

// To run this sample, you will need to create (or reuse) a context and
// an instance of the bigquery client.  For example:
// import "cloud.google.com/go/bigquery"
// ctx := context.Background()
// client, err := bigquery.NewClient(ctx, "your-project-id")
meta := &bigquery.TableMetadata{
	// This example shows how to create a view of the shakespeare sample dataset, which
	// provides word frequency information.  This view restricts the results to only contain
	// results for works that contain the "king" in the title, e.g. King Lear, King Henry V, etc.
	ViewQuery: "SELECT word, word_count, corpus, corpus_date FROM `bigquery-public-data.samples.shakespeare` WHERE corpus LIKE '%king%'",
}
if err := client.Dataset(datasetID).Table(tableID).Create(ctx, meta); err != nil {
	return err
}

Python

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Python décrite dans le guide de démarrage rapide de BigQuery : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API BigQuery Python.

# from google.cloud import bigquery
# client = bigquery.Client()
# project = 'my-project'
# source_dataset_id = 'my_source_dataset'
# source_table_id = 'us_states'
# shared_dataset_ref = client.dataset('my_shared_dataset')

# This example shows how to create a shared view of a source table of
# US States. The source table contains all 50 states, while the view will
# contain only states with names starting with 'W'.
view_ref = shared_dataset_ref.table("my_shared_view")
view = bigquery.Table(view_ref)
sql_template = 'SELECT name, post_abbr FROM `{}.{}.{}` WHERE name LIKE "W%"'
view.view_query = sql_template.format(project, source_dataset_id, source_table_id)
view = client.create_table(view)  # API request

print("Successfully created view at {}".format(view.full_table_id))

Une fois la vue créée, vous l'interrogez de la même manière qu'une table.

Étapes suivantes

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Besoin d'aide ? Consultez notre page d'assistance.