

 Amazon Redshift non supporterà più la creazione di nuove UDF Python a partire dalla Patch 198. Le UDF Python esistenti continueranno a funzionare fino al 30 giugno 2026. Per ulteriori informazioni, consulta il [post del blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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

# Riferimento alle tabelle Iceberg in Amazon Redshift
<a name="referencing-iceberg-tables"></a>

Amazon Redshift offre diversi modi per fare riferimento alle tabelle Apache Iceberg archiviate nel tuo data lake. È possibile utilizzare schemi esterni per creare riferimenti ai database Data Catalog contenenti tabelle Iceberg o utilizzare la notazione in tre parti per l'accesso diretto ai cataloghi montati automaticamente.

## Utilizzo di schemi esterni per fare riferimento alle tabelle Iceberg
<a name="referencing-iceberg-external-schemas"></a>

Gli schemi esterni forniscono un modo per fare riferimento alle tabelle nel tuo catalogo dati direttamente da Amazon Redshift. Quando crei uno schema esterno, stabilisci una connessione tra il tuo database Amazon Redshift e uno specifico database Data Catalog che contiene le tue tabelle Iceberg.

Per creare uno schema esterno per le tabelle Iceberg:

```
CREATE EXTERNAL SCHEMA {{schema_name}}
FROM DATA CATALOG
DATABASE '{{glue_database_name}}'
IAM_ROLE '{{arn:aws:iam::account-id:role/role-name}}';
```

Dopo aver creato lo schema esterno, puoi interrogare le tabelle Iceberg usando una notazione in due parti:

```
SELECT * FROM {{schema_name}}.{{iceberg_table_name}};
```

Puoi anche unire le tabelle Iceberg alle tabelle Amazon Redshift locali:

```
SELECT r.customer_id, i.order_date, r.customer_name
FROM local_customers r
JOIN {{schema_name}}.{{iceberg_orders}} i 
ON r.customer_id = i.customer_id;
```

## Utilizzo della notazione in tre parti con cataloghi montati automaticamente
<a name="referencing-iceberg-three-part-notation"></a>

Three-part la notazione consente di fare riferimento direttamente alle tabelle nei cataloghi montati automaticamente senza creare schemi esterni. Questo metodo è particolarmente utile quando si lavora con bucket da tavolo Amazon S3 federati con. AWS Lake Formation Per informazioni sulla configurazione del montaggio automatico del Data Catalog, consulta [Semplificare l'accesso agli oggetti esterni in Amazon Redshift utilizzando il montaggio automatico di](https://aws.amazon.com/blogs/big-data/simplify-external-object-access-in-amazon-redshift-using-automatic-mounting-of-the-aws-glue-data-catalog/). AWS Glue Data Catalog

La sintassi per la notazione in tre parti è:

```
{{"catalog_name"}}.{{database_name}}.{{table_name}}
```

Ad esempio, per interrogare una tabella Iceberg in un catalogo di tabelle Amazon S3 montato automaticamente:

```
SELECT * FROM "{{my_table_bucket}}@s3tablescatalog".{{my_database}}.{{my_iceberg_table}};
```

*Per ulteriori informazioni sull'integrazione dei bucket di tabelle di Amazon S3 con Amazon Redshift, [consulta Integrating S3 Tables with Amazon Redshift nella Amazon S3 User](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-tables-integrating-redshift.html) Guide.*

È inoltre possibile fare riferimento alle tabelle nel catalogo principale montato automaticamente`awsdatacatalog`, che fornisce l'accesso diretto ai database e alle tabelle registrati in: AWS Glue Data Catalog

```
SELECT * FROM awsdatacatalog.{{my_database}}.{{my_iceberg_table}};
```

*Per ulteriori informazioni sull'uso del catalogo `awsdatacatalog` principale, consulta la sezione [Interrogazione dei](https://docs.aws.amazon.com/redshift/latest/mgmt/query-editor-v2-glue.html) namespace AWS Glue Data Catalog nella *Amazon Redshift Management* Guide [e Managing Data Catalog](https://docs.aws.amazon.com/lake-formation/latest/dg/managing-namespaces-datacatalog.html) nella Developer Guide.AWS Lake Formation *

Puoi anche utilizzare l'`USE`istruzione per impostare un catalogo e un database predefiniti per i table bucket Amazon S3:

```
USE "{{my_table_bucket}}@s3tablescatalog".{{my_database}};
SELECT * FROM {{my_iceberg_table}};
```

Per impostare un percorso di ricerca per la risoluzione dello schema con i bucket di tabella Amazon S3:

```
USE "{{my_table_bucket}}@s3tablescatalog";
SET search_path TO {{my_database}};
SELECT * FROM {{my_iceberg_table}};
```

**Nota**  
L'`USE`istruzione e `search_path` sono supportate solo per. `s3tablescatalog` Non possono essere usati con`awsdatacatalog`. Per fare riferimento alle tabelle in`awsdatacatalog`, usa la notazione completa in tre parti.

## Procedure consigliate per fare riferimento alle tabelle Iceberg
<a name="referencing-iceberg-best-practices"></a>

Una tabella Apache Iceberg è una singola entità logica composta da più file: un file di metadati radice (metadata.json), elenchi manifest, file manifest e file di dati (tipicamente .parquet). Il file di metadati principale funge da punto di ingresso e contiene riferimenti a tutti gli altri file che compongono la tabella. Quando concedi ad Amazon Redshift l'accesso a una tabella Iceberg, Amazon Redshift utilizza il file di metadati root per scoprire e leggere tutti i file di dati di riferimento. Se Amazon Redshift ha accesso al file di metadati root, presuppone e richiede l'accesso anche a tutti i file di dati sottostanti. Ciò è coerente con il design di Iceberg, in cui l'accesso a livello di tabella è l'unità di autorizzazione prevista.

Per migliorare le prestazioni delle query, Amazon Redshift memorizza nella cache i file di metadati Iceberg (inclusi il file di metadati root, gli elenchi manifest e i file manifest) in memoria. Il file di metadati root (metadata.json) viene riconvalidato rispetto ad Amazon S3 a intervalli configurabili (TTL). Dopo la scadenza del TTL, Amazon Redshift esegue una richiesta Amazon S3 HEAD sul file di metadati root per verificare che il ruolo IAM abbia ancora accesso e che il file non sia stato modificato. Se il controllo delle autorizzazioni fallisce o il file è cambiato, la voce memorizzata nella cache viene rimossa e i metadati vengono recuperati nuovamente da Amazon S3. Poiché il file di metadati principale è il punto di ingresso per tutti gli accessi alla tabella, questa riconvalida funge da porta di autorizzazione per l'intera tabella. Gli elenchi di manifesto e i file manifest vengono memorizzati nella cache senza una riconvalida TTL indipendente: la loro validità di accesso deriva dal controllo delle autorizzazioni dei metadati principali. Ciò significa che se revochi le autorizzazioni Amazon S3 su una tabella Iceberg, le query possono continuare ad avere esito positivo per un massimo di 2 minuti utilizzando i metadati memorizzati nella cache.

**Importante**  
Amazon S3 consente di impostare le autorizzazioni a livello di singolo oggetto, il che significa che è tecnicamente possibile concedere l'accesso ai metadati di una tabella Iceberg limitando l'accesso ad alcuni dei file di dati sottostanti. Ciò crea un'incoerenza tra le autorizzazioni che può portare a errori di query o errori di accesso imprevisti in Amazon Redshift.

Amazon Redshift convalida periodicamente l'accesso al file di metadati root memorizzato nella cache, ma non convalida né impone la coerenza tra le autorizzazioni a livello di metadati e a livello di file di dati all'interno del bucket Amazon S3. È responsabilità del cliente garantire che le autorizzazioni vengano applicate in modo coerente a tutti i file che costituiscono una tabella Iceberg.

Per evitare ciò, considera le seguenti best practice quando fai riferimento alle tabelle Iceberg in Amazon Redshift:
+ **Usa nomi di schemi descrittivi**: quando crei schemi esterni, usa nomi che indichino chiaramente l'origine e lo scopo dei dati, come o. `sales_data_lake` `customer_analytics`
+ **Sfrutta le statistiche delle tabelle**: assicurati che le statistiche delle colonne vengano generate per le tue tabelle Iceberg, AWS Glue utilizzandole per ottimizzare le prestazioni delle query. Amazon Redshift utilizza queste statistiche per la pianificazione e l'ottimizzazione delle query.
+ **Considera l'aggiornamento dei dati**: le tabelle Iceberg possono essere aggiornate da altri servizi mentre le interroghi. Amazon Redshift offre coerenza transazionale, garantendo un'istantanea coerente dei dati durante l'esecuzione delle query.
+ **Usa le autorizzazioni IAM appropriate**: assicurati che il tuo cluster o gruppo di lavoro Amazon Redshift disponga delle autorizzazioni IAM necessarie per accedere alle posizioni Amazon S3 in cui sono archiviate le tabelle Iceberg e ai metadati del Data Catalog.
+ Autorizzazioni **a livello di tabella: concedi le autorizzazioni** a livello di tabella, non a livello di singolo file.
+ **Autorizzazioni uniformi**: assicura un accesso uniforme all'intero percorso Amazon S3 per la tabella Iceberg, inclusi tutti i metadati, i file manifest e i file di dati.
+ **Evita politiche restrittive a livello di oggetto: non impostate politiche** restrittive a livello di oggetto su singoli file Parquet all'interno del prefisso di una tabella Iceberg.
+ **Comprendi la memorizzazione nella cache del TTL per le modifiche alle autorizzazioni**: quando revochi le autorizzazioni di Amazon S3 su una tabella Iceberg, le query possono continuare ad avere esito positivo utilizzando i metadati root memorizzati nella cache fino alla durata TTL configurata (impostazione predefinita: 2 minuti).
+ **Monitora le prestazioni delle query**: utilizza le funzionalità di monitoraggio delle query di Amazon Redshift per monitorare le prestazioni delle query rispetto alle tabelle Iceberg e ottimizzarle in base alle esigenze.

## Schemi di riferimento comuni
<a name="referencing-iceberg-examples"></a>

Gli esempi seguenti mostrano modelli comuni per fare riferimento alle tabelle Iceberg:

**Aggregazione di dati su più tabelle Iceberg:**

```
SELECT 
    region,
    SUM(sales_amount) as total_sales,
    COUNT(*) as transaction_count
FROM data_lake.sales_transactions
WHERE transaction_date >= '2024-01-01'
GROUP BY region
ORDER BY total_sales DESC;
```

**Unire le tabelle Iceberg alle tabelle Amazon Redshift locali:**

```
SELECT 
    c.customer_name,
    c.customer_tier,
    SUM(o.order_amount) as total_orders
FROM customers c
JOIN data_lake.order_history o ON c.customer_id = o.customer_id
WHERE o.order_date >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY c.customer_name, c.customer_tier;
```

**Utilizzo della notazione in tre parti con query complesse:**

```
WITH recent_orders AS (
    SELECT customer_id, order_date, order_amount
    FROM "analytics_bucket@s3tablescatalog".ecommerce.orders
    WHERE order_date >= CURRENT_DATE - INTERVAL '7 days'
)
SELECT 
    customer_id,
    COUNT(*) as order_count,
    AVG(order_amount) as avg_order_value
FROM recent_orders
GROUP BY customer_id
HAVING COUNT(*) > 1;
```