Test delle codifiche di compressione - Amazon Redshift

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

Test delle codifiche di compressione

Nel caso in cui decidessi di specificare manualmente le codifiche della colonna, probabilmente vorresti eseguire i test delle diverse codifiche dei tuoi dati.

Nota

Se possibile, ti consigliamo l'utilizzo del comando COPY per caricare i dati e per permettergli di scegliere le codifiche ottimali a seconda dei tuoi dati. In alternativa, è possibile utilizzare il comando ANALYZE COMPRESSION per visualizzare le codifiche consigliate per i dati esistenti. Per ulteriori informazioni sull'applicazione della compressione automatica, consultare Caricamento di tabelle con compressione automatica.

Per eseguire un test della compressione di dati significativo, sarà necessario un gran numero di righe. In questo esempio, verrà creata una tabella e saranno inserite delle righe mediante l'uso di una dichiarazione che seleziona dati da due tabelle, VENUE e LISTING. Lasciamo fuori la clausola WHERE che normalmente unirebbe le due tabelle. Il risultato è che ogni riga nella tabella VENUE viene unita a tutte le righe nella tabella LISTING, per un totale di più di 32 milioni di righe. Questa operazione, conosciuta come join cartesiano, solitamente non è consigliata. Tuttavia, a questo scopo, è un metodo conveniente per la creazione di molte righe. Se disponi di una tabella esistente con dei dati su cui desideri eseguire dei test, puoi ignorare questa fase.

Una volta ottenuta una tabella con dati di esempio, viene creata una tabella con sette colonne. Ognuna di esse ha una diversa codifica di compressione: raw, bytedict, lzo, lunghezza di esecuzione, text255, text32k e zstd. Ogni colonna viene completata con esattamente gli stessi dati eseguendo un comando INSERT che seleziona i dati dalla prima tabella.

Per testare le codifiche di compressione, procedere come indicato di seguito:

  1. (Facoltativo) Per prima cosa, utilizzare un join cartesiano al fine di creare una tabella con un gran numero di righe. Salta questa fase se desideri eseguire il test di una tabella esistente.

    create table cartesian_venue( venueid smallint not null distkey sortkey, venuename varchar(100), venuecity varchar(30), venuestate char(2), venueseats integer); insert into cartesian_venue select venueid, venuename, venuecity, venuestate, venueseats from venue, listing;
  2. Successivamente, creare una tabella con le codifiche che si desidera confrontare.

    create table encodingvenue ( venueraw varchar(100) encode raw, venuebytedict varchar(100) encode bytedict, venuelzo varchar(100) encode lzo, venuerunlength varchar(100) encode runlength, venuetext255 varchar(100) encode text255, venuetext32k varchar(100) encode text32k, venuezstd varchar(100) encode zstd);
  3. Inserire gli stessi dati in tutte le colonne utilizzando la dichiarazione INSERT con una clausola SELECT.

    insert into encodingvenue select venuename as venueraw, venuename as venuebytedict, venuename as venuelzo, venuename as venuerunlength, venuename as venuetext32k, venuename as venuetext255, venuename as venuezstd from cartesian_venue;
  4. Verificare il numero di righe nella nuova tabella.

    select count(*) from encodingvenue count ---------- 38884394 (1 row)
  5. Eseguire una query della tabella del sistema STV_BLOCKLIST per confrontare il numero di blocchi del disco da 1 MB utilizzati da ogni colonna.

    La funzione di aggregazione MAX restituisce il numero massimo di blocchi per ogni colonna. La tabella STV_BLOCKLIST include i dettagli delle tre colonne generate dal sistema. Questo esempio utilizza col < 6 nella clausola WHERE per escludere le colonne generate dal sistema.

    select col, max(blocknum) from stv_blocklist b, stv_tbl_perm p where (b.tbl=p.id) and name ='encodingvenue' and col < 7 group by name, col order by col;

    La query restituisce i seguenti risultati. Le colonne sono numerate a partire da zero. A seconda della configurazione del tuo cluster, i risultati potrebbero avere numeri diversi, ma le dimensioni relative dovrebbero essere simili. È possibile osservare che la codifica BYTEDICT sulla seconda colonna ha prodotto i migliori risultati per questo set di dati. Questo approccio ha un rapporto di compressione migliore di 20:1. Anche le codifiche LZO e ZSTD hanno prodotto risultati eccellenti. Set di dati diversi produrranno naturalmente risultati diversi. Se una colonna contiene stringhe di testo più lunghe, la codifica LZO spesso produce i migliori risultati di compressione.

    col | max -----+----- 0 | 203 1 | 10 2 | 22 3 | 204 4 | 56 5 | 72 6 | 20 (7 rows)

Se disponi di dati in una tabella esistente, puoi utilizzare il comando ANALYZE COMPRESSION per visualizzare le codifiche consigliate per la tabella. Ad esempio, l'esempio seguente mostra la codifica consigliata per una copia della tabella VENUE, ovvero CARTESIAN_VENUE, che contiene 38 milioni di righe. Nota che ANALYZE COMPRESSION consiglia la codifica LZO per la colonna VENUENAME. ANALYZE COMPRESSION sceglie la compressione ottimale secondo diversi fattori, tra cui una percentuale di riduzione. In questo caso specifico, BYTEDICT fornisce una migliore compressione, ma anche LZO produce una compressione maggiore del 90 percento.

analyze compression cartesian_venue; Table | Column | Encoding | Est_reduction_pct ---------------+------------+----------+------------------ reallybigvenue | venueid | lzo | 97.54 reallybigvenue | venuename | lzo | 91.71 reallybigvenue | venuecity | lzo | 96.01 reallybigvenue | venuestate | lzo | 97.68 reallybigvenue | venueseats | lzo | 98.21