View a markdown version of this page

EXPLAIN - Amazon Redshift

Amazon Redshift tidak akan lagi mendukung penggunaan Python UDF setelah 30 Juni 2026. Kami akan mulai menegakkannya secara bertahap. Untuk informasi lebih lanjut tentang detail opsi akhir masa pakai dan migrasi Python, lihat posting blog yang diterbitkan pada 30 Juni 2025.

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

EXPLAIN

Menampilkan rencana eksekusi untuk pernyataan kueri tanpa menjalankan kueri. Untuk informasi tentang alur kerja analisis kueri, lihatAlur kerja analisis kueri.

Sintaksis

EXPLAIN [ VERBOSE ] query

Parameter

BERTELE-TELE

Menampilkan paket kueri lengkap, bukan hanya ringkasan.

query

Pernyataan kueri untuk dijelaskan. Kueri dapat berupa pernyataan SELECT, INSERT, CREATE TABLE AS, UPDATE, atau DELETE.

Catatan penggunaan

Kinerja EXPLAIN terkadang dipengaruhi oleh waktu yang dibutuhkan untuk membuat tabel sementara. Misalnya, kueri yang menggunakan optimasi subexpression umum memerlukan tabel sementara untuk dibuat dan dianalisis untuk mengembalikan output EXPLAIN. Rencana kueri tergantung pada skema dan statistik tabel sementara. Oleh karena itu, perintah EXPLAIN untuk jenis kueri ini mungkin membutuhkan waktu lebih lama untuk dijalankan dari yang diharapkan.

Anda dapat menggunakan EXPLAIN hanya untuk perintah berikut:

  • SELECT

  • PILIH KE

  • CREATE TABLE AS

  • INSERT

  • UPDATE

  • DELETE

Perintah EXPLAIN akan gagal jika Anda menggunakannya untuk perintah SQL lainnya, seperti bahasa definisi data (DDL) atau operasi database.

Biaya unit relatif keluaran EXPLAIN digunakan oleh Amazon Redshift untuk memilih paket kueri. Amazon Redshift membandingkan ukuran berbagai perkiraan sumber daya untuk menentukan rencana.

Langkah-langkah perencanaan dan pelaksanaan kueri

Rencana eksekusi untuk pernyataan kueri Amazon Redshift tertentu memecah eksekusi dan perhitungan kueri menjadi urutan langkah dan operasi tabel terpisah yang akhirnya menghasilkan set hasil akhir untuk kueri. Untuk informasi tentang perencanaan kueri, lihatPemrosesan kueri.

Tabel berikut memberikan ringkasan langkah-langkah yang dapat digunakan Amazon Redshift dalam mengembangkan rencana eksekusi untuk setiap kueri yang dikirimkan pengguna untuk dieksekusi.

JELASKAN operator Langkah-langkah eksekusi kueri Deskripsi
MEMINDAI:
Pemindaian Berurutan scan Operator atau langkah pemindaian relasi Amazon Redshift atau pemindaian tabel. Memindai seluruh tabel secara berurutan dari awal hingga akhir; juga mengevaluasi batasan kueri untuk setiap baris (Filter) jika ditentukan dengan klausa WHERE. Juga digunakan untuk menjalankan pernyataan INSERT, UPDATE, dan DELETE.
JOINS: Amazon Redshift menggunakan operator gabungan yang berbeda berdasarkan desain fisik tabel yang digabungkan, lokasi data yang diperlukan untuk bergabung, dan atribut spesifik dari kueri itu sendiri. Pemindaian Subquery - Pemindaian dan penambahan subquery digunakan untuk menjalankan kueri UNION.
Lingkaran bersarang nloop Gabungan paling tidak optimal; terutama digunakan untuk penyambungan silang (produk Cartesian; tanpa kondisi gabungan) dan beberapa gabungan ketidaksetaraan.
Gabung Hash bergabunglah Juga digunakan untuk gabungan dalam dan gabungan luar kiri dan kanan dan biasanya lebih cepat daripada gabungan loop bersarang. Hash Join membaca tabel luar, men-hash kolom penggabungan, dan menemukan kecocokan di tabel hash bagian dalam. Langkah bisa tumpah ke disk. (Input bagian dalam hjoin adalah langkah hash yang dapat berbasis disk.)
Gabungkan Gabung bergabunglah Juga digunakan untuk gabungan dalam dan gabungan luar (untuk tabel gabungan yang didistribusikan dan diurutkan pada kolom penggabungan). Biasanya algoritma bergabung Amazon Redshift tercepat, tidak termasuk pertimbangan biaya lainnya.
AGREGASI: Operator dan langkah-langkah yang digunakan untuk kueri yang melibatkan fungsi agregat dan operasi GROUP BY.
Agregat Aggr Operator/step untuk fungsi agregat skalar.
HashAggregate Aggr Operator/step untuk fungsi agregat yang dikelompokkan. Dapat beroperasi dari disk berdasarkan tabel hash tumpah ke disk.
GroupAggregate Aggr Operator terkadang dipilih untuk kueri agregat yang dikelompokkan jika pengaturan konfigurasi Amazon Redshift untuk setelan force_hash_dinonaktifkan.
SORT: Operator dan langkah-langkah yang digunakan saat kueri harus mengurutkan atau menggabungkan kumpulan hasil.
Urutkan menyortir Sort melakukan penyortiran yang ditentukan oleh klausa ORDER BY serta operasi lain seperti UniONS dan join. Dapat beroperasi dari disk.
Menggabungkan bermerger Menghasilkan hasil akhir yang diurutkan dari kueri berdasarkan hasil diurutkan menengah yang berasal dari operasi yang dilakukan secara paralel.
Operasi KECUALI, INTERSECT, dan UNION:
SetOp Kecuali [Berbeda] bergabunglah Digunakan untuk kueri KECUALI. Dapat beroperasi dari disk berdasarkan fakta bahwa hash input dapat berbasis disk.
Hash Berpotongan [Berbeda] bergabunglah Digunakan untuk kueri INTERSECT. Dapat beroperasi dari disk berdasarkan fakta bahwa hash input dapat berbasis disk.
Tambahkan [Semua |Distinct] save Tambahkan digunakan dengan Subquery Scan untuk mengimplementasikan query UNION dan UNION ALL. Dapat beroperasi dari disk berdasarkan keutamaan “simpan”.
Miscellaneous/Other:
Hash hash Digunakan untuk gabungan dalam dan gabungan luar kiri dan kanan (memberikan input ke gabungan hash). Operator Hash membuat tabel hash untuk tabel bagian dalam gabungan. (Tabel bagian dalam adalah tabel yang diperiksa untuk kecocokan dan, dalam gabungan dua tabel, biasanya yang lebih kecil dari keduanya.)
Kuota batasan Mengevaluasi klausa LIMIT.
Mewujudkan save Mewujudkan baris untuk input ke gabungan loop bersarang dan beberapa gabungan gabungan. Dapat beroperasi dari disk.
-- mengurai Digunakan untuk mengurai data input tekstual selama pemuatan.
-- proyek Digunakan untuk mengatur ulang kolom dan menghitung ekspresi, yaitu data proyek.
Hasil -- Jalankan fungsi skalar yang tidak melibatkan akses tabel apa pun.
-- kembali Kembalikan baris ke pemimpin atau klien.
Subrencana -- Digunakan untuk subquery tertentu.
Unik khas Menghilangkan duplikat dari kueri SELECT DISTINCT dan UNION.
Jendela jendela Hitung fungsi jendela agregat dan peringkat. Dapat beroperasi dari disk.
Operasi Jaringan:
Jaringan (Siaran) bcast Siaran juga merupakan atribut dari operator dan langkah-langkah Join Explain.
Jaringan (Mendistribusikan) distis Mendistribusikan baris ke node komputasi untuk pemrosesan paralel oleh cluster gudang data.
Jaringan (Kirim ke Pemimpin) kembali Mengirim hasil kembali ke pemimpin untuk diproses lebih lanjut.
Operasi DML (operator yang memodifikasi data):
Sisipkan (menggunakan Hasil) sisipkan Menyisipkan data.
Hapus (Pindai + Filter) hapus Menghapus data. Dapat beroperasi dari disk.
Perbarui (Pindai + Filter) hapus, masukkan Diimplementasikan sebagai hapus dan sisipkan.

Menggunakan EXPLAIN untuk RLS

Jika kueri berisi tabel yang tunduk pada kebijakan keamanan tingkat baris (RLS), EXPLAIN menampilkan node RLS khusus. SecureScan Amazon Redshift juga mencatat jenis node yang sama ke tabel sistem STL_EXPLAIN. EXPLAIN tidak mengungkapkan predikat RLS yang berlaku untuk dim_tbl. Jenis SecureScan node RLS berfungsi sebagai indikator bahwa rencana eksekusi berisi operasi tambahan yang tidak terlihat oleh pengguna saat ini.

Contoh berikut menggambarkan SecureScan node RLS.

EXPLAIN SELECT D.cint FROM fact_tbl F INNER JOIN dim_tbl D ON F.k_dim = D.k WHERE F.k_dim / 10 > 0; QUERY PLAN ------------------------------------------------------------------------ XN Hash Join DS_DIST_ALL_NONE (cost=0.08..0.25 rows=1 width=4) Hash Cond: ("outer".k_dim = "inner"."k") -> *XN* *RLS SecureScan f (cost=0.00..0.14 rows=2 width=4)* Filter: ((k_dim / 10) > 0) -> XN Hash (cost=0.07..0.07 rows=2 width=8) -> XN Seq Scan on dim_tbl d (cost=0.00..0.07 rows=2 width=8) Filter: (("k" / 10) > 0)

Untuk mengaktifkan penyelidikan penuh terhadap paket kueri yang tunduk pada RLS, Amazon Redshift menawarkan izin sistem EXPLAIN RLS. Pengguna yang telah diberikan izin ini dapat memeriksa rencana kueri lengkap yang juga menyertakan predikat RLS.

Contoh berikut menggambarkan Seq Scan tambahan di bawah SecureScan node RLS juga menyertakan predikat kebijakan RLS (k_dim > 1).

EXPLAIN SELECT D.cint FROM fact_tbl F INNER JOIN dim_tbl D ON F.k_dim = D.k WHERE F.k_dim / 10 > 0; QUERY PLAN --------------------------------------------------------------------------------- XN Hash Join DS_DIST_ALL_NONE (cost=0.08..0.25 rows=1 width=4) Hash Cond: ("outer".k_dim = "inner"."k") *-> XN RLS SecureScan f (cost=0.00..0.14 rows=2 width=4) Filter: ((k_dim / 10) > 0)* -> *XN* *Seq Scan on fact_tbl rls_table (cost=0.00..0.06 rows=5 width=8) Filter: (k_dim > 1)* -> XN Hash (cost=0.07..0.07 rows=2 width=8) -> XN Seq Scan on dim_tbl d (cost=0.00..0.07 rows=2 width=8) Filter: (("k" / 10) > 0)

Sementara izin EXPLAIN RLS diberikan kepada pengguna, Amazon Redshift mencatat paket kueri lengkap termasuk predikat RLS dalam tabel sistem STL_EXPLAIN. Kueri yang dijalankan saat izin ini tidak diberikan akan dicatat tanpa internal RLS. Memberikan atau menghapus izin EXPLAIN RLS tidak akan mengubah apa yang telah dicatat Amazon Redshift ke STL_EXPLAIN untuk kueri sebelumnya.

AWS Lake Formation-RLS melindungi hubungan Redshift

Contoh berikut menggambarkan SecureScan node LF, yang dapat Anda gunakan untuk melihat Formation-RLS relasi Lake.

EXPLAIN SELECT * FROM lf_db.public.t_share WHERE a > 1; QUERY PLAN --------------------------------------------------------------- XN LF SecureScan t_share (cost=0.00..0.02 rows=2 width=11) (2 rows)

Contoh

catatan

Untuk contoh ini, output sampel dapat bervariasi tergantung pada konfigurasi Amazon Redshift.

Contoh berikut mengembalikan rencana kueri untuk kueri yang memilih EVENTID, EVENTNAME, VENUEID, dan VENUENAME dari tabel EVENT dan VENUE:

explain select eventid, eventname, event.venueid, venuename from event, venue where event.venueid = venue.venueid;
QUERY PLAN -------------------------------------------------------------------------- XN Hash Join DS_DIST_OUTER (cost=2.52..58653620.93 rows=8712 width=43) Hash Cond: ("outer".venueid = "inner".venueid) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=23) -> XN Hash (cost=2.02..2.02 rows=202 width=22) -> XN Seq Scan on venue (cost=0.00..2.02 rows=202 width=22) (5 rows)

Contoh berikut mengembalikan rencana kueri untuk kueri yang sama dengan output verbose:

explain verbose select eventid, eventname, event.venueid, venuename from event, venue where event.venueid = venue.venueid;
QUERY PLAN -------------------------------------------------------------------------- {HASHJOIN :startup_cost 2.52 :total_cost 58653620.93 :plan_rows 8712 :plan_width 43 :best_pathkeys <> :dist_info DS_DIST_OUTER :dist_info.dist_keys ( TARGETENTRY { VAR :varno 2 :varattno 1 ... XN Hash Join DS_DIST_OUTER (cost=2.52..58653620.93 rows=8712 width=43) Hash Cond: ("outer".venueid = "inner".venueid) -> XN Seq Scan on event (cost=0.00..87.98 rows=8798 width=23) -> XN Hash (cost=2.02..2.02 rows=202 width=22) -> XN Seq Scan on venue (cost=0.00..2.02 rows=202 width=22) (519 rows)

Contoh berikut mengembalikan rencana kueri untuk pernyataan CREATE TABLE AS (CTAS):

explain create table venue_nonulls as select * from venue where venueseats is not null; QUERY PLAN ----------------------------------------------------------- XN Seq Scan on venue (cost=0.00..2.02 rows=187 width=45) Filter: (venueseats IS NOT NULL) (2 rows)