Amazon Redshift non supporterà più la creazione di nuove UDF Python a partire dal 1º novembre 2025. Se desideri utilizzare le UDF Python, creale prima di tale data. Le UDF Python esistenti continueranno a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog
Prestazioni delle query di Amazon Redshift Spectrum
In questo argomento viene illustrato come migliorare le prestazioni delle query Redshift Spectrum.
Esaminare il piano di query per determinare quali fasi sono state inviate al livello di Amazon Redshift Spectrum.
Le fasi seguenti sono correlate alla query di Redshift Spectrum:
-
S3 Seq Scan
-
S3 HashAggregate
-
S3 Query Scan
-
Seq Scan PartitionInfo
-
Partition Loop
Il seguente esempio mostra un piano di query per una query che unisce in join una tabella esterna a una tabella locale. Notare che le fasi S3 Seq Scan e S3 HashAggregate sono state eseguite sui dati in Amazon S3.
explain select top 10 spectrum.sales.eventid, sum(spectrum.sales.pricepaid) from spectrum.sales, event where spectrum.sales.eventid = event.eventid and spectrum.sales.pricepaid > 30 group by spectrum.sales.eventid order by 2 desc;
QUERY PLAN ----------------------------------------------------------------------------- XN Limit (cost=1001055770628.63..1001055770628.65 rows=10 width=31) -> XN Merge (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Merge Key: sum(sales.derived_col2) -> XN Network (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Send to leader -> XN Sort (cost=1001055770628.63..1001055770629.13 rows=200 width=31) Sort Key: sum(sales.derived_col2) -> XN HashAggregate (cost=1055770620.49..1055770620.99 rows=200 width=31) -> XN Hash Join DS_BCAST_INNER (cost=3119.97..1055769620.49 rows=200000 width=31) Hash Cond: ("outer".derived_col1 = "inner".eventid) -> XN S3 Query Scan sales (cost=3010.00..5010.50 rows=200000 width=31) -> S3 HashAggregate (cost=3010.00..3010.50 rows=200000 width=16) -> S3 Seq Scan spectrum.sales location:"s3://redshift-downloads/tickit/spectrum/sales" format:TEXT (cost=0.00..2150.00 rows=172000 width=16) Filter: (pricepaid > 30.00) -> XN Hash (cost=87.98..87.98 rows=8798 width=4) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=4)
Nota i seguenti elementi nel piano di query:
-
Il nodo
S3 Seq Scanmostra che il filtropricepaid > 30.00è stato elaborato nel livello di Redshift Spectrum.Un nodo di filtro sotto il nodo
XN S3 Query Scanindica l'elaborazione di predicati in Amazon Redshift sopra i dati restituiti dal livello di Redshift Spectrum. -
Il nodo
S3 HashAggregateindica l'aggregazione nel livello Redshift Spectrum per il gruppo mediante la clausola (group by spectrum.sales.eventid).
Per migliorare le prestazioni di Redshift Spectrum procedi come segue:
-
Utilizza file di dati in formato Apache Parquet. Parquet archivia i dati in un formato a colonne, di conseguenza Redshift Spectrum può eliminare le colonne non necessarie dalla scansione. Se i dati sono in un formato file di testo, Redshift Spectrum deve eseguire la scansione dell'intero file.
-
Utilizza più file per ottimizzare l'elaborazione parallela. Fai in modo che le dimensioni dei file siano superiori a 64 MB. Evita l'asimmetria nella dimensione dei dati mantenendo i file all'incirca della stessa dimensione. Per informazioni sui file Apache Parquet e suggerimenti di configurazione, consulta Formato dei file: configurazioni
nella documentazione di Apache Parquet. -
Utilizza il minor numero di colonne possibile nelle query.
-
Inserire le tabelle dei fatti di grandi dimensioni in Amazon S3 e le tabelle delle dimensioni più piccole utilizzate di frequente nel database Amazon Redshift locale.
-
Aggiorna le statistiche delle tabelle esterne impostando il parametro TABLE PROPERTIES numRows. Utilizzare CREATE EXTERNAL TABLE o ALTER TABLE per impostare il parametro TABLE PROPERTIES numRows allo scopo di riflettere il numero di righe nella tabella. Amazon Redshift non analizza le tabelle esterne per generare le statistiche delle tabelle che l'ottimizzatore di query utilizza per generare un piano di query. Se le statistiche della tabella non sono impostate per una tabella esterna, Amazon Redshift genera un piano di esecuzione della query. Amazon Redshift genera questo piano in base al presupposto che le tabelle esterne sono le tabelle più grandi e che quelle locali sono le più piccole.
-
Il pianificatore di query di Amazon Redshift, quando possibile, trasmette i predicati e le aggregazioni al livello di query di Redshift Spectrum. Quando da Amazon S3 sono restituite grandi quantità di dati, l'elaborazione è limitata dalle risorse del cluster. Redshift Spectrum esegue un dimensionamento automatico per elaborare le richieste di grandi dimensioni. Di conseguenza, le prestazioni globali migliorano ogni volta che trasmetti l'elaborazione al livello di Redshift Spectrum.
-
Scrivi le query per utilizzare filtri e aggregazioni che possono essere trasmessi al livello di Redshift Spectrum.
Di seguito sono riportati esempi di alcune operazioni che possono essere trasmesse al livello di Redshift Spectrum:
-
Clausole GROUP BY
-
Condizioni di confronto e di corrispondenza di modelli, come LIKE.
-
Funzioni di aggregazione come COUNT, SUM, AVG, MIN e MAX.
-
Funzioni di stringa.
Le operazioni che non possono essere trasmesse al livello di Redshift Spectrum includono DISTINCT e ORDER BY.
-
-
Utilizza le partizioni per limitare i dati sottoposti a scansione. Partiziona i dati in base ai predicati di query più comuni, quindi riduci le partizioni filtrandone le colonne. Per ulteriori informazioni, consultare Partizionamento delle tabelle esterne di Redshift Spectrum.
Eseguire una query su SVL_S3PARTITION per visualizzare le partizioni totali e quelle qualificate.
-
Usa il generatore di statistiche AWS Glue per calcolare le statistiche a livello di colonna per le tabelle del AWS Glue Data Catalog. Una volta che AWS Glue ha generato le statistiche per le tabelle nel catalogo dati, Amazon Redshift Spectrum le utilizza automaticamente per ottimizzare il piano di query. Per ulteriori informazioni sull'utilizzo delle statistiche a livello di colonna con AWS Glue, consulta Utilizzo delle statistiche delle colonne nella Guida per gli sviluppatori di AWS Glue.