Menguji pengkodean kompresi - Amazon Redshift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Menguji pengkodean kompresi

Jika Anda memutuskan untuk menentukan pengkodean kolom secara manual, Anda mungkin ingin menguji pengkodean yang berbeda dengan data Anda.

catatan

Kami menyarankan Anda menggunakan perintah COPY untuk memuat data bila memungkinkan, dan memungkinkan perintah COPY untuk memilih pengkodean optimal berdasarkan data Anda. Atau Anda dapat menggunakan MENGANALISIS KOMPRESI perintah untuk melihat pengkodean yang disarankan untuk data yang ada. Untuk detail tentang menerapkan kompresi otomatis, lihatMemuat tabel dengan kompresi otomatis.

Untuk melakukan tes kompresi data yang berarti, Anda harus memiliki sejumlah besar baris. Untuk contoh ini, kita membuat tabel dan menyisipkan baris dengan menggunakan pernyataan yang memilih dari dua tabel; VENUE dan LISTING. Kami meninggalkan klausa WHERE yang biasanya akan bergabung dengan dua tabel. Hasilnya adalah bahwa setiap baris dalam tabel VENUE digabungkan ke semua baris dalam tabel LISTING, dengan total lebih dari 32 juta baris. Ini dikenal sebagai bergabung Cartesian dan biasanya tidak disarankan. Namun, untuk tujuan ini, ini adalah metode yang nyaman untuk membuat banyak baris. Jika Anda memiliki tabel yang ada dengan data yang ingin Anda uji, Anda dapat melewati langkah ini.

Setelah kami memiliki tabel dengan data sampel, kami membuat tabel dengan tujuh kolom. Masing-masing memiliki pengkodean kompresi yang berbeda: raw, bytedict, lzo, run length, text255, text32k, dan zstd. Kami mengisi setiap kolom dengan data yang persis sama dengan menjalankan perintah INSERT yang memilih data dari tabel pertama.

Untuk menguji pengkodean kompresi, lakukan hal berikut:

  1. (Opsional) Pertama, gunakan gabungan Cartesian untuk membuat tabel dengan sejumlah besar baris. Lewati langkah ini jika Anda ingin menguji tabel yang ada.

    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. Selanjutnya, buat tabel dengan pengkodean yang ingin Anda bandingkan.

    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. Masukkan data yang sama ke semua kolom menggunakan pernyataan INSERT dengan klausa 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. Verifikasi jumlah baris di tabel baru.

    select count(*) from encodingvenue count ---------- 38884394 (1 row)
  5. Kueri tabel STV_BLOCKLIST sistem untuk membandingkan jumlah blok disk 1 MB yang digunakan oleh setiap kolom.

    Fungsi agregat MAX mengembalikan nomor blok tertinggi untuk setiap kolom. Tabel STV_BLOCKLIST mencakup rincian untuk tiga kolom yang dihasilkan sistem. Contoh ini digunakan col < 6 dalam klausa WHERE untuk mengecualikan kolom yang dihasilkan sistem.

    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;

    Query mengembalikan hasil sebagai berikut. Kolom diberi nomor dimulai dengan nol. Bergantung pada bagaimana cluster Anda dikonfigurasi, hasil Anda mungkin memiliki angka yang berbeda, tetapi ukuran relatifnya harus serupa. Anda dapat melihat bahwa pengkodean BYTEDICT pada kolom kedua menghasilkan hasil terbaik untuk kumpulan data ini. Pendekatan ini memiliki rasio kompresi lebih baik dari 20:1. Pengkodean LZO dan ZSTD juga menghasilkan hasil yang sangat baik. Kumpulan data yang berbeda menghasilkan hasil yang berbeda, tentu saja. Ketika kolom berisi string teks yang lebih panjang, LZO sering menghasilkan hasil kompresi terbaik.

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

Jika Anda memiliki data dalam tabel yang ada, Anda dapat menggunakan MENGANALISIS KOMPRESI perintah untuk melihat pengkodean yang disarankan untuk tabel. Misalnya, contoh berikut menunjukkan pengkodean yang disarankan untuk salinan tabel VENUE, CARTESIAN_VENUE, yang berisi 38 juta baris. Perhatikan bahwa ANALYZE COMPRESSION merekomendasikan pengkodean LZO untuk kolom VENUENAME. ANALISIS KOMPRESI memilih kompresi optimal berdasarkan beberapa faktor, yang mencakup persen pengurangan. Dalam kasus khusus ini, BYTEDICT memberikan kompresi yang lebih baik, tetapi LZO juga menghasilkan kompresi lebih dari 90 persen.

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