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
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)