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
SELECT * FROM [
db_name
.]table_name
[WHEREpredicate
]
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
après le nom de la table dans l'instruction timestamp
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
après le nom de la table dans l'instruction version
SELECT
, comme dans l'exemple suivant.
SELECT * FROM [
db_name
.]table_name
FOR VERSION AS OFversion
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 SnapshotUtil
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
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