Créer une vue autorisée


BigQuery est un entrepôt de données analytiques à l'échelle du pétaoctet que vous pouvez utiliser pour exécuter des requêtes SQL sur de grandes quantités de données, presque en temps réel.

En créant une vue autorisée dans BigQuery, vous permettez à cette 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

Ce guide vous explique comment effectuer les tâches suivantes :

  • 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. BigQuery offre des ressources gratuites jusqu'à une limite spécifique. Pour en savoir plus, consultez la section Opérations et versions gratuites de BigQuery.

Avant de commencer

Avant de commencer ce tutoriel, créez ou sélectionnez un projet à l'aide de Google Cloud Console.

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  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. BigQuery est automatiquement activé dans les nouveaux projets. Pour activer BigQuery dans un projet préexistant, accédez à

    Activez l'API BigQuery

    Activer l'API

    .
  5. Facultatif : Activez la facturation pour le projet. Les étapes décrites dans ce document demeurent valables, même si vous ne souhaitez pas activer la facturation ou fournir une carte de crédit. BigQuery fournit un bac à sable permettant d'accomplir les étapes. Pour en savoir plus, consultez la page Activer le bac à sable BigQuery.

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. L'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. Dans la console Google Cloud, ouvrez la page "BigQuery".

    Accéder à BigQuery

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

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

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

  5. Ne modifiez aucun autre paramètre par défaut et 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.

    Accéder à BigQuery

  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

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. Dans la console Google Cloud, ouvrez la page "BigQuery".

    Accéder à BigQuery

  2. Copiez et collez la requête suivante dans le volet Éditeur.

    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 Dataset, saisissez PROJECT_ID.github_source_data. Remplacez PROJECT_ID par l'ID de votre 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 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.

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 dans lequel stocker la vue

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 :

Console

  1. Dans la console Google Cloud, ouvrez 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 Actions, puis cliquez sur Créer un ensemble de données.

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

  5. Ne modifiez aucun autre paramètre par défaut et 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.

    Accéder à BigQuery

  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 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.

Dans ce tutoriel, votre vue partagée exclut les informations de l'auteur excepté son nom, ainsi que celles du validateur excepté son nom.

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

Console

  1. Dans la console Google Cloud, ouvrez la page "BigQuery".

    Accéder à BigQuery

  2. Copiez et collez la requête suivante dans le volet Éditeur. Remplacez PROJECT_ID par l'ID du projet.

    SELECT
      commit,
      author.name AS author,
      committer.name AS committer,
      repo_name
    FROM
      `PROJECT_ID.github_source_data.github_contributors`;
    
  3. Cliquez sur Enregistrer > Enregistrer la vue.

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

    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.

    Accéder à BigQuery

  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

Attribuer un rôle 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 fournit des autorisations permettant d'exécuter des tâches, y compris des requêtes, dans le projet. 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. Le rôle bigquery.user ne permet pas non plus aux utilisateurs de mettre à jour vos vues. Il est recommandé d'attribuer le rôle bigquery.user au niveau du projet à la plupart des collaborateurs d'une entreprise (data scientists, analystes d'informatique décisionnelle et analystes de données).

Lorsque vous ajoutez un groupe à un rôle IAM, l'adresse e-mail 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 Google Cloud Console.

    Ouvrir la page IAM

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

  3. Cliquez sur Accorder l'accès.

  4. Dans la boîte de dialogue Accorder l'accès à :

    1. Dans la zone Comptes principaux, saisissez le groupe contenant vos analystes de données (par exemple, data_analysts@example.com).
    2. Dans la case Sélectionner un rôle, recherchez le rôle Utilisateur BigQuery et sélectionnez-le.
    3. Cliquez sur Enregistrer.

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 tâches de requête. Cependant, ils ne peuvent pas interroger la vue, sauf s'ils disposent également 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 :

Console

  1. Dans la console Google Cloud, ouvrez 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, cliquez sur Ajouter un compte principal.

  5. Dans la zone 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 et 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

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. Cette autorisation permet à la vue, mais pas à votre groupe d'analystes de données, d'accéder aux données sources.

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

Console

  1. Dans la console Google Cloud, ouvrez 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, puis sélectionnez Autoriser les vues.

  4. Dans le volet Vues autorisées qui s'affiche, saisissez la vue github_analyst_view dans le champ Vues autorisées.

  5. Cliquez sur Ajouter une autorisation.

La vue github_analyst_view est maintenant autorisée à accéder aux données de l'ensemble de données source.

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 :

SQL

Demandez à un membre de votre groupe d'analystes de données d'effectuer les opérations suivantes :

  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 :

    SELECT
      *
    FROM
      `PROJECT_ID.shared_views.github_analyst_view`;
    

    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.

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.

  1. Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  2. Dans la liste des projets, sélectionnez le projet 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.

Étape suivante