Contoh distribusi - Amazon Redshift

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

Contoh distribusi

Contoh berikut menunjukkan bagaimana data didistribusikan sesuai dengan opsi yang Anda tentukan dalam pernyataan CREATE TABLE.

Contoh DISTKEY

Lihatlah skema tabel USERS di database TICKIT. USERID didefinisikan sebagai kolom SORTKEY dan kolom DISTKEY:

select "column", type, encoding, distkey, sortkey from pg_table_def where tablename = 'users'; column | type | encoding | distkey | sortkey ---------------+------------------------+----------+---------+--------- userid | integer | none | t | 1 username | character(8) | none | f | 0 firstname | character varying(30) | text32k | f | 0 ...

USERID adalah pilihan yang baik untuk kolom distribusi pada tabel ini. Jika Anda menanyakan tampilan sistem SVV_DISKUSAGE, Anda dapat melihat bahwa tabel didistribusikan dengan sangat merata. Nomor kolom berbasis nol, jadi USERID adalah kolom 0.

select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage where name='users' and col=0 and rows>0 order by slice, col; slice| col | rows | minvalue | maxvalue -----+-----+-------+----------+---------- 0 | 0 | 12496 | 4 | 49987 1 | 0 | 12498 | 1 | 49988 2 | 0 | 12497 | 2 | 49989 3 | 0 | 12499 | 3 | 49990 (4 rows)

Tabel berisi 49.990 baris. Kolom baris (num_values) menunjukkan bahwa setiap irisan berisi jumlah baris yang hampir sama. Kolom minvalue dan maxvalue menunjukkan rentang nilai pada setiap irisan. Setiap irisan mencakup hampir seluruh rentang nilai, jadi ada kemungkinan besar setiap irisan berpartisipasi dalam menjalankan kueri yang memfilter untuk berbagai ID pengguna.

Contoh ini menunjukkan distribusi pada sistem uji kecil. Jumlah total irisan biasanya jauh lebih tinggi.

Jika Anda biasanya bergabung atau mengelompokkan menggunakan kolom STATE, Anda dapat memilih untuk mendistribusikan pada kolom STATE. Contoh berikut menunjukkan kasus di mana Anda membuat tabel baru dengan data yang sama dengan tabel USERS tetapi mengatur DISTKEY ke kolom STATE. Dalam hal ini, distribusinya tidak genap. Slice 0 (13.587 baris) memegang sekitar 30 persen lebih banyak baris daripada slice 3 (10.150 baris). Dalam tabel yang jauh lebih besar, jumlah kemiringan distribusi ini dapat berdampak buruk pada pemrosesan kueri.

create table userskey distkey(state) as select * from users; select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage where name = 'userskey' and col=0 and rows>0 order by slice, col; slice | col | rows | minvalue | maxvalue ------+-----+-------+----------+---------- 0 | 0 | 13587 | 5 | 49989 1 | 0 | 11245 | 2 | 49990 2 | 0 | 15008 | 1 | 49976 3 | 0 | 10150 | 4 | 49986 (4 rows)

Contoh DISTSTYLE BAHKAN

Jika Anda membuat tabel baru dengan data yang sama dengan tabel USERS tetapi mengatur DISTSTYLE ke EVEN, baris selalu didistribusikan secara merata di seluruh irisan.

create table userseven diststyle even as select * from users; select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage where name = 'userseven' and col=0 and rows>0 order by slice, col; slice | col | rows | minvalue | maxvalue ------+-----+-------+----------+---------- 0 | 0 | 12497 | 4 | 49990 1 | 0 | 12498 | 8 | 49984 2 | 0 | 12498 | 2 | 49988 3 | 0 | 12497 | 1 | 49989 (4 rows)

Namun, karena distribusi tidak didasarkan pada kolom tertentu, pemrosesan kueri dapat terdegradasi, terutama jika tabel bergabung dengan tabel lain. Kurangnya distribusi pada kolom bergabung sering mempengaruhi jenis operasi gabungan yang dapat dilakukan secara efisien. Operasi gabungan, agregasi, dan pengelompokan dioptimalkan saat kedua tabel didistribusikan dan diurutkan pada kolom penggabungannya masing-masing.

DISTSTYLE SEMUA contoh

Jika Anda membuat tabel baru dengan data yang sama dengan tabel USERS tetapi mengatur DISTSTYLE ke ALL, semua baris didistribusikan ke irisan pertama dari setiap node.

select slice, col, num_values as rows, minvalue, maxvalue from svv_diskusage where name = 'usersall' and col=0 and rows > 0 order by slice, col; slice | col | rows | minvalue | maxvalue ------+-----+-------+----------+---------- 0 | 0 | 49990 | 4 | 49990 2 | 0 | 49990 | 2 | 49990 (4 rows)