Interrogazione di tabelle Iceberg ed esecuzione di query temporali - Amazon Athena

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Interrogazione di tabelle Iceberg ed esecuzione di query temporali

Per eseguire query su un set di dati Iceberg, utilizza una istruzione SELECT standard come la seguente. Le query seguono le specifiche del formato Apache Iceberg v2 ed eseguono merge-on-read eliminazioni sia di posizione che di uguaglianza.

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

Per ottimizzare i tempi delle query, tutti i predicati vengono "spinti" più vicino a dove si trovano i dati.

Query temporali e di versione

Ogni tabella Apache Iceberg conserva un manifesto con versioni degli oggetti Amazon S3 che comprende. Le versioni precedenti del manifesto possono essere utilizzate per le query temporali e di versione.

Le query temporali in Athena interrogano Amazon S3 relativamente a dati storici da uno snapshot coerente con una data e un'ora specificate. Le query di versione in Athena interrogano Amazon S3 relativamente a dati storici a partire da un ID snapshot specificato.

Query temporali

Per eseguire una query temporale, utilizza FOR TIMESTAMP AS OF timestamp dopo il nome della tabella nell'istruzione SELECT, come nel seguente esempio:

SELECT * FROM iceberg_table FOR TIMESTAMP AS OF timestamp

L'ora del sistema da specificare per il viaggio è un timestamp o un timestamp con un fuso orario. Se non specificato, Athena considera il valore come un timestamp nell'ora UTC.

Nell'esempio seguente, le interrogazioni sui viaggi nel tempo selezionano i CloudTrail dati per la data e l'ora specificate.

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)

Query di versione

Per eseguire una query di versione (ovvero visualizzare uno snapshot coerente a partire da una versione specificata), utilizza FOR VERSION AS OF version dopo il nome della tabella nell'istruzione SELECT, come nell'esempio seguente.

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

Il parametro version è l'ID snapshot bigint associato a una versione della tabella Iceberg.

La seguente query di versione di esempio seleziona i dati per la versione specificata.

SELECT * FROM iceberg_table FOR VERSION AS OF 949530903748831860
Nota

Le clausole FOR SYSTEM_TIME AS OF e FOR SYSTEM_VERSION AS OF nella versione 2 del motore Athena sono state sostituite dalle clausole FOR TIMESTAMP AS OF e FOR VERSION AS OF nella versione 3 del motore Athena.

Recupero dell'ID snapshot

È possibile utilizzare la SnapshotUtilclasse Java fornita da Iceberg per recuperare l'ID dello snapshot Iceberg, come nell'esempio seguente.

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);

Combinazione di query temporali e di versione

È possibile utilizzare la sintassi delle query temporali e di versione nella stessa query per specificare condizioni di temporizzazione e controllo delle versioni diverse, come nell'esempio seguente.

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)

Creazione ed esecuzione di query sulle viste con le tabelle Iceberg

Per creare ed eseguire query sulle viste Athena sulle tabelle Iceberg, utilizza le viste CREATE VIEW come descritto nella pagina Utilizzo delle visualizzazioni.

Esempio:

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

Se desideri utilizzare le specifiche di visualizzazione Iceberg per creare viste, contatta athena-feedback@amazon.com.

Utilizzo del controllo granulare degli accessi di Lake Formation

La versione 3 del motore Athena supporta il controllo granulare degli accessi Lake Formation con le tabelle Iceberg, incluso il controllo degli accessi con sicurezza a livello di colonna e riga. Questo controllo dell'accesso funziona con le query temporali e con le tabelle che hanno eseguito l'evoluzione dello schema. Per ulteriori informazioni, consulta Controllo granulare degli accessi di Lake Formation e gruppi di lavoro Athena.

Se hai creato la tabella Iceberg al di fuori di Athena, utilizza l'SDK di Apache Iceberg versione 0.13.0 o successiva in modo che le informazioni della colonna della tabella Iceberg siano inserite nel AWS Glue Data Catalog. Se la tua tabella Iceberg non contiene informazioni sulle colonne in AWS Glue, puoi utilizzare l'istruzione ALTER TABLE SET PROPERTIES Athena o l'ultimo Iceberg SDK per correggere la tabella e aggiornare le informazioni sulle colonne in. AWS Glue