Créer des ensembles de données fédérés AWS Glue
Ce document explique comment créer dans BigQuery un ensemble de données fédéré lié à une base de données existante dans AWS Glue.
Un ensemble de données fédéré est une connexion entre BigQuery et une source de données externe au niveau de l'ensemble de données. Les tables d'un ensemble de données fédéré sont renseignées automatiquement à partir des tables de la source de données externe correspondante. Vous pouvez interroger ces tables directement dans BigQuery, mais vous ne pouvez pas modifier, ajouter ou supprimer des données. Cependant, toutes les mises à jour que vous effectuez dans la source de données externe sont automatiquement répercutées dans BigQuery.
Avant de commencer
Vérifiez que vous disposez d'une connexion pour accéder aux données AWS Glue.
Pour créer ou modifier une connexion, suivez les instructions de la section Se connecter à Amazon S3. Lorsque vous créez cette connexion, incluez l'instruction de stratégie suivante pour AWS Glue dans votre stratégie AWS Identity and Access Management pour BigQuery. Incluez cette instruction en plus des autres autorisations sur le bucket Amazon S3 où les données de vos tables AWS Glue sont stockées.
{ "Effect": "Allow", "Action": [ "glue:GetDatabase", "glue:GetTable", "glue:GetTables", "glue:GetPartitions" ], "Resource": [ "arn:aws:glue:REGION:ACCOUNT_ID:catalog", "arn:aws:glue:REGION:ACCOUNT_ID:database/DATABASE_NAME", "arn:aws:glue:REGION:ACCOUNT_ID:table/DATABASE_NAME/*" ] }
Remplacez les éléments suivants :
REGION
: région AWS, par exempleus-east-1
ACCOUNT_ID:
: ID de compte AWS à 12 chiffresDATABASE_NAME
: nom de la base de données AWS Glue
Autorisations requises
Pour obtenir les autorisations nécessaires pour créer un ensemble de données fédéré, demandez à votre administrateur de vous accorder le rôle IAM Administrateur BigQuery (roles/bigquery.admin
).
Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.
Ce rôle prédéfini contient les autorisations requises pour créer un ensemble de données fédéré. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :
Autorisations requises
Les autorisations suivantes sont requises pour créer un ensemble de données fédéré :
-
bigquery.datasets.create
-
bigquery.connections.use
-
bigquery.connections.delegate
Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.
Pour plus d'informations sur les rôles et les autorisations IAM dans BigQuery, consultez la page Présentation d'IAM.
Créer un ensemble de données fédéré
Pour créer un ensemble de données fédéré, procédez comme suit :
Console
Ouvrez la page BigQuery dans la console Google Cloud.
Dans le panneau Explorer, sélectionnez le projet dans lequel vous souhaitez créer l'ensemble de données.
Développez l'option
Actions, puis cliquez sur Créer un ensemble de données.Sur la page Créer un ensemble de données, procédez comme suit :
- Pour Dataset ID (ID de l'ensemble de données), renseignez un ensemble de données unique.
- Dans le champ Type d'emplacement, choisissez un emplacement AWS pour l'ensemble de données, par exemple
aws-us-east-1
. Une fois l'ensemble de données créé, l'emplacement ne peut plus être modifié. Pour Ensemble de données externe, procédez comme suit :
- Cochez la case Associer à un ensemble de données externe.
- Dans le champ Type d'ensemble de données externe, sélectionnez
AWS Glue
. - Dans le champ Source externe, saisissez
aws-glue://
suivi du nom de ressource Amazon (ARN) de la base de données AWS Glue. Par exemple,aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database
. - Dans le champ ID de connexion, sélectionnez votre connexion AWS.
Ne modifiez pas les autres paramètres.
Cliquez sur Créer un ensemble de données.
SQL
Utilisez l'instruction LDD (langage de définition de données) CREATE EXTERNAL SCHEMA
.
Dans la console Google Cloud, accédez à la page BigQuery.
Dans l'éditeur de requête, saisissez l'instruction suivante :
CREATE EXTERNAL SCHEMA DATASET_NAME WITH CONNECTION PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME OPTIONS ( external_source = 'AWS_GLUE_SOURCE', location = 'LOCATION');
Remplacez les éléments suivants :
DATASET_NAME
: nom de votre nouvel ensemble de données dans BigQuery.PROJECT_ID
: ID de votre projet.CONNECTION_LOCATION
: emplacement de votre connexion AWS, par exempleaws-us-east-1
.CONNECTION_NAME
: nom de votre connexion AWS.AWS_GLUE_SOURCE
: nom de ressource Amazon (ARN) de la base de données AWS Glue avec un préfixe identifiant la source (par exemple,aws-glue://arn:aws:glue:us-east-1:123456789:database/test_database
).LOCATION
: emplacement de votre nouvel ensemble de données dans BigQuery, par exemple,aws-us-east-1
. Une fois que vous avez créé un ensemble de données, vous ne pouvez plus modifier son emplacement.
Cliquez sur
Exécuter.
Pour en savoir plus sur l'exécution des requêtes, consultez Exécuter une requête interactive.
bq
Dans un environnement de ligne de commande, créez un ensemble de données à l'aide de la commande bq mk
:
bq --location=LOCATION mk --dataset \ --external_source aws-glue://AWS_GLUE_SOURCE \ --connection_id PROJECT_ID.CONNECTION_LOCATION.CONNECTION_NAME \ DATASET_NAME
Remplacez les éléments suivants :
LOCATION
: emplacement de votre nouvel ensemble de données dans BigQuery, par exemple,aws-us-east-1
. Une fois que vous avez créé un ensemble de données, vous ne pouvez plus modifier son emplacement. Vous pouvez définir une valeur d'emplacement par défaut à l'aide du fichier.bigqueryrc
.AWS_GLUE_SOURCE
: nom de ressource Amazon (ARN) de la base de données AWS Glue (par exemple,arn:aws:glue:us-east-1:123456789:database/test_database
).PROJECT_ID
: ID de votre projet BigQuery.CONNECTION_LOCATION
: emplacement de votre connexion AWS, par exempleaws-us-east-1
CONNECTION_NAME
: nom de votre connexion AWS.DATASET_NAME
: nom de votre nouvel ensemble de données dans BigQuery. Pour créer un ensemble de données dans un projet autre que votre projet par défaut, ajoutez l'ID du projet au nom de l'ensemble de données de la manière suivante :PROJECT_ID
:DATASET_NAME
.
Terraform
Utilisez la ressource google_bigquery_dataset
.
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.
L'exemple suivant crée un ensemble de données fédéré AWS Glue :
resource "google_bigquery_dataset" "dataset" { provider = google-beta dataset_id = "example_dataset" friendly_name = "test" description = "This is a test description." location = "aws-us-east-1" external_dataset_reference { external_source = "aws-glue://arn:aws:glue:us-east-1:999999999999:database/database" connection = "projects/project/locations/aws-us-east-1/connections/connection" } }
Pour appliquer votre configuration Terraform dans un projet Google Cloud, suivez les procédures des sections suivantes.
Préparer Cloud Shell
- Lancez Cloud Shell.
-
Définissez le projet Google Cloud par défaut dans lequel vous souhaitez appliquer vos configurations Terraform.
Vous n'avez besoin d'exécuter cette commande qu'une seule fois par projet et vous pouvez l'exécuter dans n'importe quel répertoire.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
Les variables d'environnement sont remplacées si vous définissez des valeurs explicites dans le fichier de configuration Terraform.
Préparer le répertoire
Chaque fichier de configuration Terraform doit avoir son propre répertoire (également appelé module racine).
-
Dans Cloud Shell, créez un répertoire et un nouveau fichier dans ce répertoire. Le nom du fichier doit comporter l'extension
.tf
, par exemplemain.tf
. Dans ce tutoriel, le fichier est appelémain.tf
.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
Si vous suivez un tutoriel, vous pouvez copier l'exemple de code dans chaque section ou étape.
Copiez l'exemple de code dans le fichier
main.tf
que vous venez de créer.Vous pouvez également copier le code depuis GitHub. Cela est recommandé lorsque l'extrait Terraform fait partie d'une solution de bout en bout.
- Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
- Enregistrez les modifications.
-
Initialisez Terraform. Cette opération n'est à effectuer qu'une seule fois par répertoire.
terraform init
Vous pouvez également utiliser la dernière version du fournisseur Google en incluant l'option
-upgrade
:terraform init -upgrade
Appliquer les modifications
-
Examinez la configuration et vérifiez que les ressources que Terraform va créer ou mettre à jour correspondent à vos attentes :
terraform plan
Corrigez les modifications de la configuration si nécessaire.
-
Appliquez la configuration Terraform en exécutant la commande suivante et en saisissant
yes
lorsque vous y êtes invité :terraform apply
Attendez que Terraform affiche le message "Apply completed!" (Application terminée).
- Ouvrez votre projet Google Cloud pour afficher les résultats. Dans la console Google Cloud, accédez à vos ressources dans l'interface utilisateur pour vous assurer que Terraform les a créées ou mises à jour.
API
Appelez la méthode datasets.insert
avec une ressource d'ensemble de données et un champ externalDatasetReference
définis pour votre base de données AWS Glue.
Répertorier les tables d'un ensemble de données fédéré
Pour répertorier les tables disponibles pour les requêtes dans votre ensemble de données fédéré, consultez la page Répertorier les ensembles de données.
Obtenir des informations sur la table
Pour obtenir des informations sur les tables de votre ensemble de données fédéré, telles que les détails du schéma, consultez la page Obtenir des informations sur les tables.
Contrôler l'accès aux tables
Pour gérer l'accès aux tables de votre ensemble de données fédéré, consultez la section Contrôler l'accès aux ressources avec IAM.
La sécurité au niveau des lignes, la sécurité au niveau des colonnes et le masquage des données sont également acceptés pour les tables des ensembles de données fédérés.
Les opérations de schéma susceptibles d'invalider les règles de sécurité, telles que la suppression d'une colonne dans AWS Glue, peuvent entraîner l'échec des tâches jusqu'à ce que les stratégies soient mises à jour. De plus, si vous supprimez une table dans AWS Glue et que vous la recréez, vos règles de sécurité ne s'appliquent plus à la table recréée.
Interroger des données AWS Glue
L'interrogation de tables dans des ensembles de données fédérés est la même que l'interrogation de tables dans n'importe quel autre ensemble de données BigQuery.
Vous pouvez interroger les tables AWS Glue aux formats suivants :
- CSV (compressé et non compressé)
- JSON (compressé et non compressé)
- Parquet
- ORC
- Avro
- Iceberg
Détails du mappage des tables
Chaque table à laquelle vous accordez l'accès dans votre base de données AWS Glue apparaît en tant que table équivalente dans votre ensemble de données BigQuery.
Format
Le format de chaque table BigQuery est déterminé par les champs suivants de la table AWS Glue correspondante :
InputFormat
(Table.StorageDescriptor.InputFormat
)OutputFormat
(Table.StorageDescriptor.OutputFormat
)SerializationLib
(Table.StorageDescriptor.SerdeInfo.SerializationLibrary
)
La seule exception concerne les tables Iceberg, qui utilisent le champ TableType
(Table.Parameters["table_type"]
).
Par exemple, une table AWS Glue avec les champs suivants est mappée sur une table ORC dans BigQuery :
InputFormat
="org.apache.hadoop.hive.ql.io.orc.OrcInputFormat"
OutputFormat
="org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat"
SerializationLib
="org.apache.hadoop.hive.ql.io.orc.OrcSerde"
Emplacement
L'emplacement de chaque table BigQuery est déterminé comme suit :
- Tables Iceberg : le champ
Table.Parameters["metadata_location"]
de la table AWS Glue - Tables non partitionnées non-Iceberg : le champ
Table.StorageDescriptor.Location
dans la table AWS Glue - Tables non-Iceberg : API AWS Glue GetPartitions
Autres propriétés
De plus, certaines propriétés de la table AWS Glue sont automatiquement mappées avec des options spécifiques au format dans BigQuery :
Format | SerializationLib | Valeur de la table AWS Glue | Option BigQuery |
---|---|---|---|
CSV | LazySimpleSerDe | Table.StorageDescriptor.SerdeInfo.Parameters["field.delim"] | CsvOptions.fieldDelimiter |
CSV | LazySimpleSerDe | Table.StorageDescriptor.Parameters["serialization.encoding"] | CsvOptions.encoding |
CSV | LazySimpleSerDe | Table.StorageDescriptor.Parameters["skip.header.line.count"] | CsvOptions.skipLeadingRows |
CSV | OpenCsvSerDe | Table.StorageDescriptor.SerdeInfo.Parameters["separatorChar"] | CsvOptions.fieldDelimiter |
CSV | OpenCsvSerDe | Table.StorageDescriptor.SerdeInfo.Parameters["quoteChar"] | CsvOptions.quote |
CSV | OpenCsvSerDe | Table.StorageDescriptor.Parameters["serialization.encoding"] | CsvOptions.encoding |
CSV | OpenCsvSerDe | Table.StorageDescriptor.Parameters["skip.header.line.count"] | CsvOptions.skipLeadingRows |
JSON | Hive JsonSerDe | Table.StorageDescriptor.Parameters["serialization.encoding"] | JsonOptions.encoding |
Créer une vue dans un ensemble de données fédéré
Vous ne pouvez pas créer de vue dans un ensemble de données fédéré. Cependant, vous pouvez créer une vue dans un ensemble de données standard basé sur une table d'un ensemble de données fédéré. Pour en savoir plus, consultez la page Créer des vues.
Supprimer un ensemble de données fédéré
La suppression d'un ensemble de données fédéré est identique à la suppression de tout autre ensemble de données BigQuery. Pour en savoir plus, consultez la page Supprimer des ensembles de données.
Tarifs
Pour en savoir plus sur les tarifs, consultez la section Tarifs de BigQuery Omni.
Limites
- Toutes les limites de BigQuery Omni s'appliquent.
- Vous ne pouvez pas ajouter, supprimer ni mettre à jour des données ou des métadonnées dans les tables d'un ensemble de données fédéré AWS Glue.
- Vous ne pouvez pas créer de tables, de vues ou de vues matérialisées dans un ensemble de données fédéré AWS Glue.
- Les vues
INFORMATION_SCHEMA
ne sont pas prises en charge. - La mise en cache des métadonnées n'est pas disponible.
- Les paramètres au niveau de l'ensemble de données liés aux paramètres par défaut de création de table n'affectent pas les ensembles de données fédérés, car vous ne pouvez pas créer de tables manuellement.
- Le type de données Apache Hive
UNION
n'est pas compatible avec les tables Avro.