Partizionamento dei dati - AWS Glue

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

Partizionamento dei dati

Cos'è il partizionamento?

Il partizionamento dei dati è una tecnica che divide set di dati di grandi dimensioni in segmenti più piccoli e più gestibili chiamati partizioni. Nel contesto delle integrazioni AWS Glue Zero-ETL, il partizionamento organizza i dati nella posizione di destinazione in base a valori di colonna specifici o trasformazioni di tali valori.

Vantaggi del partizionamento dei dati

Un partizionamento efficace dei dati offre diversi vantaggi chiave per i carichi di lavoro di analisi:

  • Prestazioni di query migliorate: le query possono saltare le partizioni irrilevanti (potatura delle partizioni), riducendo la quantità di dati da scansionare.

  • Costi ridotti: scansionando meno dati, puoi ridurre i costi di calcolo e i costi per le tue query di analisi. I/O

  • Migliore scalabilità: il partizionamento consente l'elaborazione parallela dei segmenti di dati, consentendo una scalabilità più efficiente dei carichi di lavoro di analisi.

  • Gestione semplificata del ciclo di vita dei dati: è possibile gestire le policy di conservazione a livello di partizione, semplificando l'archiviazione o l'eliminazione dei dati più vecchi.

Concetti chiave del partizionamento

Colonne di partizione

Colonne dei dati utilizzate per determinare come i record sono organizzati in partizioni. Delle colonne di partizione efficaci devono essere allineate ai modelli di query più comuni e avere una cardinalità appropriata.

Funzioni di partizionamento

Trasformazioni applicate ai valori delle colonne di partizione per creare i limiti effettivi delle partizioni. Gli esempi includono l'identità (utilizzando il valore grezzo) e le funzioni basate sul tempo (anno, mese, giorno, ora).

Potatura delle partizioni

Il processo in cui il motore di query identifica e salta le partizioni che non contengono dati pertinenti per una query, migliorando in modo significativo le prestazioni.

Granularità delle partizioni

Il livello di dettaglio con cui i dati vengono partizionati. Una granularità più precisa (più partizioni) può migliorare le prestazioni delle query ma può aumentare il sovraccarico dei metadati. Una granularità più grossolana (meno partizioni) riduce il sovraccarico dei metadati, ma può comportare la scansione di più dati del necessario.

Partizionamento nelle integrazioni AWS Glue Zero-ETL

AWS Le integrazioni Glue Zero-ETL utilizzano il formato di tabella Apache Iceberg, che fornisce funzionalità di partizionamento avanzate. Quando si crea un'integrazione Zero-ETL, è possibile:

  • Utilizzare strategie di partizionamento predefinite ottimizzate per la propria origine dati

  • Definire specifiche di partizionamento personalizzate in base ai propri modelli di query

  • Applicare trasformazioni alle colonne delle partizioni (particolarmente utile per il partizionamento basato su timestamp)

  • Combinare più strategie di partizione per un partizionamento a più livelli

Le configurazioni di partizionamento vengono specificate tramite l'API CreateIntegrationTableProperty durante la configurazione dell'integrazione Zero-ETL. Una volta configurato, AWS Glue applica automaticamente queste strategie di partizionamento per organizzare i dati nella posizione di destinazione.

Riferimento all'API di specificazione delle partizioni

Utilizza i seguenti parametri nell' CreateIntegrationTableProperties API per configurare il partizionamento:

PartitionSpec

Un array di specifiche di partizione che definisce il modo in cui i dati vengono partizionati nella posizione di destinazione.

{ "partitionSpec": [ { "fieldName": "timestamp_col", "functionSpec": "month", "conversionSpec": "epoch_milli" }, { "fieldName": "category", "functionSpec": "identity" } ] }
FieldName

Una stringa UTF-8 (1-128 byte) che specifica il nome della colonna da utilizzare per il partizionamento.

FunctionSpec

Specifica la funzione di partizionamento. Valori validi:

  • identity - Utilizza i valori di origine direttamente senza trasformazione

  • year: estrae l'anno dai valori di timestamp (ad es., 2023)

  • month: estrae il mese dai valori di timestamp (ad es., 2023-01)

  • day: estrae il giorno dai valori di timestamp (ad es., 2023-01-15)

  • hour - Estrae l'ora dai valori del timestamp (ad esempio, 2023-01-15-14)

Nota

Le funzioni basate sul tempo (year, month, day, hour) richiedono il parametro ConversionSpec per specificare il formato del timestamp di origine.

ConversionSpec

Una stringa UTF-8 che specifica il formato del timestamp dei dati di origine. I valori validi sono:

  • epoch_sec: timestamp epoch Unix in secondi

  • epoch_milli: timestamp epoch Unix in millisecondi

  • iso - Timestamp in formato ISO 8601

Strategie di partizionamento

Partizionamento predefinito

Quando non viene specificata alcuna colonna di partizione, AWS Glue Zero-ETL applica strategie di partizionamento predefinite ottimizzate per la fonte di dati:

  • Partizionamento basato sulla chiave primaria: per le orgini con chiavi primarie (come le tabelle DynamoDB), Glue Zero-ETL di AWS partiziona automaticamente i dati utilizzando la chiave primaria con bucketing per prevenire l'esplosione delle partizioni.

Il partizionamento predefinito è progettato per funzionare bene con i modelli di query più comuni senza richiedere una configurazione manuale. Tuttavia, per modelli di query o requisiti prestazionali specifici, è possibile definire strategie di partizionamento personalizzate.

Strategie di partizionamento definite dall'utente

AWS Glue zero-ETL consente di definire strategie di partizionamento personalizzate utilizzando il parametro. PartitionSpec È possibile specificare una o più colonne di partizione e applicare diverse funzioni di partizionamento a ciascuna colonna.

Il partizionamento delle identità utilizza i valori grezzi di una colonna per creare partizioni. Questa strategia è utile per le colonne con cardinalità da bassa a media, come i campi di categoria, regione o stato.

Esempio Esempio di partizionamento delle identità
{ "partitionSpec": [ { "fieldName": "category", "functionSpec": "identity" } ] }

Questo crea partizioni separate per ogni valore univoco nella colonna “categoria”.

avvertimento

Evitare di utilizzare il partizionamento delle identità con colonne ad alta cardinalità (come chiavi primarie o timestamp) poiché può portare a un'esplosione delle partizioni, che riduce le prestazioni e aumenta il sovraccarico dei metadati.

Il partizionamento basato sul tempo organizza i dati in base ai valori di timestamp con diverse granularità (anno, mese o giorno). Questa strategia è ideale per i dati di serie temporali e consente di eseguire query efficienti su intervalli di tempo.

Quando si utilizza il partizionamento basato sul tempo, AWS Glue Zero-ETL può convertire automaticamente vari formati di timestamp in un formato standardizzato prima di applicare la funzione di partizione. Questa conversione viene specificata utilizzando il parametro ConversionSpec.

Esempio Esempio di partizionamento basato sul tempo
{ "partitionSpec": [ { "fieldName": "created_at", "functionSpec": "month", "conversionSpec": "epoch_milli" } ] }

Questo partiziona i dati per mese in base alla colonna “created_at”, che contiene i timestamp epoch Unix in millisecondi.

AWS Glue Zero-ETL supporta le seguenti funzioni di partizione basate sul tempo:

  • anno: partiziona i dati per anno (ad esempio: 2023, 2024)

  • mese: partiziona i dati per mese (ad esempio: 2023-01, 2023-02)

  • giorno: partiziona i dati per giorno (ad esempio: 2023-01-01, 2023-01-02)

  • ora: partiziona i dati per ora (ad esempio: 2023-01-01-01, 2023-01-01-02)

AWS Glue zero-ETL supporta i seguenti formati di timestamp tramite il parametro: ConversionSpec

  • epoch_sec: timestamp epoch Unix in secondi

  • epoch_milli: timestamp epoch Unix in millisecondi

  • iso: timestamp in formato ISO 8601

Nota

I valori delle colonne originali rimangono invariati nei dati di origine. AWS Glue trasforma solo i valori delle colonne di partizione in Timestamp Type nella tabella del database di destinazione. Le trasformazioni si applicano solo al processo di partizionamento.

Il partizionamento a più livelli combina più strategie di partizione per creare uno schema di partizionamento gerarchico. Ciò è utile per ottimizzare diversi tipi di query sullo stesso set di dati.

Esempio Esempio di partizionamento a più livelli
{ "partitionSpec": [ { "fieldName": "created_at", "functionSpec": "month", "conversionSpec": "iso" }, { "fieldName": "region", "functionSpec": "identity" } ] }

Questo crea uno schema di partizionamento a due livelli: prima per mese (dalla colonna “created_at”), poi per regione. Ciò consente query efficienti che filtrano per intervalli di date, aree specifiche o una combinazione di queste dimensioni.

Quando si progettano schemi di partizionamento a più livelli, considerare:

  • Posizionamento delle colonne con selettività più elevata al primo posto nella gerarchia delle partizioni

  • Bilanciamento della granularità delle partizioni con il numero delle partizioni

  • Allineamento dello schema di partizionamento con i modelli di query più comuni

Best practice

Selezione delle colonne di partizione

  • Non utilizzare colonne ad alta cardinalità con la funzione di partizione identity. L'utilizzo di colonne ad alta cardinalità con partizionamento delle identità crea molte partizioni di piccole dimensioni, che possono ridurre in modo significativo le prestazioni di inserimento. Le colonne ad alta cardinalità possono includere:

    • Chiavi primarie

    • Campi timestamp (come LastModifiedTimestamp, CreatedDate)

    • Timestamp generati dal sistema

  • Non selezionare più partizioni di timestamp sulla stessa colonna. Esempio:

    "partitionSpec": [ {"fieldName": "col1", "functionSpec": "year", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "month", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "day", "conversionSpec" : "epoch_milli"}, {"fieldName": "col1", "functionSpec": "hour", "conversionSpec" : "epoch_milli"} ]

FunctionSpec/ConversionSpec Selezione della partizione

  • Specificate il formato corretto ConversionSpec (epoch_sec | epoch_milli | iso) che rappresenta il formato dei valori delle colonne scelti per il partizionamento basato sul timestamp quando si utilizzano le funzioni di partizione basate sul timestamp. AWS Glue Zero-ETL utilizza questo parametro per trasformare correttamente i dati di origine in formato timestamp prima del partizionamento.

  • Utilizzate la granularità appropriata () in base al volume di dati. year/month/day/hour

  • Considerate le implicazioni relative al fuso orario quando utilizzate i timestamp ISO. AWS Glue zero-ETL popola tutti i valori dei record della colonna timestamp scelta con il fuso orario UTC.

Gestione degli errori

Stato NEEDS_ATTENTION

Un'integrazione entra nello stato NEEDS_ATTENTION quando:

  • Le colonne di partizione specificate non esistono nell'origine

  • La conversione del timestamp non riesce per le colonne di partizione