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à.
Utilizzo delle tabelle Apache Iceberg utilizzando Amazon Athena SQL
Amazon Athena fornisce supporto integrato per Apache Iceberg e non richiede passaggi o configurazioni aggiuntivi. Questa sezione fornisce una panoramica dettagliata delle funzionalità supportate e linee guida di alto livello per l'utilizzo di Athena per interagire con le tabelle Iceberg.
Compatibilità tra versioni e funzionalità
Nota
Le sezioni seguenti presuppongono che tu stia utilizzando il motore Athena versione 3.
Supporto alle specifiche della tabella Iceberg
La specifica della tabella Apache Iceberg specifica come dovrebbero comportarsi le tabelle Iceberg. Athena supporta il formato di tabella versione 2, quindi qualsiasi tabella Iceberg creata con la console, la CLI o l'SDK utilizza intrinsecamente quella versione.
Se utilizzi una tabella Iceberg creata con un altro motore, come Apache Spark su Amazon EMR oppure AWS Glue, assicurati di impostare la versione del formato della tabella utilizzando le proprietà della tabella.
Supporto per le funzionalità Iceberg
Puoi usare Athena per leggere e scrivere sulle tabelle Iceberg. Quando si modificano i dati utilizzando le DELETE FROM
istruzioniUPDATE
, eMERGE INTO
,, Athena supporta solo la merge-on-read modalità. Questa proprietà non può essere modificata. Per aggiornare o eliminare i dati con copy-on-write, devi utilizzare altri motori come Apache Spark su Amazon EMR o. AWS Glue La tabella seguente riassume il supporto delle funzionalità Iceberg in Athena.
Supporto DDL | supporto DML | AWS Lake Formation per motivi di sicurezza (opzionale) | ||||
---|---|---|---|---|---|---|
Formato della tabella | Create table (Crea tabella) | Evoluzione dello schema | Lettura dei dati | Scrittura di dati | Controllo dell'accesso a righe/colonne | |
Amazon Athena | Versione 2 | ✓ | ✓ | ✓ | X C opy-on-write | ✓ |
✓ M erge-on-read | ✓ |
Nota
Athena non supporta le interrogazioni incrementali.
Lavorare con le tabelle Iceberg
Per iniziare rapidamente a usare Iceberg in Athena, consulta la sezione Guida introduttiva alle tabelle Iceberg in Athena SQL all'inizio di questa guida.
La tabella seguente elenca le limitazioni e i consigli.
Scenario |
Limitazione |
Raccomandazione |
---|---|---|
Tabella: generazione DDL |
Le tabelle Iceberg create con altri motori possono avere proprietà che non sono esposte in Athena. Per queste tabelle, non è possibile generare il DDL. |
Usa l'istruzione equivalente nel motore che ha creato la tabella (ad esempio, l' |
Prefissi Amazon S3 casuali in oggetti scritti su una tabella Iceberg |
Per impostazione predefinita, le tabelle Iceberg create con Athena hanno |
Per disabilitare questo comportamento e ottenere il pieno controllo sulle proprietà della tabella Iceberg, crea una tabella Iceberg con un altro motore come Spark su Amazon EMR o. AWS Glue |
Query incrementali |
Attualmente non è supportato in Athena. |
Per utilizzare query incrementali per abilitare pipeline di inserimento incrementali di dati, usa Spark su Amazon EMR o. AWS Glue |
Migrazione di tabelle esistenti su Iceberg
Per migrare l'attuale Athena AWS Glue o le tabelle (note anche come tabelle Hive) nel formato Iceberg, puoi utilizzare la migrazione dei dati sul posto o completa:
-
La migrazione sul posto è il processo di generazione dei file di metadati di Iceberg su file di dati esistenti.
-
La migrazione completa dei dati crea il livello di metadati Iceberg e riscrive anche i file di dati esistenti dalla tabella originale alla nuova tabella Iceberg.
Le sezioni seguenti forniscono una panoramica delle API disponibili per la migrazione delle tabelle e linee guida per la scelta di una strategia di migrazione. Per ulteriori informazioni su queste due strategie, consulta la sezione Table Migration
Migrazione sul posto
La migrazione sul posto elimina la necessità di riscrivere tutti i file di dati. I file di metadati Iceberg vengono invece generati e collegati ai file di dati esistenti. Iceberg offre tre opzioni per implementare la migrazione sul posto:
-
Utilizzando la
snapshot
procedura, come spiegato nelle sezioni Snapshot Table e Procedura Spark: snapshotnella documentazione di Iceberg. -
Utilizzo della
add_files
procedura, come spiegato nelle sezioni Aggiungi file e Procedura Spark: add_filesnella documentazione di Iceberg. -
Utilizzando la
migrate
procedura, come spiegato nelle sezioni Migrate Table e Procedura Spark:Migrate nella documentazione di Iceberg.
Attualmente, la procedura di migrazione non funziona direttamente con il metastore Hive, ma AWS Glue Data Catalog solo con il metastore Hive. Se hai l'esigenza di utilizzare la migrate
procedura anziché snapshot
oppureadd_files
, puoi utilizzare un cluster Amazon EMR temporaneo con il metastore Hive (HMS). Questo approccio richiede la versione 1.2 o successiva di Iceberg.
Supponiamo che tu voglia creare la seguente tabella Hive:
Puoi creare questa tabella Hive eseguendo questo codice nella console Athena:
CREATE EXTERNAL TABLE 'hive_table'( 'id' bigint, 'data' string) USING parquet LOCATION 's3://datalake-xxxx/aws_workshop/iceberg_db/hive_table' INSERT INTO iceberg_db.hive_table VALUES (1, 'a')
Se la tua tabella Hive è partizionata, includi l'istruzione partition e aggiungi le partizioni in base ai requisiti di Hive.
ALTER TABLE default.placeholder_table_for_migration ADD PARTITION (date = '2023-10-10')
Fasi:
-
Crea un cluster Amazon EMR senza abilitare l' AWS Glue Data Catalog integrazione, ovvero non selezionare le caselle di controllo per i metadati delle tabelle Hive o Spark. Questo perché per questa soluzione alternativa utilizzerai il metastore Hive (HMS) nativo disponibile nel cluster.
-
Configura la sessione Spark per utilizzare l'implementazione del catalogo Iceberg Hive.
"spark.sql.extensions":"org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions", "spark.sql.catalog.spark_catalog": "org.apache.iceberg.spark.SparkSessionCatalog", "spark.sql.catalog.spark_catalog.type": "hive",
-
Verifica che il tuo cluster Amazon EMR non sia connesso a AWS Glue Data Catalog
show databases
show tables
-
Registra la tabella Hive nel metastore Hive del tuo cluster Amazon EMR, quindi utilizza la procedura Iceberg.
migrate
Questa procedura crea i file di metadati Iceberg nella stessa posizione della tabella Hive.
-
Registra la tabella Iceberg migrata in. AWS Glue Data Catalog
-
Torna a un cluster Amazon EMR con l' AWS Glue Data Catalog integrazione abilitata.
-
Usa la seguente configurazione di Iceberg nella sessione Spark.
"spark.sql.extensions":"org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions", "spark.sql.catalog.glue_catalog": "org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.glue_catalog.warehouse": "s3://datalake-xxxx/aws_workshop", "spark.sql.catalog.glue_catalog.catalog-impl": "org.apache.iceberg.aws.glue.GlueCatalog", "spark.sql.catalog.glue_catalog.io-impl": "org.apache.iceberg.aws.s3.S3FileIO",
Ora puoi interrogare questa tabella da Amazon EMR o AWS Glue Athena.
Migrazione completa dei dati
La migrazione completa dei dati ricrea i file di dati e i metadati. Questo approccio richiede più tempo e risorse di elaborazione aggiuntive rispetto alla migrazione sul posto. Tuttavia, questa opzione aiuta a migliorare la qualità delle tabelle: è possibile convalidare i dati, apportare modifiche allo schema e alle partizioni, ripristinare i dati e così via. Per implementare la migrazione completa dei dati, utilizza una delle seguenti opzioni:
-
Usa l'istruzione
CREATE TABLE ... AS SELECT
(CTAS) in Spark on Amazon EMR o Athena. AWS Glue Puoi impostare le specifiche della partizione e le proprietà della tabella per la nuova tabella Iceberg utilizzando le clausole and. PARTITIONED BY
TBLPROPERTIES
È possibile ottimizzare lo schema e il partizionamento per la nuova tabella in base alle proprie esigenze invece di ereditarli semplicemente dalla tabella di origine. -
Leggi dalla tabella di origine e scrivi i dati come nuova tabella Iceberg utilizzando Spark su Amazon EMR oppure AWS Glue (vedi Creazione di una tabella
nella documentazione di Iceberg).
Scelta di una strategia di migrazione
Per scegliere la strategia di migrazione migliore, considera le domande nella tabella seguente.
Domanda |
Raccomandazione |
---|---|
Qual è il formato del file di dati (ad esempio, CSV o Apache Parquet)? |
|
Vuoi aggiornare o consolidare lo schema della tabella? |
|
La tabella trarrebbe vantaggio dalla modifica della strategia di partizione? |
|
La tabella trarrebbe vantaggio dall'aggiunta o dalla modifica della strategia di ordinamento? |
|
La tabella contiene molti file di piccole dimensioni? |
|