AWS Partition Projections Migliorare le prestazioni delle query di Athena

Aumenta le prestazioni delle query di Athena con le Proiezioni di Partizione di AWS

Nell’attuale panorama basato sui dati, le organizzazioni si stanno sempre più rivolgendo a soluzioni robuste come AWS Data Lake per centralizzare quantità enormi di dati strutturati e non strutturati. AWS Data Lake, un repository scalabile e sicuro, consente alle aziende di archiviare i dati nel loro formato nativo, facilitando diverse analisi e attività di apprendimento automatico. Uno degli strumenti popolari per interrogare questa vasta riserva di informazioni è Amazon Athena, un servizio di interrogazione interattivo senza server che rende semplice analizzare i dati direttamente in Amazon S3 utilizzando lo standard SQL. Tuttavia, all’aumentare del volume di dati, possono sorgere sfide prestazionali. Grandi set di dati, interrogazioni complesse e strutture di tabelle non ottimali possono comportare tempi e costi di interrogazione maggiori, compromettendo potenzialmente i benefici stessi che queste soluzioni promettono. Questo articolo approfondisce specificamente i dettagli su come sfruttare la potenza delle proiezioni di partizioni per affrontare queste sfide prestazionali.

Prima di approfondire il concetto avanzato di proiezioni di partizioni in Athena, è essenziale comprendere l’idea fondamentale delle partizioni, soprattutto nel contesto di un data lake.

Che cosa sono le partizioni in AWS Data Lake?

Nell’ambito dell’archiviazione e del recupero dei dati, una partizione si riferisce a una divisione dei dati di una tabella in base ai valori di una o più colonne. Pensate ad essa come all’organizzazione di una vasta libreria (i vostri dati) in diverse sezioni (partizioni) basate sui generi (valori delle colonne). In questo modo, quando cercate un tipo specifico di libro (dato), dovete cercarlo solo nella sezione (partizione) pertinente anziché nell’intera libreria.

In un data lake, le partizioni sono tipicamente directory che contengono file di dati. Ogni directory corrisponde a un valore specifico o a un intervallo di valori delle colonne di partizionamento.

Perché le partizioni sono importanti?

Efficienza: Senza partizioni, l’interrogazione di enormi set di dati coinvolgerebbe la scansione di ogni singolo file, che è sia dispendioso in termini di tempo che di costo. Con le partizioni, vengono analizzate solo le directory pertinenti, riducendo significativamente la quantità di dati processati.

  • Risparmi di costi: Negli ambienti cloud come AWS, in cui si paga in base all’importo di dati analizzati, le partizioni possono portare a notevoli riduzioni dei costi.
  • Scalabilità: Con l’aumentare dei dati, aumenta anche l’importanza delle partizioni. Assicurano che anche se il data lake si espande con ulteriori dati, i tempi di recupero rimangano gestibili.

Sfide con le partizioni

Pur offrendo numerosi vantaggi, le partizioni non sono senza sfide:

  • Manutenzione: Con l’arrivo di nuovi dati, potrebbe essere necessario creare nuove partizioni e aggiornare quelle esistenti.
  • Partizionamento ottimale: Troppo poche partizioni possono significare che si sta comunque analizzando molti dati non necessari. Viceversa, troppe partizioni possono portare a un gran numero di file piccoli, che possono degradare le prestazioni.

Con questa comprensione di base delle partizioni in un data lake, possiamo ora approfondire il concetto di proiezioni di partizioni in Athena e come si propongono di affrontare alcune di queste sfide.

Che cosa sono le proiezioni di partizioni?

La potatura delle partizioni è una tecnica in cui vengono selezionati solo i metadati pertinenti a una determinata interrogazione, eliminando i dati non necessari. Questo metodo spesso rende più veloci le interrogazioni. Athena utilizza questa strategia per tutte le tabelle che hanno colonne partizionate. In uno scenario tipico, quando Athena elabora le interrogazioni, comunica prima con il catalogo dei dati di AWS Glue tramite una richiesta GetPartitions, dopodiché effettua la potatura delle partizioni. Tuttavia, se una tabella ha un ampio insieme di partizioni, questa chiamata può rallentare le cose.

Per evitare questa operazione costosa su una tabella molto partizionata, AWS ha introdotto la tecnica delle proiezioni di partizioni. Con la proiezione di partizioni, Athena non ha bisogno di effettuare la chiamata GetPartitions. Invece, la configurazione fornita nella proiezione di partizioni fornisce ad Athena tutto ciò di cui ha bisogno per creare autonomamente le partizioni.

Vantaggi delle proiezioni di partizioni

  • Miglioramento delle prestazioni delle interrogazioni: Riducendo la quantità di dati analizzati, le interrogazioni si eseguono più velocemente ed efficientemente.
  • Riduzione dei costi: Con Athena, si paga solo per i dati analizzati. Analizzando meno dati, i costi vengono ridotti al minimo.
  • Semplificazione della gestione dei dati: Le partizioni virtuali eliminano la necessità di continuare a mantenere le partizioni, ad esempio aggiungendo nuove partizioni quando arrivano nuovi dati.

Configurazione delle proiezioni di partizione

Per utilizzare le proiezioni di partizione:

1. Definire i tipi di proiezione: Athena supporta diversi tipi di proiezione, tra cui `integer,` `enum,` `date` e `injected.` Ogni tipo serve a uno specifico caso d’uso, come generare una serie di numeri interi o date.

2. Specificare la configurazione della proiezione: Questo implica definire le regole e i modelli per le proiezioni. Ad esempio, per una proiezione di data, si specifica la data di inizio, la data di fine e il formato della data.

3. Modificare le proprietà della tabella: Una volta definite le proiezioni, modificare le proprietà della tabella in Athena per utilizzare queste proiezioni.

Un esempio di caso d’uso

Prendiamo ad esempio una situazione in cui i nostri dati sono archiviati nel data lake e sono suddivisi per customer_id e dt. I dati sono archiviati nel formato parquet, che è un formato di dati columnar.

s3://my-bucket/data/customer_id/yyyy-MM-dd/*.parquet

Nel nostro esempio, supponiamo di avere dati per un anno, cioè 365 giorni e 100 clienti. Ciò comporterebbe 365*100=36500 partizioni nel data lake.

Effettuiamo un benchmark delle query su questa tabella con e senza le proiezioni di partizione abilitate.

Prendiamo il conteggio di tutti i record per l’intero anno per cinque clienti.

Query

Senza la proiezione di partizione

Senza le proiezioni di partizione abilitate, il tempo totale di esecuzione della query è di 7.3 secondi. Di questo, il 78% viene impiegato nella pianificazione e il 20% nell’esecuzione della query.

Risultati della query

Pianificazione: 78% = 5.6 secondiEsecuzione: 20% = 1.46 secondi

Con le proiezioni di partizione

Ora, abilitiamo la proiezione di partizione per questa tabella. Date un’occhiata a tutte le proprietà della tabella che hanno il suffisso “partition.*”. In questo esempio, poiché abbiamo due partizioni, dt e customer_id, utilizzeremo una proiezione di tipo data e per customer_id utilizzeremo una proiezione di tipo enum. Per i tipi di enum, è possibile creare un processo automatizzato per aggiornare la proprietà della tabella ogni volta che ci sono nuovi record.

Risultati della query

Pianificazione: 1.69 secondiEsecuzione: 0.6 secondi

Risultati

Possiamo notare un miglioramento approssimativo del 70% delle prestazioni della query. Ciò avviene perché Athena evita una chiamata remota a AWS glue per recuperare le partizioni, in quanto con questa funzionalità è in grado di proiettare i valori per queste partizioni.

Limitazioni e considerazioni

Nonostante la loro potenza, le proiezioni di partizione non risolvono tutti i problemi.

  • Configurazioni complesse: Impostare le proiezioni richiede una profonda comprensione dei dati e dei modelli che seguono.
  • Non sempre la soluzione migliore: Per i set di dati che non seguono pattern prevedibili o hanno aggiornamenti irregolari, potrebbe essere più adatta la partizionatura tradizionale.

Conclusione

L’introduzione da parte di AWS delle proiezioni di partizione in Athena è una testimonianza del loro impegno nell’ottimizzazione dell’esperienza e dell’efficienza degli utenti. Sfruttando questa funzionalità, le organizzazioni possono ottenere una performance di interrogazione più veloce con modifiche di configurazione minime. Come con tutti gli strumenti, comprendere i suoi punti di forza e le sue limitazioni è fondamentale per sfruttarne tutto il potenziale.