Partager via


Google BigQuery

Cet article explique comment lire et écrire dans des tables Google BigQuery dans Azure Databricks.

Important

Les configurations décrites dans cet article sont Expérimentales. Les fonctionnalités expérimentales sont fournies en l’état et ne sont pas prises en charge par Databricks via le support technique client. Pour bénéficier d’une prise en charge complète de la fédération de requêtes, vous devez plutôt utiliser Lakehouse Federation, qui permet à vos utilisateurs Azure Databricks de profiter de la syntaxe Unity Catalog et des outils de gouvernance des données.

Vous devez vous connecter à BigQuery à l’aide de l’authentification basée sur des clés.

Autorisations

Vos projets doivent disposer d’autorisations Google spécifiques pour lire et écrire à l’aide de BigQuery.

Notes

Cet article parle des vues matérialisées BigQuery. Pour plus d’informations, consultez l’article Google Présentation des vues matérialisées. Pour découvrir d’autres terminologies BigQuery et le modèle de sécurité BigQuery, consultez la documentation Google BigQuery.

La lecture et l’écriture de données avec BigQuery dépendent de deux projets Google Cloud :

  • Projet (project) : l’ID pour le projet Google Cloud à partir duquel Azure Databricks lit ou écrit la table BigQuery.
  • Projet parent (parentProject) : l’ID du projet parent, qui est l’ID de projet Google Cloud à facturer pour la lecture et l’écriture. Définissez ce paramètre sur le projet Google Cloud associé au compte de service Google pour lequel vous allez générer des clés.

Vous devez fournir explicitement les valeurs project et parentProject dans le code qui accède à BigQuery. Utilisez un code similaire à ce qui suit :

spark.read.format("bigquery") \
  .option("table", table) \
  .option("project", <project-id>) \
  .option("parentProject", <parent-project-id>) \
  .load()

Les autorisations requises pour les projets Google Cloud varient selon si project et parentProject sont identiques ou non. Les sections suivantes répertorient les autorisations requises pour chaque scénario.

Autorisations requises si project et parentProject correspondent

Si les ID de votre project et parentProject sont identiques, utilisez le tableau suivant pour déterminer les autorisations minimales :

Tâche Azure Databricks Autorisations Google requises dans le projet
Lire une table BigQuery sans vue matérialisée Dans le projet project :

- Utilisateur de session de lecture BigQuery
- Visionneuse de données BigQuery (éventuellement accorder cette autorisation au niveau du jeu de données/table au lieu du niveau du projet)
Lire une table BigQuery avec une vue matérialisée Dans le projet project :

- Utilisateur de la tâche BigQuery
- Utilisateur de session de lecture BigQuery
- Visionneuse de données BigQuery (éventuellement accorder cette autorisation au niveau du jeu de données/table au lieu du niveau du projet)

Dans le projet de matérialisation :

- Éditeur de données BigQuery
Écrire une table BigQuery Dans le projet project :

- Utilisateur de la tâche BigQuery
- Éditeur de données BigQuery

Autorisations requises si project et parentProject sont différents

Si les ID de votre project et parentProject sont différents, utilisez le tableau suivant pour déterminer les autorisations minimales :

Tâche Azure Databricks Autorisations Google nécessaires
Lire une table BigQuery sans vue matérialisée Dans le projet parentProject :

- Utilisateur de session de lecture BigQuery

Dans le projet project :

- Visionneuse de données BigQuery (éventuellement accorder cette autorisation au niveau du jeu de données/table au lieu du niveau du projet)
Lire une table BigQuery avec une vue matérialisée Dans le projet parentProject :

- Utilisateur de session de lecture BigQuery
- Utilisateur de la tâche BigQuery

Dans le projet project :

- Visionneuse de données BigQuery (éventuellement accorder cette autorisation au niveau du jeu de données/table au lieu du niveau du projet)

Dans le projet de matérialisation :

- Éditeur de données BigQuery
Écrire une table BigQuery Dans le projet parentProject :

- Utilisateur de la tâche BigQuery

Dans le projet project :

- Éditeur de données BigQuery

Étape 1 : Configurer Google Cloud

Activer l’API BigQuery Storage

L’API BigQuery Storage est activée par défaut dans les nouveaux projets Google Cloud dans lesquels BigQuery est activé. Toutefois, si vous avez un projet existant et que l’API BigQuery Storage n’est pas activée, suivez les étapes décrites dans cette section pour l’activer.

Vous pouvez activer l’API BigQuery Storage à l’aide de la CLI Google Cloud ou de Google Cloud Console.

Activer l’API BigQuery Storage à l’aide de la CLI Google Cloud

gcloud services enable bigquerystorage.googleapis.com

Activer l’API BigQuery Storage à l’aide de Google Cloud Console

  1. Dans le volet de navigation gauche, cliquez sur API et services.

  2. Cliquez sur le bouton ACTIVER LES API ET LES SERVICES.

    Google Enable Services

  3. Tapez bigquery storage api dans la barre de recherche et sélectionnez le premier résultat.

    Google BigQuery Storage

  4. Vérifiez que l’API BigQuery Storage est activée.

    Google BigQuery

Créer un compte de service Google pour Azure Databricks

Créez un compte de service pour le cluster Azure Databricks. Databricks recommande de donner à ce compte de service les privilèges minimum nécessaires pour effectuer ses tâches. Consultez Rôles et autorisations BigQuery.

Vous pouvez créer un compte de service à l’aide de la CLI Google Cloud ou de Google Cloud Console.

Créer un compte de service Google à l’aide de la CLI Google Cloud

gcloud iam service-accounts create <service-account-name>

gcloud projects add-iam-policy-binding <project-name> \
--role roles/bigquery.user \
--member="serviceAccount:<service-account-name>@<project-name>.iam.gserviceaccount.com"

gcloud projects add-iam-policy-binding <project-name> \
--role roles/bigquery.dataEditor \
--member="serviceAccount:<service-account-name>@<project-name>.iam.gserviceaccount.com"

Créez les clés de votre compte de service :

gcloud iam service-accounts keys create --iam-account \
"<service-account-name>@<project-name>.iam.gserviceaccount.com" \
<project-name>-xxxxxxxxxxx.json

Créer un compte de service Google à l’aide de Google Cloud Console

Pour créer le compte :

  1. Cliquez sur IAM et Administration dans le volet de navigation gauche.

  2. Cliquez sur Comptes de service.

  3. Cliquez sur + CRÉER UN COMPTE DE SERVICE.

  4. Entrez le nom et la description du compte de service.

    Créer un compte de service Google

  5. Cliquez sur CREATE (Créer).

  6. Spécifiez des rôles pour votre compte de service. Dans la liste déroulante Sélectionner un rôle, tapez BigQuery et ajoutez les rôles suivants :

    Autorisations Google

  7. Cliquez sur CONTINUE (Continuer).

  8. Cliquez sur TERMINÉ.

Pour créer les clés de votre compte de service :

  1. Dans la liste des comptes de service, cliquez sur votre compte nouvellement créé.

  2. Dans la section Clés, sélectionnez le bouton AJOUTER UNE CLÉ >Créer une nouvelle clé.

    Google créer une clé

  3. Acceptez le type de clé JSON.

  4. Cliquez sur CREATE (Créer). Le fichier clé JSON est téléchargé sur votre ordinateur.

    Important

    Le fichier clé JSON que vous générez pour le compte de service est une clé privée qui ne doit être partagée qu’avec les utilisateurs autorisés, car elle contrôle l’accès aux jeux de données et aux ressources de votre compte Google Cloud.

Créer un compartiment Google Cloud Storage (GCS) pour le stockage temporaire

Pour écrire des données dans BigQuery, la source de données doit accéder à un compartiment GCS.

  1. Cliquez sur Stockage dans le volet de navigation de gauche.

  2. Cliquez sur CRÉER UN COMPARTIMENT.

    Google créer un compartiment

  3. Configurez les détails du compartiment.

    Détails du compartiment Google

  4. Cliquez sur CREATE (Créer).

  5. Cliquez sur l’onglet Autorisations et Ajouter des membres.

  6. Fournissez les autorisations suivantes au compte de service sur le compartiment.

    Autorisations de compartiment Google

  7. Cliquez sur ENREGISTRER.

Étape 2 : configurer Azure Databricks

Pour configurer un cluster afin d’accéder aux tables BigQuery, vous devez fournir votre fichier de clé JSON comme configuration Spark. Utilisez un outil local pour encoder votre fichier de clé JSON en base64. Pour des raisons de sécurité, n’utilisez pas d’outil web ou distant qui pourraient accéder à vos clés.

Lorsque vous configurez votre cluster :

Sous l’onglet Configuration Spark, ajoutez les configurations Spark suivantes. Remplacez <base64-keys> par la chaîne de votre fichier de clé JSON codée en Base64. Remplacez les autres éléments entre crochets (comme <client-email>) par les valeurs de ces champs dans votre fichier de clé JSON.

credentials <base64-keys>

spark.hadoop.google.cloud.auth.service.account.enable true
spark.hadoop.fs.gs.auth.service.account.email <client-email>
spark.hadoop.fs.gs.project.id <project-id>
spark.hadoop.fs.gs.auth.service.account.private.key <private-key>
spark.hadoop.fs.gs.auth.service.account.private.key.id <private-key-id>

Lire et écrire dans une table BigQuery

Pour lire une table BigQuery, spécifiez

df = spark.read.format("bigquery") \
  .option("table",<table-name>) \
  .option("project", <project-id>)  \
  .option("parentProject", <parent-project-id>) \
  .load()

Pour écrire dans une table BigQuery, spécifiez

df.write.format("bigquery") \
  .mode("<mode>") \
  .option("temporaryGcsBucket", "<bucket-name>") \
  .option("table", <table-name>) \
  .option("project", <project-id>) \
  .option("parentProject", <parent-project-id>) \
  .save()

<bucket-name> est le nom du compartiment que vous avez créé dans Créer un compartiment Google Cloud Storage (GCS) pour le stockage temporaire. Consultez Autorisations pour en savoir plus sur les exigences relatives aux valeurs de <project-id> et de <parent-id>.

Créer une table externe à partir de BigQuery

Important

Cette fonctionnalité n’est pas prise en charge par Unity Catalog.

Vous pouvez déclarer une table non managée dans Databricks qui lit les données directement à partir de BigQuery :

CREATE TABLE chosen_dataset.test_table
USING bigquery
OPTIONS (
  parentProject 'gcp-parent-project-id',
  project 'gcp-project-id',
  temporaryGcsBucket 'some-gcp-bucket',
  materializationDataset 'some-bigquery-dataset',
  table 'some-bigquery-dataset.table-to-copy'
)

Exemple de notebook Python : Charger une table Google BigQuery dans un DataFrame

Le notebook Python suivant charge une table Google BigQuery dans un DataFrame Azure Databricks.

Exemple de notebook Python Google BigQuery

Obtenir le notebook

Exemple de notebook Scala : Charger une table Google BigQuery dans un DataFrame

Le notebook Scala suivant charge une table Google BigQuery dans un DataFrame Azure Databricks.

Exemple de notebook Scala Google BigQuery

Obtenir le notebook