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é associé à 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 automatiquement renseignées à partir des tables de la source de données externe correspondante. Vous pouvez interroger ces tables directement dans BigQuery, mais vous ne pouvez pas effectuer de modifications, d'ajouts ni de suppressions. 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, consultez la section Se connecter à Amazon S3 et incluez l'instruction de stratégie supplémentaire suivante pour AWS Glue dans votre règle AWS Identity and Access Management pour BigQuery :

    {
     "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 :

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.

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 dans 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 section 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é, par exemple sur les détails du schéma, consultez la page Obtenir des informations sur la table.

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 de table

Chaque table à laquelle vous accordez l'accès dans votre base de données AWS Glue apparaît sous la forme d'une 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)

Les seules exceptions sont 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

Étapes suivantes