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
SELECT * FROM [
db_name
.]table_name
[WHEREpredicate
]
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
dopo il nome della tabella nell'istruzione timestamp
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
dopo il nome della tabella nell'istruzione version
SELECT
, come nell'esempio seguente.
SELECT * FROM [
db_name
.]table_name
FOR VERSION AS OFversion
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 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);
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
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