Interrogation des données de la table et exécution de Time Travel - 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 données de la table et exécution de Time Travel

Pour interroger un jeu de données Iceberg, utilisez une instruction standard SELECT comme suit. Les requêtes suivent les spécifications du format Apache Iceberg v2 et effectuent merge-on-read des suppressions de position et d'égalité.

SELECT * FROM [db_name.]table_name [WHERE predicate]

Pour optimiser les temps de requête, certains prédicats sont poussés vers l'endroit où résident les données.

Requêtes Time Travel et Version Travel

Chaque table Apache Iceberg conserve un manifeste versionné des objets Simple Storage Service (Amazon S3) qu'elle contient. Les versions précédentes du manifeste peuvent être utilisées pour les requêtes Time Travel et Version Travel.

Les requêtes Time Travel dans Athena interrogent Simple Storage Service (Amazon S3) des données historiques à partir d'un instantané cohérent à partir d'une date et d'une heure spécifiées. Les requêtes Version Travel dans Athena interrogent Simple Storage Service (Amazon S3) pour des données historiques à partir d'un ID d'instantané spécifié.

Requêtes Time Travel

Pour exécuter une requête Time Travel, utilisez FOR TIMESTAMP AS OF timestamp après le nom de la table dans l'instruction SELECT, comme dans l'exemple suivant.

SELECT * FROM iceberg_table FOR TIMESTAMP AS OF timestamp

L'heure système à spécifier pour les déplacements est soit un horodatage, soit un horodatage avec un fuseau horaire. Si elle n'est pas spécifiée, Athena considère que la valeur est un horodatage en heure UTC.

Les exemples de requêtes de voyage dans le temps suivants sélectionnent CloudTrail des données pour la date et l'heure spécifiées.

SELECT * FROM iceberg_table FOR TIMESTAMP AS OF TIMESTAMP '2020-01-01 10:00:00 UTC'
SELECT * FROM iceberg_table FOR TIMESTAMP AS OF (current_timestamp - interval '1' day)

Requêtes Version Travel

Pour exécuter une requête Version Travel (c'est-à-dire afficher un instantané cohérent à partir d'une version spécifiée), utilisez FOR VERSION AS OF version après le nom de la table dans l'instruction SELECT, comme dans l'exemple suivant.

SELECT * FROM [db_name.]table_name FOR VERSION AS OF version

Le paramètre version est l'ID de l'instantané bigint associé à une version de table Iceberg.

L'exemple de requête Version Travel suivant sélectionne les données pour la version spécifiée.

SELECT * FROM iceberg_table FOR VERSION AS OF 949530903748831860
Note

Les clauses FOR SYSTEM_TIME AS OF et FOR SYSTEM_VERSION AS OF de la version 2 du moteur Athena ont été remplacées par les clauses FOR TIMESTAMP AS OF et FOR VERSION AS OF de la version 3 du moteur Athena.

Récupération de l'ID d'instantané

Vous pouvez utiliser la SnapshotUtilclasse Java fournie par Iceberg pour récupérer l'ID du snapshot Iceberg, comme dans l'exemple suivant.

import org.apache.iceberg.Table; import org.apache.iceberg.aws.glue.GlueCatalog; import org.apache.iceberg.catalog.TableIdentifier; import org.apache.iceberg.util.SnapshotUtil; import java.text.SimpleDateFormat; import java.util.Date; Catalog catalog = new GlueCatalog(); Map<String, String> properties = new HashMap<String, String>(); properties.put("warehouse", "s3://DOC-EXAMPLE-BUCKET/my-folder"); catalog.initialize("my_catalog", properties); Date date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").parse("2022/01/01 00:00:00"); long millis = date.getTime(); TableIdentifier name = TableIdentifier.of("db", "table"); Table table = catalog.loadTable(name); long oldestSnapshotIdAfter2022 = SnapshotUtil.oldestAncestorAfter(table, millis);

Combinaison de Time Travel et Version Travel

Vous pouvez utiliser la syntaxe Time Travel et Version Travel dans la même requête pour spécifier différentes conditions de synchronisation et de gestion des versions, comme dans l'exemple suivant.

SELECT table1.*, table2.* FROM [db_name.]table_name FOR TIMESTAMP AS OF (current_timestamp - interval '1' day) AS table1 FULL JOIN [db_name.]table_name FOR VERSION AS OF 5487432386996890161 AS table2 ON table1.ts = table2.ts WHERE (table1.id IS NULL OR table2.id IS NULL)

Création et interrogation de vues à l'aide de tables Iceberg

Pour créer et interroger des vues Athena sur des tables Iceberg, utilisez des vues CREATE VIEW comme décrit dans Utilisation des vues.

Exemple :

CREATE VIEW view1 AS SELECT * FROM iceberg_table
SELECT * FROM view1

Si vous souhaitez utiliser la spécification de vue Iceberg pour créer des vues, contactez athena-feedback@amazon.com.

Utilisation du contrôle d'accès précis de Lake Formation

La version 3 du moteur Athena prend en charge le contrôle d'accès précis de Lake Formation avec les tables Iceberg, y compris le contrôle d'accès de sécurité au niveau des colonnes et des lignes. Ce contrôle d'accès fonctionne avec les requêtes de voyage dans le temps et avec les tables qui ont effectué une évolution de leur schéma. Pour plus d’informations, consultez Contrôle d'accès précis de Lake Formation et groupes de travail Athena.

Si vous avez créé votre table Iceberg en dehors d'Athena, utilisez le kit SDK Apache Iceberg en version 0.13.0 ou supérieure pour que les informations des colonnes de votre table Iceberg soient renseignées dans le AWS Glue Data Catalog. Si votre table Iceberg ne contient pas d'informations de colonne AWS Glue, vous pouvez utiliser l'instruction ALTER TABLE SET PROPERTIES Athena ou le dernier SDK Iceberg pour corriger la table et mettre à jour les informations de colonne dans. AWS Glue