View a markdown version of this page

Funzionalità di Apache Iceberg v3 in Amazon Redshift - Amazon Redshift

Amazon Redshift non supporterà più l'uso delle UDF Python dopo il 30 giugno 2026. Inizieremo ad applicarlo per fasi. Per ulteriori informazioni sulla fine del ciclo di vita e sulle opzioni di migrazione di Python, consulta il post del blog pubblicato il 30 giugno 2025.

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

Funzionalità di Apache Iceberg v3 in Amazon Redshift

Amazon Redshift supporta le tabelle Apache Iceberg v3. Iceberg v3 introduce i valori di colonna predefiniti, il tracciamento della discendenza delle righe e i vettori di cancellazione. È possibile creare nuove tabelle v3 o aggiornare le tabelle v2 esistenti alla v3.

Le tabelle Iceberg v3 utilizzano la stessa sintassi SQL per le query e le operazioni DML (INSERT, DELETE, UPDATE, MERGE) delle tabelle v2. Le funzionalità descritte in questa pagina sono specifiche di Iceberg v3.

Creazione di una tabella Iceberg v3

Per creare una tabella Iceberg v3, specificare 'format-version'='3' nella clausola TABLE PROPERTIES:

CREATE TABLE external_schema.table_name ( column_name data_type [DEFAULT literal_value] [, ...] ) USING ICEBERG LOCATION 's3://your-bucket-name/prefix/' [PARTITIONED BY [[column_name | transform_function]], ...] TABLE PROPERTIES ('format-version'='3' [, 'compression_type'='compression_value']);

Esempio:

CREATE TABLE my_schema.orders ( id int, status varchar DEFAULT 'pending', priority int DEFAULT 0 ) USING ICEBERG LOCATION 's3://amzn-s3-demo-bucket/orders/' TABLE PROPERTIES ('format-version'='3');

Se non specifichi format-version, Amazon Redshift crea la tabella come Iceberg v2.

Aggiornamento da v2 a v3

Puoi aggiornare una tabella Iceberg v2 esistente alla v3:

ALTER TABLE iceberg_table SET TABLE PROPERTIES ('format-version' = '3');

L'aggiornamento della versione del formato è un'operazione che riguarda solo i metadati. I file di dati esistenti non vengono riscritti. I file di eliminazione posizionale v2 esistenti rimangono validi e vengono applicati durante le letture. La prima operazione di scrittura dopo un aggiornamento genera valori di derivazione delle righe per l'intera tabella. Nelle successive operazioni DELETE, UPDATE o MERGE, Amazon Redshift unisce le eliminazioni posizionali v2 in vettori di eliminazione per i file di dati interessati dall'operazione.

Importante

Prima di eseguire l'aggiornamento a Iceberg v3, consulta la Limitazioni sezione, poiché alcune funzionalità non sono ancora supportate per le tabelle v3. Poiché il downgrade dalla v3 alla v2 non è supportato, assicurati che le funzionalità non supportate non influiscano sui carichi di lavoro prima di procedere con l'aggiornamento.

Limitazioni

  • Puoi utilizzare Iceberg v3 solo su cluster Serverless Amazon Redshift (tranne quello a 4 RPU) e su cluster con provisioning che utilizzano tipi di istanze RG.

  • Non puoi leggere o scrivere tipi complessi (struct, list, map, variant) nelle tabelle Iceberg v3.

  • Non puoi utilizzare i seguenti tipi di dati nelle tabelle Iceberg v3: struct, list, map, variant, geometry, geography, binary, uuid, time, timestamp_ns, timestamptz_ns e unknown.

  • Non puoi usare tabelle Iceberg v3 che contengono cancellazioni di uguaglianza.

  • Non è possibile creare viste materializzate sulle tabelle Iceberg v3.

  • Dopo aver aggiornato una tabella alla v3, il tipo di Iceberg viene mappato al timestamptz tipo Amazon Redshift TIMESTAMPTZ anziché a TIMESTAMP (utilizzato nella v2). Di conseguenza, le tue query restituiscono timestamp che includono informazioni sul fuso orario.

Valori di colonna predefiniti

I valori di colonna predefiniti sono supportati solo per le tabelle Iceberg v3. Amazon Redshift restituisce un errore se si specifica un valore predefinito su una tabella Iceberg v2.

I valori predefiniti specificano un valore letterale a cui fa riferimento una colonna quando non è presente alcun valore esplicito. Con questo, puoi aggiungere nuove colonne a una tabella esistente senza riscrivere i file di dati. Le letture di file di dati scritti in precedenza restituiscono automaticamente il valore predefinito per la nuova colonna. L'impostazione predefinita viene scritta anche quando un'istruzione DML omette la colonna o specifica DEFAULT come valore.

Come valori predefiniti sono supportati solo i valori letterali. I tipi di dati annidati non supportano i valori predefiniti.

CREATE TABLE AS SELECT non eredita i valori di colonna predefiniti dalla tabella di origine. Per definire i valori predefiniti sulla nuova tabella, usa ALTER TABLE ALTER COLUMN SET DEFAULT dopo la creazione.

Definizione dei valori predefiniti alla creazione della tabella

CREATE TABLE external_schema.table_name ( column_name data_type DEFAULT literal_value [, ...] ) USING ICEBERG LOCATION '...' TABLE PROPERTIES ('format-version'='3');

Aggiungere una colonna con un valore predefinito

ALTER TABLE iceberg_table ADD COLUMN column_name data_type DEFAULT literal_value;

I file di dati esistenti restituiscono il valore predefinito per la colonna appena aggiunta senza richiedere una riscrittura dei dati.

Modifica o rimozione di un valore predefinito

ALTER TABLE iceberg_table ALTER COLUMN column_name SET DEFAULT literal_value; ALTER TABLE iceberg_table ALTER COLUMN column_name DROP DEFAULT;

SET DEFAULT modifica il valore predefinito di una colonna esistente. La nuova impostazione predefinita si applica ai file di dati scritti dopo la modifica. I file di dati esistenti continuano a utilizzare l'impostazione predefinita precedente.

DROP DEFAULT rimuove il valore predefinito da una colonna. Dopo questa operazione, le nuove scritture non applicano più un valore predefinito per la colonna. I file di dati che non contengono la colonna continuano a restituire il valore predefinito iniziale della colonna.

Comportamento INSERT

Quando si inseriscono righe senza specificare una colonna con un valore predefinito, il valore predefinito viene scritto nel file di dati.

SHOW TABLE

SHOW TABLE visualizza i valori predefiniti nel relativo output.

Discendenza delle righe

La derivazione delle righe è supportata solo per le tabelle Iceberg v3. Fornisce due pseudo-colonne che tengono traccia dell'identità delle righe e della cronologia delle modifiche. Queste colonne vengono gestite automaticamente da Amazon Redshift. Non si impostano i loro valori.

Pseudo-columns

Colonna Tipo di dati Description
_row_id BIGINT Identifica in modo univoco ogni riga della tabella. Assegnato automaticamente durante le operazioni di scrittura.
_last_updated_sequence_number BIGINT Il numero di sequenza dell'istantanea dell'ultima operazione di scrittura che ha modificato la riga.

Interrogazione della derivazione delle righe

Le colonne della derivazione delle righe devono essere denominate in modo esplicito nell'elenco SELECT. Non sono incluse in SELECT *.

SELECT _row_id, _last_updated_sequence_number, * FROM my_schema.my_iceberg_v3_table;

È possibile utilizzare le colonne di derivazione delle righe nelle clausole WHERE, ORDER BY, GROUP BY e JOIN:

SELECT * FROM my_schema.my_iceberg_v3_table WHERE _last_updated_sequence_number >= 3 ORDER BY _row_id;

Comportamento su tabelle non v3

Quando si esegue una query su una tabella v3 non Iceberg e si restituisce NULL. _row_id _last_updated_sequence_number

Comportamento dopo l'aggiornamento da v2 a v3

Per le tabelle aggiornate da Iceberg v2 a v3, i valori della derivazione delle righe non sono immediatamente disponibili per i dati precedenti all'aggiornamento. Entrambi _row_id _last_updated_sequence_number restituiscono NULL fino alla prima operazione di scrittura dopo l'aggiornamento, che genera valori di derivazione delle righe per l'intera tabella. Si tratta di un'operazione che riguarda solo i metadati e non riscrive i file di dati esistenti.

Comportamento di scrittura

La derivazione delle righe viene compilata automaticamente da Amazon Redshift in tutte le operazioni di scrittura (INSERT, CTAS, UPDATE, MERGE). Ogni riga riceve un numero univoco _row_id e _last_updated_sequence_number riflette il numero di sequenza dell'istantanea del commit che ha scritto la riga.

Limitazioni

  • Le colonne relative alla derivazione delle righe non sono incluse in SELECT *.

  • La derivazione delle righe non è supportata per le tabelle Iceberg v2 o precedenti.

  • Pre-upgrade i dati nelle tabelle aggiornate da v2 a v3 restituiscono NULL per entrambe le pseudo-colonne fino alla prima operazione di scrittura dopo l'aggiornamento.

Vettori di cancellazione

I vettori di cancellazione sono il meccanismo utilizzato da Iceberg v3 per tenere traccia delle eliminazioni a livello di riga. Sostituiscono i file di eliminazione posizionali utilizzati da Iceberg v2.

Quando esegui DELETE, UPDATE o MERGE su una tabella Iceberg v3, Amazon Redshift registra le posizioni delle righe eliminate nei vettori di eliminazione anziché scrivere file di eliminazione posizionali separati. Questa operazione viene gestita automaticamente. Non sono necessarie modifiche alla sintassi SQL.

Come funzionano i vettori di cancellazione

Un vettore di cancellazione è una bitmap compressa che registra le posizioni delle righe in un file di dati che sono state eliminate. I vettori di cancellazione sono memorizzati nei file Puffin nella stessa posizione S3 dei dati della tabella. Ogni file di dati ha al massimo un vettore di cancellazione.

Durante la lettura di una tabella Iceberg v3, Amazon Redshift applica automaticamente i vettori di eliminazione per escludere le righe eliminate dai risultati delle query.

Vantaggi rispetto all'eliminazione posizionale dei file

  • I vettori di eliminazione sono più compatti dei file di eliminazione posizionale.

  • Un singolo vettore di cancellazione per file di dati evita l'accumulo di molti file di eliminazione di piccole dimensioni.

  • Le eliminazioni successive sullo stesso file di dati producono un nuovo vettore di eliminazione che unisce le eliminazioni precedenti con le nuove posizioni eliminate, mantenendo un unico vettore di eliminazione per file di dati.

  • Poiché i vettori di eliminazione sono più compatti ed evitano l'accumulo di molti file di piccole dimensioni, le letture e le scritture sono più veloci rispetto ai file di eliminazione posizionale Iceberg v2.

Comportamento dopo l'aggiornamento da v2 a v3

Dopo l'aggiornamento di una tabella da Iceberg v2 a v3, i file di eliminazione posizionale v2 esistenti rimangono validi e vengono applicati durante le letture. Nelle successive operazioni di scrittura (DELETE, UPDATE o MERGE), Amazon Redshift unisce le eliminazioni posizionali v2 esistenti in vettori di eliminazione, come definito dalla specifica Iceberg.

Limitazioni

  • I vettori di cancellazione non sono supportati per le tabelle Iceberg v2 o precedenti.

  • Le tabelle Iceberg v3 non possono ricorrere ai file di eliminazione posizionali per nuove operazioni di scrittura. Ciò significa che le tabelle Iceberg v3 possono leggere i file di eliminazione posizionale esistenti, ma non è possibile aggiungere nuovi file di eliminazione posizionale. Invece, le tabelle Iceberg v3 possono aggiungere nuove eliminazioni solo utilizzando i vettori di eliminazione.