Catatan penggunaan CTAS - Amazon Redshift

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

Catatan penggunaan CTAS

Batas

Amazon Redshift memberlakukan kuota jumlah tabel per cluster menurut jenis node.

Jumlah maksimum karakter untuk nama tabel adalah 127.

Jumlah maksimum kolom yang dapat Anda tentukan dalam satu tabel adalah 1.600.

Warisan atribut kolom dan tabel

Tabel CREATE TABLE AS (CTAS) tidak mewarisi batasan, kolom identitas, nilai kolom default, atau kunci utama dari tabel tempat mereka dibuat.

Anda tidak dapat menentukan pengkodean kompresi kolom untuk tabel CTAS. Amazon Redshift secara otomatis menetapkan pengkodean kompresi sebagai berikut:

  • Kolom yang didefinisikan sebagai kunci pengurutan diberi kompresi RAW.

  • Kolom yang didefinisikan sebagai tipe data BOOLEAN, REAL, PRESISI GANDA, GEOMETRI, atau GEOGRAFI diberi kompresi RAW.

  • Kolom yang didefinisikan sebagai SMALLINT, INTEGER, BIGINT, DECIMAL, DATE, TIME, TIMETZ, TIMESTAMP, atau TIMESTAMPTZ diberi kompresi. AZ64

  • Kolom yang didefinisikan sebagai CHAR, VARCHAR, atau VARBYTE diberi kompresi LZO.

Untuk informasi selengkapnya, silakan lihat Pengkodean kompresi dan Jenis data.

Untuk secara eksplisit menetapkan pengkodean kolom, gunakan. CREATE TABLE

CTAS menentukan gaya distribusi dan kunci pengurutan untuk tabel baru berdasarkan rencana kueri untuk klausa SELECT.

Untuk kueri kompleks, seperti kueri yang menyertakan gabungan, agregasi, klausa urutan demi klausa, atau klausa batas, CTAS berusaha sebaik mungkin untuk memilih gaya distribusi optimal dan kunci pengurutan berdasarkan rencana kueri.

catatan

Untuk kinerja terbaik dengan kumpulan data besar atau kueri kompleks, kami merekomendasikan pengujian menggunakan kumpulan data tipikal.

Anda sering dapat memprediksi kunci distribusi dan kunci sortir mana yang dipilih CTAS dengan memeriksa rencana kueri untuk melihat kolom mana, jika ada, yang dipilih pengoptimal kueri untuk menyortir dan mendistribusikan data. Jika node atas dari rencana kueri adalah pemindaian berurutan sederhana dari satu tabel (XN Seq Scan), maka CTAS umumnya menggunakan gaya distribusi tabel sumber dan kunci pengurutan. Jika node teratas dari rencana kueri adalah pemindaian sekuensial lainnya (seperti XN Limit, XN Sort, XN HashAggregate, dan sebagainya), CTAS melakukan upaya terbaik untuk memilih gaya distribusi optimal dan kunci sortir berdasarkan rencana kueri.

Misalnya, Anda membuat lima tabel menggunakan jenis klausa SELECT berikut:

  • Pernyataan pilih sederhana

  • Klausul batas

  • Pesanan dengan klausa menggunakan LISTID

  • Pesanan dengan klausa menggunakan QTYSOLD

  • Fungsi agregat SUM dengan klausa grup demi klausa.

Contoh berikut menunjukkan rencana query untuk setiap pernyataan CTAS.

explain create table sales1_simple as select listid, dateid, qtysold from sales; QUERY PLAN ---------------------------------------------------------------- XN Seq Scan on sales (cost=0.00..1724.56 rows=172456 width=8) (1 row) explain create table sales2_limit as select listid, dateid, qtysold from sales limit 100; QUERY PLAN ---------------------------------------------------------------------- XN Limit (cost=0.00..1.00 rows=100 width=8) -> XN Seq Scan on sales (cost=0.00..1724.56 rows=172456 width=8) (2 rows) explain create table sales3_orderbylistid as select listid, dateid, qtysold from sales order by listid; QUERY PLAN ------------------------------------------------------------------------ XN Sort (cost=1000000016724.67..1000000017155.81 rows=172456 width=8) Sort Key: listid -> XN Seq Scan on sales (cost=0.00..1724.56 rows=172456 width=8) (3 rows) explain create table sales4_orderbyqty as select listid, dateid, qtysold from sales order by qtysold; QUERY PLAN ------------------------------------------------------------------------ XN Sort (cost=1000000016724.67..1000000017155.81 rows=172456 width=8) Sort Key: qtysold -> XN Seq Scan on sales (cost=0.00..1724.56 rows=172456 width=8) (3 rows) explain create table sales5_groupby as select listid, dateid, sum(qtysold) from sales group by listid, dateid; QUERY PLAN ---------------------------------------------------------------------- XN HashAggregate (cost=3017.98..3226.75 rows=83509 width=8) -> XN Seq Scan on sales (cost=0.00..1724.56 rows=172456 width=8) (2 rows)

Untuk melihat kunci distribusi dan kunci sortir untuk setiap tabel, kueri tabel katalog sistem PG_TABLE_DEF, seperti yang ditunjukkan berikut.

select * from pg_table_def where tablename like 'sales%'; tablename | column | distkey | sortkey ----------------------+------------+---------+--------- sales | salesid | f | 0 sales | listid | t | 0 sales | sellerid | f | 0 sales | buyerid | f | 0 sales | eventid | f | 0 sales | dateid | f | 1 sales | qtysold | f | 0 sales | pricepaid | f | 0 sales | commission | f | 0 sales | saletime | f | 0 sales1_simple | listid | t | 0 sales1_simple | dateid | f | 1 sales1_simple | qtysold | f | 0 sales2_limit | listid | f | 0 sales2_limit | dateid | f | 0 sales2_limit | qtysold | f | 0 sales3_orderbylistid | listid | t | 1 sales3_orderbylistid | dateid | f | 0 sales3_orderbylistid | qtysold | f | 0 sales4_orderbyqty | listid | t | 0 sales4_orderbyqty | dateid | f | 0 sales4_orderbyqty | qtysold | f | 1 sales5_groupby | listid | f | 0 sales5_groupby | dateid | f | 0 sales5_groupby | sum | f | 0

Tabel berikut merangkum hasilnya. Untuk kesederhanaan, kami menghilangkan detail biaya, baris, dan lebar dari rencana penjelasan.

Tabel

Pernyataan CTAS SELECT

Jelaskan rencana node atas

Kunci dist

Sortir kunci

S1_SEDERHANA

select listid, dateid, qtysold from sales

XN Seq Scan on sales ...

LISTID DATEID
S2_LIMIT

select listid, dateid, qtysold from sales limit 100

XN Limit ...

Tidak ada (BAHKAN) Tidak ada
S3_ORDER_BY_LISTID

select listid, dateid, qtysold from sales order by listid

XN Sort ...

Sort Key: listid

LISTID LISTID
S4_ORDER_BY_QTY

select listid, dateid, qtysold from sales order by qtysold

XN Sort ...

Sort Key: qtysold

LISTID QTYSOLD
S5_GROUP_BY

select listid, dateid, sum(qtysold) from sales group by listid, dateid

XN HashAggregate ...

Tidak ada (BAHKAN) Tidak ada

Anda dapat secara eksplisit menentukan gaya distribusi dan kunci sortir dalam pernyataan CTAS. Misalnya, pernyataan berikut membuat tabel menggunakan distribusi EVEN dan menentukan SALESID sebagai kunci pengurutan.

create table sales_disteven diststyle even sortkey (salesid) as select eventid, venueid, dateid, eventname from event;

Pengkodean kompresi

ENCODE AUTO digunakan sebagai default untuk tabel. Amazon Redshift secara otomatis mengelola pengkodean kompresi untuk semua kolom dalam tabel.

Distribusi data yang masuk

Ketika skema distribusi hash dari data yang masuk cocok dengan tabel target, tidak ada distribusi fisik data yang sebenarnya diperlukan ketika data dimuat. Misalnya, jika kunci distribusi diatur untuk tabel baru dan data dimasukkan dari tabel lain yang didistribusikan pada kolom kunci yang sama, data dimuat di tempat, menggunakan node dan irisan yang sama. Namun, jika tabel sumber dan target disetel ke distribusi EVEN, data didistribusikan kembali ke dalam tabel target.

Operasi ANALISIS otomatis

Amazon Redshift secara otomatis menganalisis tabel yang Anda buat dengan perintah CTAS. Anda tidak perlu menjalankan perintah ANALYZE pada tabel ini saat pertama kali dibuat. Jika Anda memodifikasinya, Anda harus menganalisisnya dengan cara yang sama seperti tabel lainnya.