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 exemple us-east-1
    • ACCOUNT_ID: : ID de compte AWS à 12 chiffres
    • DATABASE_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

  1. Ouvrez la page BigQuery dans la console Google Cloud.

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

  5. Cliquez sur Créer un ensemble de données.

SQL

Utilisez l'instruction LDD (langage de définition de données) CREATE EXTERNAL 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 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 exemple aws-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.

  3. 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 exemple aws-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

  1. Lancez Cloud Shell.
  2. 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).

  1. 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 exemple main.tf. Dans ce tutoriel, le fichier est appelé main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. 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.

  3. Examinez et modifiez les exemples de paramètres à appliquer à votre environnement.
  4. Enregistrez les modifications.
  5. 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

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

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

  3. 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 page Contrôler l'accès aux ressources avec IAM.

Interroger les 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 sécurité au niveau des lignes, la sécurité au niveau des colonnes, la mise en cache de métadonnées et le masquage des données ne sont pas acceptés.
  • Les paramètres au niveau des ensembles de données qui sont liés aux valeurs par défaut de création des tables 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.

Étapes suivantes