Connexions BigQuery - AWS Glue

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Connexions BigQuery

Vous pouvez utiliser AWS Glue pour Spark pour lire et écrire dans des tables dans Google BigQuery dans AWS Glue 4.0 et versions ultérieures. Vous pouvez lire depuis BigQuery à l'aide d'une requête Google SQL. Vous vous connectez à BigQuery à l'aide des informations d'identification enregistrées dans AWS Secrets Manager via une connexion AWS Glue.

Pour plus d'informations sur Google BigQuery, consultez le site web de Google Cloud BigQuery.

Configurer des connexions BigQuery

Pour vous connecter à Google BigQuery depuis AWS Glue, vous devez créer et stocker vos informations d'identification Google Cloud Platform dans un secret AWS Secrets Manager, puis associer ce secret à une connexion Google BigQuery AWS Glue.

Pour configurer une connexion à BigQuery :
  1. Dans Google Cloud Platform, créez et identifiez les ressources pertinentes :

  2. Dans Google Cloud Platform, créez et exportez les informations d'identification du compte de service :

    Vous pouvez utiliser l'assistant relatif aux informations d'identification BigQuery pour accélérer l'étape de création des informations d'identification.

    Pour créer un compte de service dans GCP, suivez le didacticiel disponible dans la section Créer des comptes de service.

    • Lorsque vous sélectionnez un projet, choisissez celui qui contient votre table BigQuery.

    • Lorsque vous sélectionnez des rôles IAM GCP pour votre compte de service, ajoutez ou créez un rôle qui accordera les autorisations appropriées pour exécuter des tâches BigQuery afin de lire, écrire ou créer des tables BigQuery.

    Pour créer des informations d'identification pour votre compte de service, suivez le didacticiel disponible dans la section Créer une clé de compte de service.

    • Lorsque vous sélectionnez le type de clé, sélectionnez JSON.

    Vous devriez maintenant avoir téléchargé un fichier JSON contenant les informations d'identification de votre compte de service. Il doit ressembler à l'exemple ci-dessous.

    { "type": "service_account", "project_id": "*****", "private_key_id": "*****", "private_key": "*****", "client_email": "*****", "client_id": "*****", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "*****", "universe_domain": "googleapis.com" }
  3. Encodez en base64 le fichier d'informations d'identification que vous avez téléchargé. Lors d'une session AWS CloudShell ou similaire, vous pouvez le faire depuis la ligne de commande en exécutant cat credentialsFile.json | base64 -w 0. Conservez le résultat de cette commande, credentialString.

  4. DansAWS Secrets Manager, créez un secret à l'aide de vos informations d'identification de Google Cloud Platform. Pour créer un secret dans Secrets Manager, suivez le didacticiel disponible dans la section Créer un secret AWS Secrets Manager dans la documentation AWS Secrets Manager. Après avoir créé le secret, conservez le nom du secret, secretName, pour l'étape suivante.

    • Lorsque vous sélectionnez Paires clé/valeur, créez une paire pour la clé credentials avec la valeur credentialString.

  5. Dans le catalogue de données AWS Glue, créez une connexion en suivant les étapes décrites dans Ajouter une AWS Glue connexion. Après avoir créé la connexion, conservez le nom de la connexion, connectionName, pour l'étape suivante.

    • Lorsque vous sélectionnez un Type de connexion, sélectionnez Google BigQuery.

    • Lorsque vous sélectionnez un Secret AWS, fournissez secretName.

  6. Accordez au rôle IAM associé à votre tâche AWS Glue l'autorisation de lire secretName.

  7. Dans la configuration de votre tâche AWS Glue, indiquez connectionName en tant que connexion réseau supplémentaire.

Lire à partir de tables BigQuery

Prérequis :

  • Une table BigQuery à partir de laquelle vous souhaitez lire. Vous aurez besoin des noms de table et de jeux de données BigQuery sous la forme suivante : [dataset].[table]. Appelons-la tableName.

  • Le projet de facturation pour la table BigQuery. Vous aurez besoin du nom du projet, parentProject. S'il n'existe aucun projet parent de facturation, utilisez le projet contenant la table.

  • Les informations d'authentification BigQuery. Suivez les étapes de la section Pour gérer vos informations d'identification de connexion avec AWS Glue afin de configurer vos informations d'authentification. Vous aurez besoin du nom de la connexion AWS Glue, connectionName.

Par exemple :

bigquery_read = glueContext.create_dynamic_frame.from_options( connection_type="bigquery", connection_options={ "connectionName": "connectionName", "parentProject": "parentProject", "sourceType": "table", "table": "tableName", }

Vous pouvez également fournir une requête pour filtrer les résultats renvoyés à votre DynamicFrame. Vous devrez configurer query, sourceType, viewsEnabled et materializationDataset.

Par exemple :

Prérequis supplémentaires :

Vous devez créer ou identifier un jeu de données BigQuery, materializationDataset, dans lequel BigQuery peut écrire des vues matérialisées pour vos requêtes.

Vous devrez accorder les autorisations IAM GCP appropriées à votre compte de service pour créer des tables dans materializationDataset.

glueContext.create_dynamic_frame.from_options( connection_type="bigquery", connection_options={ "connectionName": "connectionName", "materializationDataset": materializationDataset, "parentProject": "parentProject", "viewsEnabled": "true", "sourceType": "query", "query": "select * from bqtest.test" } )

Écrire dans des tables BigQuery

Cet exemple écrit directement dans le service BigQuery. BigQuery prend également en charge la méthode d'écriture « indirecte ». Pour plus d'informations sur les écritures indirectes, consultez Utiliser l'écriture indirecte avec Google BigQuery.

Prérequis :

  • Une table BigQuery dans laquelle vous souhaitez écrire. Vous aurez besoin des noms de table et de jeux de données BigQuery sous la forme suivante : [dataset].[table]. Vous pouvez également fournir un nouveau nom de table qui sera automatiquement créé. Appelons-la tableName.

  • Le projet de facturation pour la table BigQuery. Vous aurez besoin du nom du projet, parentProject. S'il n'existe aucun projet parent de facturation, utilisez le projet contenant la table.

  • Les informations d'authentification BigQuery. Suivez les étapes de la section Pour gérer vos informations d'identification de connexion avec AWS Glue afin de configurer vos informations d'authentification. Vous aurez besoin du nom de la connexion AWS Glue, connectionName.

Par exemple :

bigquery_write = glueContext.write_dynamic_frame.from_options( frame=frameToWrite, connection_type="bigquery", connection_options={ "connectionName": "connectionName", "parentProject": "parentProject", "writeMethod": "direct", "table": "tableName", } )

Référence des options de connexion BigQuery

  • project : par défaut, le compte de service Google Cloud par défaut. Utilisé pour la lecture/l'écriture. Le nom d'un projet Google Cloud associé à votre table.

  • table : (obligatoire) utilisé pour la lecture/l'écriture. Le nom de votre table BigQuery au format [[project:]dataset.].

  • dataset : obligatoire lorsqu'il n'est pas défini par l'option table. Utilisé pour la lecture/l'écriture. Nom du jeu de données contenant votre table BigQuery.

  • parentProject : par défaut, le compte de service Google Cloud par défaut. Utilisé pour la lecture/l'écriture. Nom d'un projet Google Cloud associé à project utilisé pour la facturation.

  • sourceType : utilisé pour la lecture. Obligatoire lors de la lecture. Valeurs valides : table, query indique à AWS Glue si vous allez lire par table ou par requête.

  • materializationDataset : utilisé pour la lecture. Valeurs valides : chaînes. Nom d'un jeu de données BigQuery utilisé pour stocker les matérialisations des vues.

  • viewsEnabled : utilisé pour la lecture. Par défaut : false. Valeurs valides : true, false. Configure si BigQuery utilisera des vues.

  • query : utilisé pour la lecture. Utilisé quand viewsEnabled est true. Une requête GoogleSQL DQL.

  • temporaryGcsBucket : utilisé pour écrire. Obligatoire lorsque writeMethod est défini sur la valeur par défaut (indirect). Nom d'un compartiment Google Cloud Storage utilisé pour stocker une forme intermédiaire de vos données lors de l'écriture dans BigQuery.

  • writeMethod : indirect par défaut. Valeurs valides : direct, indirect. Utilisé pour écrire. Spécifie la méthode utilisée pour écrire les données.

    • Si la valeur est définie sur direct, votre connecteur écrira à l'aide de l'API BigQuery Storage Write.

    • Si la valeur est définie sur indirect, votre connecteur écrira dans Google Cloud Storage, puis transférera vers BigQuery à l'aide d'une opération de chargement. Votre compte de service Google Cloud aura besoin des autorisations GCS appropriées.

Utiliser l'écriture indirecte avec Google BigQuery

Cet exemple utilise l'écriture indirecte, qui écrit des données dans Google Cloud Storage et les copie dans Google BigQuery.

Prérequis :

Vous aurez besoin d'un compartiment Google Cloud Storage temporaire, temporaryBucket.

Le rôle IAM GCP pour le compte de service GCP AWS Glue nécessite les autorisations GCS appropriées pour accéder à temporaryBucket.

Configuration supplémentaire :

Pour configurer l'écriture indirecte avec BigQuery :
  1. Évaluez Configurer des connexions BigQuery et localisez ou retéléchargez le fichier JSON de vos informations d'identification GCP. Identifiez secretName, le secret AWS Secrets Manager de la connexion Google BigQuery AWS Glue utilisé dans votre tâche.

  2. Téléchargez le fichier JSON de vos informations d'identification sur un emplacement Amazon S3 correctement sécurisé. Conservez le chemin d'accès au fichier, s3secretpath, pour les étapes futures.

  3. Modifiez secretName en ajoutant la clé spark.hadoop.google.cloud.auth.service.account.json.keyfile. Définissez la valeur sur s3secretpath.

  4. Accordez à votre tâche AWS Glue les autorisations IAM Amazon S3 pour accéder à s3secretpath.

Vous pouvez désormais fournir l'emplacement temporaire de votre compartiment GCS à votre méthode d'écriture. Vous n'avez pas besoin de fournir writeMethod, car indirect est historiquement la valeur par défaut.

bigquery_write = glueContext.write_dynamic_frame.from_options( frame=frameToWrite, connection_type="bigquery", connection_options={ "connectionName": "connectionName", "parentProject": "parentProject", "temporaryGcsBucket": "temporaryBucket", "table": "tableName", } )