Créer une vue autorisée

BigQuery est un entrepôt de données analytiques opérant à l'échelle du pétaoctet, qui vous permet d'exécuter des requêtes SQL en quasi-temps réel portant sur de grandes quantités de données.

La création d'une vue autorisée dans BigQuery consiste à permettre à une vue d'accéder à un ensemble de données. Une vue autorisée vous permet de partager des résultats de requête avec des utilisateurs et des groupes particuliers sans leur donner accès aux tables sous-jacentes. Vous pouvez également utiliser la requête SQL de la vue pour limiter les colonnes (champs) que les utilisateurs peuvent interroger. Dans ce tutoriel, vous allez créer une vue autorisée.

Objectifs

Dans ce tutoriel, vous allez :

  • Créer des ensembles de données et leur appliquer des contrôles d'accès
  • Attribuer des contrôles d'accès à votre projet
  • Créer une vue autorisée restreignant les données que les utilisateurs peuvent interroger

Coûts

BigQuery est un produit payant. Des coûts d'utilisation vous seront donc facturés dans le cadre de ce tutoriel. Selon la tarification des requêtes BigQuery, le premier To par mois est gratuit. Pour en savoir plus, consultez la page Tarifs.

Avant de commencer

Avant de commencer ce tutoriel, utilisez la console Google Cloud Platform pour créer ou sélectionner un projet et activer la facturation.

  1. Connectez-vous à votre compte Google.

    Si vous n'en possédez pas déjà un, vous devez en créer un.

  2. Sélectionnez ou créez un projet Google Cloud Platform.

    Accéder à la page "Gérer les ressources"

  3. Assurez-vous que la facturation est activée pour votre projet Google Cloud Platform.

    Découvrir comment activer la facturation

  4. BigQuery est automatiquement activé dans les nouveaux projets. Pour activer BigQuery dans un projet préexistant, Activez BigQueryl'API requise.

    Activer l'API.

Présentation

Dans ce tutoriel, vous créez deux ensembles de données : un pour les données sources et un pour la vue autorisée. Vous remplissez l'ensemble de données source avec des données provenant de l'ensemble de données public GitHub. Vous créez ensuite une vue qui interroge une table de l'ensemble de données source.

Une fois les ensembles de données et la vue créés, vous attribuez des contrôles d'accès au projet, à l'ensemble de données contenant la vue et à celui qui contient les données sources.

En permettant à une vue d'accéder à l'ensemble de données source, vous créez une vue autorisée. La procédure de création d'une vue autorisée comprend les étapes suivantes :

  • Créer un ensemble de données distinct pour stocker la vue
  • Créer la vue dans le nouvel ensemble de données
  • Attribuer des contrôles d'accès au projet
  • Attribuer des contrôles d'accès à l'ensemble de données contenant la vue
  • Autoriser la vue à accéder à l'ensemble de données source

Créer un ensemble de données source

Commencez par créer un ensemble de données pour y stocker les données sources. Pour ce tutoriel, vous allez remplir une table de votre ensemble de données source en interrogeant l'ensemble de données public GitHub. Votre ensemble de données source contient des informations que les analystes de données ne doivent pas voir. Vous utilisez donc une vue autorisée pour restreindre l'accès aux données.

Pour créer votre ensemble de données source :

Console

  1. Ouvrez l'UI Web de BigQuery dans la console GCP.
    Accéder à la console GCP

  2. Dans le panneau de navigation, dans la section Ressources, sélectionnez votre projet et cliquez sur Créer un ensemble de données.

  3. Dans le champ ID de l'ensemble de données, saisissez github_source_data.

  4. Ne modifiez aucun autre paramètre par défaut et cliquez sur Créer un ensemble de données.

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 relatif à l'utilisation des 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()
source_dataset_id = 'github_source_data'

source_dataset = bigquery.Dataset(client.dataset(source_dataset_id))
# Specify the geographic location where the dataset should reside.
source_dataset.location = 'US'
source_dataset = client.create_dataset(source_dataset)  # API request

Une fois l'ensemble de données source créé, remplissez une table via une requête SQL. Cette requête extrait des données de l'ensemble de données public GitHub.

Console

  1. Ouvrez l'UI Web de BigQuery dans la console GCP.
    Accéder à la console GCP

  2. Cliquez sur Saisir une nouvelle requête.

  3. Copiez et collez la requête suivante dans la zone de texte de l'éditeur de requête.

    SELECT
      commit,
      author,
      committer,
      repo_name
    FROM
      `bigquery-public-data.github_repos.commits`
    LIMIT
      1000
    
  4. Cliquez sur Plus et sélectionnez Paramètres de requête.

  5. Pour le champ Destination, cochez la case Définir une table de destination pour les résultats de la requête.

    • Pour le champ Nom du projet, vérifiez que votre projet est sélectionné.
    • Pour le champ Nom de l'ensemble de données, vérifiez que github_source_data est sélectionné.
    • Dans le champ Nom de la table, saisissez github_contributors.
    • Cliquez sur Enregistrer.

  6. Cliquez sur Exécuter.

  7. Une fois la requête exécutée, cliquez sur github_contributors puis sur Aperçu pour vérifier que les données ont bien été écrites dans la table.

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 relatif à l'utilisation des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API BigQuery Python.

source_table_id = 'github_contributors'
job_config = bigquery.QueryJobConfig()
job_config.destination = source_dataset.table(source_table_id)
sql = """
    SELECT commit, author, committer, repo_name
    FROM `bigquery-public-data.github_repos.commits`
    LIMIT 1000
"""
query_job = client.query(
    sql,
    # Location must match that of the dataset(s) referenced in the query
    # and of the destination table.
    location='US',
    job_config=job_config)  # API request - starts the query

query_job.result()  # Waits for the query to finish

Créer un ensemble de données distinct pour stocker la vue

Après avoir créé votre ensemble de données source, créez un nouvel ensemble de données afin d'y stocker la vue que vous partagerez avec vos analystes de données. Cette vue aura accès aux données de l'ensemble de données source. Vos analystes de données pourront accéder à la vue, mais pas aux données sources.

La vue que vous créez doit être placée dans un ensemble de données distinct de celui qui contient les données sources interrogées par la vue. Vous ne pouvez affecter des contrôles d'accès qu'au niveau de l'ensemble de données. Par conséquent, si la vue est créée dans le même ensemble de données que les données sources, vos analystes de données auront accès aux données aussi bien qu'à la vue.

Pour créer un ensemble de données dans lequel stocker votre vue :

Console

  1. Ouvrez l'UI Web de BigQuery dans la console GCP.
    Accéder à la console GCP

  2. Dans le panneau de navigation, dans la section Ressources, sélectionnez votre projet et cliquez sur Créer un ensemble de données.

  3. Dans le champ ID de l'ensemble de données, saisissez shared_views.

  4. Ne modifiez aucun autre paramètre par défaut et cliquez sur Créer un ensemble de données.

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 relatif à l'utilisation des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API BigQuery Python.

shared_dataset_id = 'shared_views'
shared_dataset = bigquery.Dataset(client.dataset(shared_dataset_id))
shared_dataset.location = 'US'
shared_dataset = client.create_dataset(shared_dataset)  # API request

Créer la vue dans le nouvel ensemble de données

Dans le nouvel ensemble de données, créez la vue que vous souhaitez autoriser. Il s'agit de la vue que vous partagerez avec vos analystes de données. Cette vue est créée à l'aide d'une requête SQL qui exclut les colonnes que les analystes de données ne doivent pas voir.

Pour ce tutoriel, votre vue partagée exclut toutes les informations relatives à l'auteur excepté son nom, de même que toutes les informations relatives au validateur excepté son nom.

Pour créer cette vue dans le nouvel ensemble de données :

Console

  1. Ouvrez l'UI Web de BigQuery dans la console GCP.
    Accéder à la console GCP

  2. Cliquez sur Saisir une nouvelle requête.

  3. Copiez et collez la requête suivante dans la zone de texte de l'éditeur de requête. Remplacez project_id par l'ID de votre projet.

    SELECT
      commit,
      author.name as author,
      committer.name as committer,
      repo_name
    FROM
      `project_id.github_source_data.github_contributors`
    
  4. Cliquez sur Plus et sélectionnez Paramètres de requête.

  5. Pour le champ Dialecte SQL, sélectionnez Standard. Cliquez sur Enregistrer pour mettre à jour les paramètres de la requête.

  6. Cliquez sur Enregistrer la vue.

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

    • Pour le champ Nom du projet, vérifiez que votre projet est sélectionné.
    • Pour le champ Nom de l'ensemble de données, vérifiez que shared_views est sélectionné.
    • Dans le champ Nom de la table, saisissez github_analyst_view.
    • Cliquez sur Save.

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 relatif à l'utilisation des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API BigQuery Python.

shared_view_id = 'github_analyst_view'
view = bigquery.Table(shared_dataset.table(shared_view_id))
sql_template = """
    SELECT
        commit, author.name as author,
        committer.name as committer, repo_name
    FROM
        `{}.{}.{}`
"""
view.view_query = sql_template.format(
    client.project, source_dataset_id, source_table_id)
view = client.create_table(view)  # API request

Attribuer un rôle Cloud IAM au niveau du projet à vos analystes de données

Pour interroger la vue, vos analystes de données doivent être autorisés à exécuter des tâches de requête. Le rôle bigquery.user inclut les autorisations requises pour effectuer des tâches au sein du projet, y compris des tâches de requête. Si vous attribuez à un utilisateur ou à un groupe d'utilisateurs le rôle bigquery.user au niveau du projet, chacun de ces utilisateurs pourra créer des ensembles de données et exécuter des tâches de requête sur les tables de ces ensembles de données. Le rôle bigquery.user n'autorise pas un utilisateur à interroger les données, à afficher les données des tables ni à consulter les détails des schémas de table pour les ensembles de données qu'il n'a pas créés.

Le fait d'attribuer le rôle bigquery.user au niveau du projet à vos analystes de données n'autorise pas ces derniers à afficher ou interroger les données des tables qui se trouvent dans l'ensemble de données contenant les tables interrogées par la vue. Il est recommandé d'attribuer le rôle bigquery.user au niveau du projet à la plupart des collaborateurs d'une entreprise (data scientists, analystes de veille stratégique et analystes de données).

Pour ce tutoriel, vos analystes de données font partie d'un groupe d'utilisateurs nommé data_analysts@example.com. Ce nom de groupe n'est fourni qu'à titre d'exemple. Lorsque vous ajoutez un groupe à un rôle IAM, l'adresse de messagerie et le domaine doivent être associés à un compte Google ou Google Apps actif.

Pour attribuer au groupe d'analystes de données le rôle bigquery.user au niveau du projet, procédez comme suit :

Console

  1. Ouvrez la page "IAM" dans la console Google Cloud Platform.

    Ouvrir la page IAM

  2. Cliquez sur Sélectionner un projet.

  3. Sélectionnez votre projet, puis cliquez sur Ouvrir.

  4. Sur la page IAM, cliquez sur Ajouter.

  5. Dans la boîte de dialogue Ajouter des membres :

    • Dans le champ Membres, saisissez le nom du groupe : data_analysts@example.com.
    • Pour le champ Rôles, cliquez sur Sélectionner un rôle et choisissez BigQuery > Utilisateur BigQuery.
    • Cliquez sur Ajouter.

Attribuer des contrôles d'accès à l'ensemble de données contenant la vue

Pour que vos analystes de données puissent interroger la vue, ils doivent disposer du rôle bigquery.dataViewer sur l'ensemble de données contenant la vue. Le rôle bigquery.user accorde à vos analystes les autorisations requises pour créer des requêtes, mais ne leur permet pas d'interroger la vue, sauf s'ils disposent, tout au moins, d'un accès bigquery.dataViewer à l'ensemble de données qui la contient.

Pour accorder à vos analystes de données l'accès bigquery.dataViewer à l'ensemble de données, procédez comme suit :

Console

  1. Dans la section Ressources, sélectionnez l'ensemble de données shared_views, puis cliquez sur Partager l'ensemble de données.

  2. Dans le panneau Autorisations d'ensemble de données, cliquez sur Ajouter des membres.

  3. Saisissez data_analysts@example.com dans la zone de texte Nouveaux membres.

  4. Cliquez sur Sélectionner un rôle et sélectionnez BigQuery > Lecteur de données BigQuery.

  5. Cliquez sur OK.

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 relatif à l'utilisation des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API BigQuery Python.

# analyst_group_email = 'data_analysts@example.com'
access_entries = shared_dataset.access_entries
access_entries.append(
    bigquery.AccessEntry('READER', 'groupByEmail', analyst_group_email)
)
shared_dataset.access_entries = access_entries
shared_dataset = client.update_dataset(
    shared_dataset, ['access_entries'])  # API request

Autoriser la vue à accéder à l'ensemble de données source

Une fois que vous avez créé des contrôles d'accès pour l'ensemble de données contenant la vue, ajoutez la vue en tant que vue autorisée dans l'ensemble de données source. Les données sources seront ainsi accessibles à cette vue, mais pas à votre groupe d'analystes de données.

Pour autoriser la vue à accéder aux données source :

Console

  1. Sélectionnez l'ensemble de données github_source_data dans Ressources et cliquez sur Partager l'ensemble de données.

  2. Dans le panneau Autorisations d'ensemble de données, cliquez sur l'onglet Vues autorisées.

  3. Sous Partager la vue autorisée :

    • Pour le champ Sélectionner un projet, vérifiez que votre projet est sélectionné.
    • Pour le champ Sélectionner un ensemble de données, choisissez shared_views.
    • Pour le champ Sélectionner une vue, saisissez le nom de la vue : github_analyst_view.
    • Cliquez sur OK.

  4. Cliquez sur Ajouter, puis sur OK.

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 relatif à l'utilisation des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API BigQuery Python.

access_entries = source_dataset.access_entries
access_entries.append(
    bigquery.AccessEntry(None, 'view', view.reference.to_api_repr())
)
source_dataset.access_entries = access_entries
source_dataset = client.update_dataset(
    source_dataset, ['access_entries'])  # API request

Vérifier la configuration

Une fois la configuration effectuée, un membre du groupe data_analysts peut vérifier celle-ci en interrogeant la vue.

Pour vérifier la configuration :

Console

  1. Demandez à un membre du groupe data_analysts d'accéder à l'interface utilisateur Web de BigQuery dans la console GCP.
    Accéder à la console GCP

  2. Cliquez sur Saisir une nouvelle requête.

  3. Copiez et collez la requête suivante dans la zone de texte de l'éditeur de requête.

    SELECT
      *
    FROM
      `shared_views.github_analyst_view`
    

Code source complet

Voici le code source complet du tutoriel à titre de référence.

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 relatif à l'utilisation des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API BigQuery Python.

# Create a source dataset
from google.cloud import bigquery

client = bigquery.Client()
source_dataset_id = 'github_source_data'

source_dataset = bigquery.Dataset(client.dataset(source_dataset_id))
# Specify the geographic location where the dataset should reside.
source_dataset.location = 'US'
source_dataset = client.create_dataset(source_dataset)  # API request

# Populate a source table
source_table_id = 'github_contributors'
job_config = bigquery.QueryJobConfig()
job_config.destination = source_dataset.table(source_table_id)
sql = """
    SELECT commit, author, committer, repo_name
    FROM `bigquery-public-data.github_repos.commits`
    LIMIT 1000
"""
query_job = client.query(
    sql,
    # Location must match that of the dataset(s) referenced in the query
    # and of the destination table.
    location='US',
    job_config=job_config)  # API request - starts the query

query_job.result()  # Waits for the query to finish

# Create a separate dataset to store your view
shared_dataset_id = 'shared_views'
shared_dataset = bigquery.Dataset(client.dataset(shared_dataset_id))
shared_dataset.location = 'US'
shared_dataset = client.create_dataset(shared_dataset)  # API request

# Create the view in the new dataset
shared_view_id = 'github_analyst_view'
view = bigquery.Table(shared_dataset.table(shared_view_id))
sql_template = """
    SELECT
        commit, author.name as author,
        committer.name as committer, repo_name
    FROM
        `{}.{}.{}`
"""
view.view_query = sql_template.format(
    client.project, source_dataset_id, source_table_id)
view = client.create_table(view)  # API request

# Assign access controls to the dataset containing the view
# analyst_group_email = 'data_analysts@example.com'
access_entries = shared_dataset.access_entries
access_entries.append(
    bigquery.AccessEntry('READER', 'groupByEmail', analyst_group_email)
)
shared_dataset.access_entries = access_entries
shared_dataset = client.update_dataset(
    shared_dataset, ['access_entries'])  # API request

# Authorize the view to access the source dataset
access_entries = source_dataset.access_entries
access_entries.append(
    bigquery.AccessEntry(None, 'view', view.reference.to_api_repr())
)
source_dataset.access_entries = access_entries
source_dataset = client.update_dataset(
    source_dataset, ['access_entries'])  # API request

Effectuer un nettoyage

Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud Platform :

  1. Dans la console GCP, accédez à la page "Projets".

    Accéder à la page Projets

  2. Dans la liste des projets, sélectionnez celui que vous souhaitez supprimer, puis cliquez sur Supprimer.
  3. Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.

Étapes suivantes

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

Envoyer des commentaires concernant…