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
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
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
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 SCHEMAschema_nameFROM 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 * FROMschema_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 JOINschema_name.iceberg_ordersi ON r.customer_id = i.customer_id;
Utilizzo della notazione in tre parti con cataloghi montati automaticamente
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
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 Guide.
È inoltre possibile fare riferimento alle tabelle nel catalogo principale montato automaticamenteawsdatacatalog, 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 namespace AWS Glue Data Catalog nella Amazon Redshift Management Guide e Managing Data Catalog nella Developer Guide.AWS Lake Formation
Puoi anche utilizzare l'USEistruzione per impostare un catalogo e un database predefiniti per i table bucket Amazon S3:
USE "my_table_bucket@s3tablescatalog".my_database; SELECT * FROMmy_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 TOmy_database; SELECT * FROMmy_iceberg_table;
Nota
L'USEistruzione e search_path sono supportate solo per. s3tablescatalog Non possono essere usati conawsdatacatalog. Per fare riferimento alle tabelle inawsdatacatalog, usa la notazione completa in tre parti.
Procedure consigliate per fare riferimento alle tabelle Iceberg
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_lakecustomer_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
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;