Utilizzo delle tabelle Apache Iceberg utilizzando Amazon Athena SQL - AWS Linee guida prescrittive

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. Come riferimento, consulta la sezione Creazione e scrittura di tabelle Iceberg precedente in questa guida.

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'SHOW CREATE TABLEistruzione per Spark).

Prefissi Amazon S3 casuali in oggetti scritti su una tabella Iceberg

Per impostazione predefinita, le tabelle Iceberg create con Athena hanno write.object-storage.enabled la proprietà abilitata.

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 nella documentazione di Iceberg.

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:

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:

Migrazione di una tabella Hive ad Amazon Athena

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:

  1. 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.

    AWS Glue Data Catalog impostazioni senza metadati Hive o Spark
  2. 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",
  3. Verifica che il tuo cluster Amazon EMR non sia connesso a AWS Glue Data Catalog show databases show tables

    Verifica che il cluster Amazon EMR non sia connesso a AWS Glue Data Catalog
  4. Registra la tabella Hive nel metastore Hive del tuo cluster Amazon EMR, quindi utilizza la procedura Iceberg. migrate

    Procedura di migrazione di Iceberg

    Questa procedura crea i file di metadati Iceberg nella stessa posizione della tabella Hive.

  5. Registra la tabella Iceberg migrata in. AWS Glue Data Catalog

  6. Torna a un cluster Amazon EMR con l' AWS Glue Data Catalog integrazione abilitata.

    AWS Glue Data Catalog impostazioni con metadati Spark
  7. 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.

Comando Mostra tabelle per la tabella Iceberg

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

  • Prendi in considerazione la migrazione sul posto se il formato di file tabellare è Parquet, ORC o Avro.

  • Per altri formati come CSV, JSON e così via, utilizza la migrazione completa dei dati.

Vuoi aggiornare o consolidare lo schema della tabella?

  • Se desideri far evolvere lo schema delle tabelle utilizzando le funzionalità native di Iceberg, prendi in considerazione la migrazione sul posto. Ad esempio, puoi rinominare le colonne dopo la migrazione. (Lo schema può essere modificato nel livello di metadati Iceberg.)

  • Se desideri eliminare intere colonne dai file di dati, ti consigliamo di utilizzare la migrazione completa dei dati.

La tabella trarrebbe vantaggio dalla modifica della strategia di partizione?

  • Se l'approccio di partizionamento di Iceberg soddisfa i tuoi requisiti (ad esempio, i nuovi dati vengono archiviati utilizzando il nuovo layout delle partizioni mentre le partizioni esistenti rimangono invariate), prendi in considerazione la migrazione sul posto.

  • Se desideri utilizzare partizioni nascoste nella tua tabella, prendi in considerazione la migrazione completa dei dati. Per ulteriori informazioni sulle partizioni nascoste, consulta la sezione Best practice.

La tabella trarrebbe vantaggio dall'aggiunta o dalla modifica della strategia di ordinamento?

  • L'aggiunta o la modifica dell'ordinamento dei dati richiede la riscrittura del set di dati. In questo caso, valuta la possibilità di utilizzare la migrazione completa dei dati.

  • Per le tabelle di grandi dimensioni in cui riscrivere tutte le partizioni delle tabelle è proibitivo, prendi in considerazione l'utilizzo della migrazione sul posto ed esegui la compattazione (con l'ordinamento abilitato) per le partizioni a cui si accede più frequentemente.

La tabella contiene molti file di piccole dimensioni?

  • L'unione di file di piccole dimensioni in file più grandi richiede la riscrittura del set di dati. In questo caso, valuta la possibilità di utilizzare la migrazione completa dei dati.

  • Per le tabelle di grandi dimensioni in cui riscrivere tutte le partizioni delle tabelle è proibitivo, prendi in considerazione l'utilizzo della migrazione sul posto ed esegui la compattazione (con l'ordinamento abilitato) per le partizioni a cui si accede più frequentemente.