Créer une vue autorisée


Dans ce tutoriel, vous allez créer une vue autorisée dans BigQuery utilisée par vos analystes de données. Les vues autorisées vous permettent de partager des résultats de requête avec des utilisateurs et des groupes particuliers sans leur donner accès aux données sources sous-jacentes. L'accès aux données sources est accordé à la vue, et non à un utilisateur ou à un groupe. Vous pouvez également utiliser la requête SQL de la vue pour exclure des colonnes et des champs des résultats de la requête.

Une autre approche consiste à configurer des contrôles d'accès au niveau des colonnes sur les données sources, puis à accorder à vos utilisateurs l'accès à une vue qui interroge les données contrôlées. Pour en savoir plus sur les contrôles d'accès au niveau des colonnes, consultez la page Présentation du contrôle des accès au niveau des colonnes.

Si plusieurs vues autorisées accèdent au même ensemble de données source, vous pouvez autoriser l'ensemble de données qui les contient au lieu d'autoriser une vue individuelle.

Objectifs

  • Créez un ensemble de données contenant vos données sources.
  • Exécutez une requête pour charger des données dans une table de destination de l'ensemble de données source.
  • Créez un ensemble de données pour contenir votre vue autorisée.
  • Créez une vue autorisée à partir d'une requête SQL qui limite les colonnes que vos analystes de données peuvent voir dans les résultats de la requête.
  • Accordez à vos analystes de données l'autorisation d'exécuter des tâches de requête.
  • Accordez à vos analystes de données l'accès à l'ensemble de données contenant la vue autorisée.
  • Accordez à la vue autorisée l'accès à l'ensemble de données source.

Coûts

Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :

Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût. Les nouveaux utilisateurs de Google Cloud peuvent bénéficier d'un essai gratuit.

Une fois que vous avez terminé les tâches décrites dans ce document, vous pouvez éviter de continuer à payer des frais en supprimant les ressources que vous avez créées. Pour en savoir plus, consultez la section Effectuer un nettoyage.

Avant de commencer

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  4. Make sure that billing is enabled for your Google Cloud project.

  5. Enable the BigQuery API.

    Enable the API

  6. Assurez-vous de disposer des autorisations nécessaires pour effectuer les tâches décrites dans ce document.

Rôles requis

Si vous créez un projet, vous en êtes le propriétaire et vous disposez de toutes les autorisations IAM requises pour suivre ce tutoriel.

Si vous utilisez un projet existant, vous avez besoin du rôle suivant.

Make sure that you have the following role or roles on the project:

Check for the roles

  1. In the Google Cloud console, go to the IAM page.

    Go to IAM
  2. Select the project.
  3. In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.

  4. For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.

Grant the roles

  1. In the Google Cloud console, go to the IAM page.

    Accéder à IAM
  2. Sélectionnez le projet.
  3. Cliquez sur Accorder l'accès.
  4. Dans le champ Nouveaux comptes principaux, saisissez votre identifiant utilisateur. Il s'agit généralement de l'adresse e-mail d'un compte Google.

  5. Dans la liste Sélectionner un rôle, sélectionnez un rôle.
  6. Pour attribuer des rôles supplémentaires, cliquez sur Ajouter un autre rôle et ajoutez chaque rôle supplémentaire.
  7. Cliquez sur Enregistrer.
  8. Pour en savoir plus sur les rôles dans BigQuery, consultez la section Rôles IAM prédéfinis.

    Autorisations requises

    Pour créer les ressources utilisées dans ce tutoriel, vous devez disposer des autorisations suivantes. Le rôle prédéfini Administrateur BigQuery Studio accorde toutes ces autorisations.

    • bigquery.datasets.create pour créer l'ensemble de données source et celui qui contient la vue autorisée.
    • bigquery.tables.create pour créer la table qui stocke les données sources et pour créer la vue autorisée.
    • bigquery.jobs.create pour exécuter la tâche de requête qui charge les données dans la table source.
    • bigquery.datasets.getIamPolicy et bigquery.datasets.get pour obtenir des autorisations IAM pour l'ensemble de données source et l'ensemble de données contenant la vue autorisée.
    • bigquery.datasets.setIamPolicy et bigquery.datasets.update pour mettre à jour les autorisations IAM de l'ensemble de données source et de l'ensemble de données contenant la vue autorisée.

    Pour en savoir plus sur les autorisations IAM dans BigQuery, consultez la page Autorisations BigQuery.

Créer un ensemble de données pour stocker vos données sources

Commencez par créer un ensemble de données pour y stocker les données sources.

Pour créer votre ensemble de données source, choisissez l'une des options suivantes:

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le volet Explorer, à côté du projet dans lequel vous souhaitez créer l'ensemble de données, cliquez sur Afficher les actions > Créer un ensemble de données.

  3. Sur la page Créer un ensemble de données, procédez comme suit :

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

    2. Dans le champ Type d'emplacement, vérifiez que l'option Multirégional est sélectionnée.

    3. Pour Multirégional, sélectionnez États-Unis ou UE. Toutes les ressources que vous créez dans ce tutoriel doivent se trouver dans la même zone multirégionale.

    4. Cliquez sur Créer un ensemble de données.

SQL

Utilisez l'instruction LDD CREATE SCHEMA :

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

    Accéder à BigQuery Studio

  2. Dans l'éditeur de requête, saisissez l'instruction suivante :

    CREATE SCHEMA github_source_data;

  3. Cliquez sur Exécuter.

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

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.

// Create a source dataset to store your table.
Dataset sourceDataset = bigquery.create(DatasetInfo.of(sourceDatasetId));

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()
source_dataset_id = "github_source_data"
source_dataset_id_full = "{}.{}".format(client.project, source_dataset_id)


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

Créer une table et charger vos données sources

Une fois l'ensemble de données source créé, vous remplissez une table en enregistrant les résultats d'une requête SQL dans une table de destination. La requête extrait des données de l'ensemble de données public GitHub.

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans Query editor (éditeur de requête), saisissez la requête suivante :

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

  4. Destination : sélectionnez Définir une table de destination pour les résultats de la requête.

  5. Dans le champ Ensemble de données, saisissez PROJECT_ID.github_source_data.

    Remplacez PROJECT_ID par l'ID du projet.

  6. Dans le champ ID de table, saisissez github_contributors.

  7. Cliquez sur Enregistrer.

  8. Cliquez sur Exécuter.

  9. Une fois la requête terminée, dans le volet Explorer, développez github_source_data, puis cliquez sur github_contributors.

  10. Pour vérifier que les données ont bien été écrites dans la table, cliquez sur l'onglet Aperçu.

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.

// Populate a source table
String tableQuery =
    "SELECT commit, author, committer, repo_name"
        + " FROM `bigquery-public-data.github_repos.commits`"
        + " LIMIT 1000";
QueryJobConfiguration queryConfig =
    QueryJobConfiguration.newBuilder(tableQuery)
        .setDestinationTable(TableId.of(sourceDatasetId, sourceTableId))
        .build();
bigquery.query(queryConfig);

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.

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 pour stocker votre vue autorisée

Après avoir créé votre ensemble de données source, vous allez créer un ensemble de données distinct pour stocker la vue autorisée que vous partagerez avec vos analystes de données. Plus tard, vous accorderez à la vue autorisée l'accès aux données de l'ensemble de données source. Vos analystes de données pourront accéder à la vue autorisée, mais pas aux données sources.

Les vues autorisées doivent être créées dans un ensemble de données différent de celui des données sources. De cette façon, les propriétaires de données peuvent autoriser les utilisateurs à accéder à la vue autorisée sans accorder simultanément l'accès aux données sous-jacentes. L'ensemble de données des données source et l'ensemble de données de la vue autorisée doivent se trouver dans le même emplacement régional.

Pour créer un ensemble de données dans lequel stocker votre vue, choisissez l'une des options suivantes:

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le panneau Explorer, sélectionnez le projet dans lequel vous souhaitez créer l'ensemble de données.

  3. Développez l'option Afficher les actions, puis cliquez sur Créer un ensemble de données.

  4. Sur la page Créer un ensemble de données, procédez comme suit :

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

    2. Dans le champ Type d'emplacement, vérifiez que l'option Multirégional est sélectionnée.

    3. Pour Multirégional, sélectionnez États-Unis ou UE. Toutes les ressources que vous créez dans ce tutoriel doivent se trouver dans la même zone multirégionale.

    4. Cliquez sur Créer un ensemble de données.

SQL

Utilisez l'instruction LDD CREATE SCHEMA :

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

    Accéder à BigQuery Studio

  2. Dans l'éditeur de requête, saisissez l'instruction suivante :

    CREATE SCHEMA shared_views;

  3. Cliquez sur Exécuter.

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

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.

// Create a separate dataset to store your view
Dataset sharedDataset = bigquery.create(DatasetInfo.of(sharedDatasetId));

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.

shared_dataset_id = "shared_views"
shared_dataset_id_full = "{}.{}".format(client.project, shared_dataset_id)


shared_dataset = bigquery.Dataset(shared_dataset_id_full)
shared_dataset.location = "US"
shared_dataset = client.create_dataset(shared_dataset)  # API request

Créer la vue autorisée 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.

La table source github_contributors contient deux champs de type RECORD : author et committer. Pour ce tutoriel, votre vue autorisée exclut toutes les données de l'auteur, à l'exception de son nom, et toutes les données du validateur, à l'exception de son nom.

Pour créer cette vue dans le nouvel ensemble de données, choisissez l'une des options suivantes:

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, saisissez la requête suivante.

    SELECT
    commit,
    author.name AS author,
    committer.name AS committer,
    repo_name
    FROM
    `PROJECT_ID.github_source_data.github_contributors`;

    Remplacez PROJECT_ID par l'ID du projet.

  3. Cliquez sur Enregistrer > Enregistrer la vue.

  4. Dans la boîte de dialogue Enregistrer la vue, procédez comme suit:

    1. Pour le champ Projet, vérifiez que votre projet est sélectionné.

    2. Dans le champ Ensemble de données, saisissez shared_views.

    3. Pour Table, saisissez github_analyst_view.

    4. Cliquez sur Enregistrer.

SQL

Utilisez l'instruction LDD CREATE VIEW :

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

    Accéder à BigQuery Studio

  2. Dans l'éditeur de requête, saisissez l'instruction suivante :

    CREATE VIEW shared_views.github_analyst_view
    AS (
      SELECT
        commit,
        author.name AS author,
        committer.name AS committer,
        repo_name
      FROM
        `PROJECT_ID.github_source_data.github_contributors`
    );

    Remplacez PROJECT_ID par l'ID du projet.

  3. Cliquez sur Exécuter.

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

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.

// Create the view in the new dataset
String viewQuery =
    String.format(
        "SELECT commit, author.name as author, committer.name as committer, repo_name FROM %s.%s.%s",
        projectId, sourceDatasetId, sourceTableId);

ViewDefinition viewDefinition = ViewDefinition.of(viewQuery);

Table view =
    bigquery.create(TableInfo.of(TableId.of(sharedDatasetId, sharedViewId), viewDefinition));

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.

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

Accorder à vos analystes de données l'autorisation d'exécuter des tâches de requête

Pour interroger la vue, vos analystes de données doivent disposer de l'autorisation bigquery.jobs.create afin de pouvoir exécuter des tâches de requête. Le rôle bigquery.studioUser inclut l'autorisation bigquery.jobs.create. Le rôle bigquery.studioUser n'autorise pas les utilisateurs à afficher ni à interroger la vue autorisée. Plus tard, vous accorderez à vos analystes de données l'autorisation d'accéder à la vue.

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

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

    Accéder à IAM

  2. Assurez-vous que votre projet est sélectionné dans le sélecteur de projet.

  3. Cliquez sur Accorder l'accès.

  4. Dans la boîte de dialogue Accorder l'accès à, procédez comme suit:

    1. Dans le champ Nouveaux comptes principaux, saisissez le groupe contenant vos analystes de données. Exemple :data_analysts@example.com

    2. Dans le champ Sélectionner un rôle, recherchez le rôle Utilisateur BigQuery Studio et sélectionnez-le.

    3. Cliquez sur Enregistrer.

Accorder à vos analystes de données l'autorisation d'interroger la vue autorisée

Pour que vos analystes de données puissent interroger la vue, ils doivent disposer du rôle bigquery.dataViewer au niveau de l'ensemble de données ou de la vue. Accorder ce rôle au niveau de l'ensemble de données permet à vos analystes d'accéder à toutes les tables et vues de l'ensemble de données. Étant donné que l'ensemble de données créé dans ce tutoriel ne contient qu'une seule vue autorisée, vous accordez l'accès au niveau de l'ensemble de données. Si vous avez un ensemble de vues autorisées auxquelles vous devez accorder l'accès, envisagez plutôt d'utiliser un ensemble de données autorisé.

Le rôle bigquery.studioUser que vous avez précédemment accordé à vos analystes de données leur donne les autorisations requises pour créer des tâches de requête. Toutefois, ils ne peuvent pas interroger la vue, sauf s'ils disposent également d'un accès bigquery.dataViewer à la vue autorisée ou à 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 contenant la vue autorisée, procédez comme suit:

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le volet Explorateur, sélectionnez l'ensemble de données shared_views.

  3. Cliquez sur Partage > Autorisations.

  4. Dans le volet Autorisations de partage, cliquez sur Ajouter un compte principal.

  5. Pour Nouveaux comptes principaux, saisissez le groupe contenant vos analystes de données (par exemple, data_analysts@example.com).

  6. Cliquez sur Sélectionner un rôle, puis sélectionnez BigQuery > Lecteur de données BigQuery.

  7. Cliquez sur Enregistrer.

  8. Cliquez sur Fermer.

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.

// Assign access controls to the dataset containing the view
List<Acl> viewAcl = new ArrayList<>(sharedDataset.getAcl());
viewAcl.add(Acl.of(new Acl.Group("example-analyst-group@google.com"), Acl.Role.READER));
sharedDataset.toBuilder().setAcl(viewAcl).build().update();

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.

# 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

Après avoir créé des contrôles d'accès pour l'ensemble de données contenant la vue autorisée, vous accordez à la vue autorisée l'accès à l'ensemble de données source. Cette autorisation permet à la vue, mais pas à votre groupe d'analystes de données, d'accéder aux données sources.

Pour accorder à la vue autorisée l'accès aux données source, choisissez l'une des options suivantes:

Console

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans le volet Explorateur, sélectionnez l'ensemble de données github_source_data.

  3. Cliquez sur Partage > Autoriser les vues.

  4. Dans le volet Vues autorisées, saisissez PROJECT_ID.shared_views.github_analyst_view pour Vue autorisée.

    Remplacez PROJECT_ID par l'ID du projet.

  5. Cliquez sur Ajouter une autorisation.

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.

// Authorize the view to access the source dataset
List<Acl> srcAcl = new ArrayList<>(sourceDataset.getAcl());
srcAcl.add(Acl.of(new Acl.View(view.getTableId())));
sourceDataset.toBuilder().setAcl(srcAcl).build().update();

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.

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 de votre groupe d'analystes de données (par exemple, data_analysts) peut la vérifier en interrogeant la vue.

Pour vérifier la configuration, un analyste de données doit exécuter la requête suivante:

  1. Accédez à la page BigQuery.

    Accéder à BigQuery

  2. Dans l'éditeur de requête, saisissez l'instruction suivante :

    SELECT
      *
    FROM
      `PROJECT_ID.shared_views.github_analyst_view`;

    Remplacez PROJECT_ID par l'ID du projet.

  3. Cliquez sur Exécuter.

Les résultats de la requête sont semblables aux suivants. Seuls le nom de l'auteur et le nom du contributeur sont visibles dans les résultats.

Résultats de la requête après avoir interrogé la vue autorisée

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

Code source complet

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

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.

// Create a source dataset to store your table.
Dataset sourceDataset = bigquery.create(DatasetInfo.of(sourceDatasetId));

// Populate a source table
String tableQuery =
    "SELECT commit, author, committer, repo_name"
        + " FROM `bigquery-public-data.github_repos.commits`"
        + " LIMIT 1000";
QueryJobConfiguration queryConfig =
    QueryJobConfiguration.newBuilder(tableQuery)
        .setDestinationTable(TableId.of(sourceDatasetId, sourceTableId))
        .build();
bigquery.query(queryConfig);

// Create a separate dataset to store your view
Dataset sharedDataset = bigquery.create(DatasetInfo.of(sharedDatasetId));

// Create the view in the new dataset
String viewQuery =
    String.format(
        "SELECT commit, author.name as author, committer.name as committer, repo_name FROM %s.%s.%s",
        projectId, sourceDatasetId, sourceTableId);

ViewDefinition viewDefinition = ViewDefinition.of(viewQuery);

Table view =
    bigquery.create(TableInfo.of(TableId.of(sharedDatasetId, sharedViewId), viewDefinition));

// Assign access controls to the dataset containing the view
List<Acl> viewAcl = new ArrayList<>(sharedDataset.getAcl());
viewAcl.add(Acl.of(new Acl.Group("example-analyst-group@google.com"), Acl.Role.READER));
sharedDataset.toBuilder().setAcl(viewAcl).build().update();

// Authorize the view to access the source dataset
List<Acl> srcAcl = new ArrayList<>(sourceDataset.getAcl());
srcAcl.add(Acl.of(new Acl.View(view.getTableId())));
sourceDataset.toBuilder().setAcl(srcAcl).build().update();

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.

# Create a source dataset
from google.cloud import bigquery

client = bigquery.Client()
source_dataset_id = "github_source_data"
source_dataset_id_full = "{}.{}".format(client.project, source_dataset_id)


source_dataset = bigquery.Dataset(source_dataset_id_full)
# 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_id_full = "{}.{}".format(client.project, shared_dataset_id)


shared_dataset = bigquery.Dataset(shared_dataset_id_full)
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, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.

Supprimer le projet

Console

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

gcloud

    Delete a Google Cloud project:

    gcloud projects delete PROJECT_ID

Supprimer des ressources individuelles

Vous pouvez également supprimer les ressources individuelles utilisées dans ce tutoriel:

  1. Supprimez la vue autorisée.

  2. Supprimez l'ensemble de données contenant la vue autorisée.

  3. Supprimez la table dans l'ensemble de données source.

  4. Supprimez l'ensemble de données source.

Étant donné que vous avez créé les ressources utilisées dans ce tutoriel, aucune autorisation supplémentaire n'est requise pour les supprimer.

Étape suivante