2014-10-13 6 views
5

Ho un grande set di dati su S3 sotto forma di poche centinaia di file CSV che sono ~ 1,7 TB in totale (non compressi). Sto provando a copiarlo su una tabella vuota su un cluster Redshift.Perché le query di Redshift COPY utilizzano (molto) più spazio su disco per le tabelle con una chiave di ordinamento

Il cluster è vuoto (nessun'altra tabella) e ha 10 nodi dw2.large. Se imposto una chiave di ordinamento sulla tabella, i comandi di copia utilizzano tutto lo spazio disponibile su disco circa il 25% del percorso e interrompe. Se non è presente alcuna chiave di ordinamento, la copia viene completata correttamente e non utilizza mai più del 45% dello spazio disponibile su disco. Questo comportamento è coerente anche se imposto o meno una chiave di distribuzione.

Non so davvero perché questo accada, o se è previsto. Qualcuno ha visto questo comportamento? Se sì, hai qualche suggerimento su come aggirarlo? Un'idea sarebbe provare a importare ogni file singolarmente, ma mi piacerebbe trovare un modo per consentire a Redshift di gestire quella parte stessa e fare tutto in una sola query.

risposta

7

Hai una risposta a questo dal team di Redshift. Il cluster richiede uno spazio libero di almeno 2,5 volte la dimensione dei dati in entrata da utilizzare come spazio temporaneo per l'ordinamento. È possibile eseguire l'upsize del cluster, copiare i dati e ridimensionarli nuovamente.

+0

2.5 volte la dimensione dei dati in arrivo? Sembra ridicolo. Non è un numero costante di volte il numero di righe che stai inserendo, ma in realtà dipende dalla dimensione delle righe? – michaelsnowden

+0

Abbiamo anche avuto grossi problemi con questo. Il nostro cluster era al 40% di utilizzo del disco all'inizio dell'importazione e andava fino al 100% e talvolta persino l'importazione si interrompeva, il che sembra ridicolo. –

0

Ogni casella dw2.large ha 0,16 TB di spazio su disco. Quando hai detto di avere un cluster di 10 nodi, lo spazio totale disponibile è di circa 1,6 TB. Hai accennato al fatto che hai caricato circa 1,7 TB di dati grezzi (non compressi) in redshift.

Quando si caricano i dati su redshift utilizzando i comandi di copia, redshift comprime automaticamente i dati e li carica. una volta caricato qualsiasi tabella db è possibile vedere la codifica di compressione da sotto interrogazione

Select "column", type, encoding 
from pg_table_def where tablename = 'my_table_name' 

Una volta che caricare i dati quando tabella non ha alcuna chiave di ordinamento. Scopri cosa viene applicata la compressione. ho suggerito si lascia cadere e creare tavolo ogni volta che si carica i dati per il vostro test Così che le compressioni di codifica saranno analizzati ogni Time.once si carica il vostro tavolo utilizzando i comandi di copia vedi sotto link per lo script del fuoco per determinare la dimensione tavolo

http://docs.aws.amazon.com/redshift/latest/dg/c_analyzing-table-design.html

Da quando si applica la chiave di ordinamento per la tabella e si caricano i dati, la chiave di ordinamento occupa anche spazio su disco.

Poiché la tabella con la chiave di ordinamento out richiede meno spazio su disco rispetto alla tabella con chiave di ordinamento.

È necessario assicurarsi che la compressione venga applicata al tavolo.

Quando viene applicata la chiave di ordinamento, è necessario più spazio per la memorizzazione. Quando si applica la chiave di ordinamento, è necessario verificare se si stanno caricando i dati anche nell'ordine ordinato, in modo che i dati vengano archiviati in modo ordinato. È necessario evitare il comando vuoto per ordinare la tabella dopo il caricamento dei dati.

Problemi correlati