Interrogation des tables Linux Foundation Delta Lake - Amazon Athena

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.

Interrogation des tables Linux Foundation Delta Lake

Linux Foundation Delta Lake est un format de table pour l'analytique du big data. Vous pouvez utiliser Amazon Athena pour lire directement les tables Delta  Lake stockées dans Amazon S3 sans avoir à générer de fichiers manifestes ou à exécuter l'instruction MSCK REPAIR.

Le format Delta Lake stocke les valeurs minimales et maximales par colonne de chaque fichier de données. L'implémentation Athena utilise ces informations pour permettre le saut de fichier sur les prédicats afin d'éliminer les fichiers non désirés de la considération.

Considérations et restrictions

L'assistance de Delta Lake à Athena comporte les considérations et limites suivantes :

  • Tableaux avec AWS Glue catalogue uniquement : le support natif de Delta Lake n'est pris en charge que par le biais des tables enregistrées auprès de AWS Glue. Si une table Delta Lake est enregistrée dans un autre métastore, vous pouvez la conserver et la traiter comme votre métastore primaire. Les métadonnées de Delta Lake étant stockées dans le système de fichiers (par exemple, dans Amazon S3) plutôt que dans le métastore, Athena n'a besoin que de la propriété location in AWS Glue pour lire vos tables Delta Lake.

  • Moteur V3 uniquement – Les requêtes Delta Lake ne sont prises en charge que par la version 3 du moteur Athena. Vous devez vous assurer que le groupe de travail que vous créez est configuré pour utiliser la version 3 du moteur Athena.

  • Version du lecteur Delta Lake — Le protocole de lecteur Delta Lake jusqu'à la version 3 est pris en charge.

  • Mappage des colonnes et timestampNTZ : le mappage des colonnes Delta, qui permet aux colonnes des tables Delta et aux colonnes du fichier Parquet sous-jacent d'utiliser des noms différents, et l'horodatage sans fuseau horaire (TimestampNTZ) sont pris en charge.

  • Pas de prise en charge du voyage dans le temps – Il n'y a pas de prise en charge des requêtes qui utilisent les capacités de voyage dans le temps de Delta Lake.

  • Lecture seule – L'écriture d'instructions DML comme UPDATE, INSERT ou DELETE n'est pas prise en charge.

  • Prise en charge de Lake Formation : l'intégration de Lake Formation est disponible pour les tables Delta Lake dont le schéma est synchronisé avec AWS Glue. Pour plus d'informations, consultez les AWS Lake Formation sections Utilisation avec Amazon Athena et Configuration des autorisations pour une table Delta Lake dans le guide du AWS Lake Formation développeur.

  • Prise en charge limitée de DDL – Les instructions DDL suivantes sont prises en charge : CREATE EXTERNAL TABLE, SHOW COLUMNS, SHOW TBLPROPERTIES, SHOW PARTITIONS, SHOW CREATE TABLE et DESCRIBE. Pour plus d'informations sur l'utilisation de l'instruction CREATE EXTERNAL TABLE, voir la rubrique Premiers pas.

  • Omission d'objets S3 Glacier non prise en charge : si les objets de la table Delta Lake de Linux Foundation appartiennent à une classe de stockage Amazon S3 Glacier, la définition de la propriété de table read_restored_glacier_objects sur false n'a aucun effet.

    Par exemple, supposons que vous exécutiez la commande suivante :

    ALTER TABLE table_name SET TBLPROPERTIES ('read_restored_glacier_objects' = 'false')

    Pour les tables Iceberg et Delta Lake, la commande produit l'erreur Unsupported table property key: read_restored_glacier_objects. Pour les tables Hudi, la commande ALTER TABLE ne produit pas d'erreur, mais les objets Amazon S3 Glacier ne sont toujours pas ignorés. L'exécution de requêtes SELECT après la commande ALTER TABLE continue de renvoyer tous les objets.

Prise en charge des types de données de colonnes non-partition

Pour les colonnes non-partition, tous les types de données pris en charge par Athena, à l'exception de CHAR, sont pris en charge (CHAR n'est pas pris en charge par le protocole Delta Lake lui-même). Les types de données pris en charge sont les suivants :

boolean tinyint smallint integer bigint double float decimal varchar string binary date timestamp array map struct

Prise en charge des types de données de colonnes partition

Pour les colonnes de type partition, Athena prend en charge les tables avec les types de données suivants :

boolean integer smallint tinyint bigint decimal float double date timestamp varchar

Pour de plus amples informations sur les types de données dans Athena, voir Types de données dans Amazon Athena.

Premiers pas

Pour pouvoir être interrogée, votre table Delta Lake doit exister dans. AWS Glue Si votre table se trouve dans Amazon S3 mais pas dans AWS Glue, exécutez une CREATE EXTERNAL TABLE instruction en utilisant la syntaxe suivante. Si votre table existe déjà dans AWS Glue (par exemple, parce que vous utilisez Apache Spark ou un autre moteur AWS Glue), vous pouvez ignorer cette étape.

CREATE EXTERNAL TABLE [db_name.]table_name LOCATION 's3://DOC-EXAMPLE-BUCKET/your-folder/' TBLPROPERTIES ('table_type' = 'DELTA')

Notez l'omission des définitions de colonnes, de SerDe la bibliothèque et des autres propriétés de table. Contrairement aux tables Hive traditionnelles, les métadonnées des tables Delta Lake sont déduites du journal des transactions de Delta Lake et synchronisées directement avec. AWS Glue

Note

Pour les tables Delta Lake, les instructions CREATE TABLE qui comprennent plus que les propriétés LOCATION et table_type ne sont pas autorisées.

Lecture des tables Delta Lake

Pour interroger une table Delta Lake, utilisez la syntaxe SQL SELECT standard :

[ WITH with_query [, ...] ]SELECT [ ALL | DISTINCT ] select_expression [, ...] [ FROM from_item [, ...] ] [ WHERE condition ] [ GROUP BY [ ALL | DISTINCT ] grouping_element [, ...] ] [ HAVING condition ] [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ] [ ORDER BY expression [ ASC | DESC ] [ NULLS FIRST | NULLS LAST] [, ...] ] [ OFFSET count [ ROW | ROWS ] ] [ LIMIT [ count | ALL ] ]

Pour plus d'informations sur la syntaxe SELECT, voir SELECT dans la documentation d'Athena.

Le format Delta Lake stocke les valeurs minimales et maximales par colonne de chaque fichier de données. Athena utilise ces informations pour permettre le saut de fichiers sur les prédicats afin d'éliminer les fichiers inutiles de la considération.

Synchronisation des métadonnées Delta Lake

Athena synchronise les métadonnées des tables, y compris le schéma, les colonnes de partition et les propriétés des tables, AWS Glue si vous utilisez Athena pour créer votre table Delta Lake. Au fil du temps, ces métadonnées peuvent perdre leur synchronisation avec les métadonnées de la table sous-jacente dans le journal des transactions. Pour garder votre table à jour, vous pouvez choisir l'une des options suivantes :

Notez que les fonctionnalités suivantes nécessitent que votre AWS Glue schéma ait toujours le même schéma que le journal des transactions :

  • Lake Formation

  • Vues

  • Filtres de lignes et de colonnes

Si votre flux de travail ne nécessite aucune de ces fonctionnalités et que vous préférez ne pas conserver cette compatibilité, vous pouvez utiliser le CREATE TABLE DDL dans Athena, puis ajouter le chemin Amazon S3 en SerDe tant que paramètre. AWS Glue

Pour créer une table Delta Lake à l'aide de l'Athena et des consoles AWS Glue
  1. Ouvrez la console Athena à l’adresse https://console.aws.amazon.com/athena/.

  2. Dans l'éditeur de requêtes Athena, utilisez l'instruction DDL suivante pour créer votre table Delta Lake. Notez que lorsque vous utilisez cette méthode, la valeur de TBLPROPERTIES doit être 'spark.sql.sources.provider' = 'delta' et non 'table_type' = 'delta'.

    Notez que ce même schéma (avec une seule colonne nommée col de type array<string>) est inséré lorsque vous utilisez Apache Spark (Athena pour Apache Spark) ou la plupart des autres moteurs pour créer votre table.

    CREATE EXTERNAL TABLE [db_name.]table_name(col array<string>) LOCATION 's3://DOC-EXAMPLE-BUCKET/your-folder/' TBLPROPERTIES ('spark.sql.sources.provider' = 'delta')
  3. Ouvrez la AWS Glue console à l'adresse https://console.aws.amazon.com/glue/.

  4. Dans le panneau de navigation, choisissez Catalogue de données, Tables.

  5. Dans la liste des tables, choisissez le lien correspondant à votre table.

  6. Sur la page de la table, choisissez Actions, Modifier la table.

  7. Dans la section Paramètres Serde, ajoutez la clé path avec la valeur s3://DOC-EXAMPLE-BUCKET/your-folder/.

  8. Choisissez Save (Enregistrer).

Ressources supplémentaires

Pour une discussion sur l'utilisation des tables Delta Lake avec Athena AWS Glue et leur interrogation avec Athena, voir Gérer les opérations de données UPSERT à l'aide de l'open source Delta Lake AWS Glue et sur le blog Big Data.AWS