Aller au contenu principal

Google BigQuery

Cet article décrit comment lire et écrire dans des tables Google BigQuery dans Databricks.

info

Expérimental

La documentation sur la fédération des query héritées a été retirée et pourrait ne pas être mise à jour. Les configurations mentionnées dans ce contenu ne sont ni officiellement approuvées ni testées par Databricks. Si la Lakehouse Federation prend en charge votre base de données source, Databricks recommande d'utiliser cette dernière.

Vous devez vous connecter à BigQuery à l'aide d'une authentification par clé.

Autorisations

Vos projets doivent avoir des autorisations Google spécifiques pour lire et écrire en utilisant BigQuery.

remarque

Cet article traite des vues matérialisées BigQuery. Pour plus de détails, consultez l'article Google Introduction aux vues matérialisées. Pour en savoir plus sur la terminologie et le modèle de sécurité de 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 du projet Google Cloud à partir duquel Databricks lit ou écrit la table BigQuery.
  • Projet parent (parentProject) : L'ID du projet parent, qui est l'ID du projet Google Cloud pour la facturation des lectures et des écritures. Définissez cette valeur sur le projet Google Cloud associé au compte de service Google pour lequel vous allez générer des clés.

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

Python
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 dépendent du fait que project et parentProject soient identiques. Les sections suivantes listent les autorisations requises pour chaque scénario.

Autorisations requises si project et parentProject correspondent

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

Tâche Databricks

Autorisations Google requises dans le projet

Lire une table BigQuery sans vue matérialisée

Dans le cadre du projet project :

  • Utilisateur de session de lecture BigQuery
  • BigQuery Data Viewer (Possibilité d'accorder cette autorisation au niveau du dataset/de la table plutôt qu'au niveau du projet)

Lisez une table BigQuery avec vue matérialisée

Dans le cadre du projet project :

  • Utilisateur BigQuery Job
  • Utilisateur de session de lecture BigQuery
  • BigQuery Data Viewer (Possibilité d'accorder cette autorisation au niveau du dataset/de la table plutôt qu'au niveau du projet)

Dans le projet de matérialisation :

  • Éditeur de données BigQuery

Écrire une table BigQuery

Dans le cadre du projet project :

  • Utilisateur BigQuery Job
  • Éditeur de données BigQuery

Tâche Databricks

Autorisations Google requises dans le projet

Lire une table BigQuery sans vue matérialisée

Dans le cadre du projet project :

  • Utilisateur de session de lecture BigQuery
  • BigQuery Data Viewer (Possibilité d'accorder cette autorisation au niveau du dataset/de la table plutôt qu'au niveau du projet)

Lisez une table BigQuery avec vue matérialisée

Dans le cadre du projet project :

  • Utilisateur BigQuery Job
  • Utilisateur de session de lecture BigQuery
  • BigQuery Data Viewer (Possibilité d'accorder cette autorisation au niveau du dataset/de la table plutôt qu'au niveau du projet)

Dans le projet de matérialisation :

  • Éditeur de données BigQuery

Écrire une table BigQuery

Dans le cadre du projet project :

  • Utilisateur BigQuery Job
  • Éditeur de données BigQuery

Autorisations requises si project et parentProject sont différents

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

Tâche Databricks

Autorisations Google requises

Lire une table BigQuery sans vue matérialisée

Dans le cadre du projet parentProject :

  • Utilisateur de session de lecture BigQuery

Dans le cadre du projet project :

  • BigQuery Data Viewer (Possibilité d'accorder cette autorisation au niveau du dataset/de la table plutôt qu'au niveau du projet)

Lisez une table BigQuery avec vue matérialisée

Dans le cadre du projet parentProject :

  • Utilisateur de session de lecture BigQuery
  • Utilisateur BigQuery Job

Dans le cadre du projet project :

  • BigQuery Data Viewer (Possibilité d'accorder cette autorisation au niveau du dataset/de la table plutôt qu'au niveau du projet)

Dans le projet de matérialisation :

  • Éditeur de données BigQuery

Écrire une table BigQuery

Dans le cadre du projet parentProject :

  • Utilisateur BigQuery Job

Dans le cadre du projet project :

  • Éditeur de données BigQuery

Tâche Databricks

Autorisations Google requises

Lire une table BigQuery sans vue matérialisée

Dans le cadre du projet parentProject :

  • Utilisateur de session de lecture BigQuery

Dans le cadre du projet project :

  • BigQuery Data Viewer (Possibilité d'accorder cette autorisation au niveau du dataset/de la table plutôt qu'au niveau du projet)

Lisez une table BigQuery avec vue matérialisée

Dans le cadre du projet parentProject :

  • Utilisateur de session de lecture BigQuery
  • Utilisateur BigQuery Job

Dans le cadre du projet project :

  • BigQuery Data Viewer (Possibilité d'accorder cette autorisation au niveau du dataset/de la table plutôt qu'au niveau du projet)

Dans le projet de matérialisation :

  • Éditeur de données BigQuery

Écrire une table BigQuery

Dans le cadre du projet parentProject :

  • Utilisateur BigQuery Job

Dans le cadre du 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 default dans les nouveaux projets Google Cloud où BigQuery est activé. Cependant, si vous avez un projet existant et que l'API BigQuery Storage n'est pas activée, suivez les étapes de cette section pour l'activer.

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

Activer l'API BigQuery Storage à l'aide de Google Cloud CLI

Bash
gcloud services enable bigquerystorage.googleapis.com

Activez l'API BigQuery Storage à l'aide de Google Cloud Console

  1. Cliquez sur APIs & Services dans le volet de navigation de gauche.

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

    Services Google activés

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

    Stockage Google BigQuery

  4. Assurez-vous que l'API BigQuery Storage est activée.

    Google BigQuery

Créer un compte de service Google pour Databricks

Créez un compte de service pour le cluster Databricks. Databricks recommande d'accorder à ce compte de service le moins de privilèges nécessaires pour effectuer ses tâches. Consultez les rôles et autorisations BigQuery.

Vous pouvez créer un compte de service à l’aide de l’interface de ligne de commande Google Cloud ou de la console Google Cloud.

Créez un compte de service Google à l'aide de Google Cloud CLI

Bash
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éez un compte de service Google à l'aide de Google Cloud Console

Pour créer le compte :

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

  2. Cliquez sur Comptes de service .

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

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

    Compte de Service Principal Google

  5. Cliquez sur « CREATE ».

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

    Autorisations Google

  7. Cliquez sur **CONTINUER**.

  8. Cliquez sur OK .

Pour créer des clés pour 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 Créer . Le fichier de clé JSON est download sur votre ordinateur.

important

Le fichier de 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 datasets et aux Ressources dans votre compte Google Cloud.

Créez un bucket Google Cloud Storage (GCS) pour le stockage temporaire

Pour écrire des données dans BigQuery, la source de données a besoin d'accéder à un compartiment GCS.

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

  2. Cliquez sur CRÉER UN BUCKET .

    Google Créer un compartiment

  3. Configurez les détails du compartiment.

    Détails du compartiment Google

  4. Cliquez sur « CREATE ».

  5. Cliquez sur l'onglet Permissions 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 : Configurez 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 en Base64 votre fichier de clé JSON. Pour des raisons de sécurité, n'utilisez pas d'outil Web ou distant qui pourrait accéder à vos clés.

Lorsque vous configurez votre cluster:

Dans le tab **Spark Config**, ajoutez la configuration Spark suivante. Remplacez <base64-keys> par la chaîne de votre fichier de clé JSON encodé en Base64. Remplacez les autres éléments entre crochets (tels que <client-email>) par les valeurs de ces champs de votre fichier de clés JSON.

ini
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 bucket que vous avez créé dans Créer un bucket Google Cloud Storage (GCS) pour le stockage temporaire. Consultez Autorisations pour en savoir plus sur les exigences des valeurs <project-id> et <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 gérée dans Databricks qui lira les données directement depuis BigQuery :

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

Notebook d'exemple Python Google BigQuery

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

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

Exemple de Notebook Scala Google BigQuery