

 Amazon Redshift tidak akan lagi mendukung pembuatan Python UDFs baru mulai Patch 198. Python yang ada UDFs akan terus berfungsi hingga 30 Juni 2026. Untuk informasi lebih lanjut, lihat [posting blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

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

# EXPLAIN
<a name="r_EXPLAIN"></a>

Menampilkan rencana eksekusi untuk pernyataan query tanpa menjalankan query. Untuk informasi tentang alur kerja analisis kueri, lihat[Alur kerja analisis kueri](c-query-analysis-process.md).

## Sintaksis
<a name="r_EXPLAIN-synopsis"></a>

```
EXPLAIN [ VERBOSE ] query
```

## Parameter
<a name="r_EXPLAIN-parameters"></a>

BERTELE-TELE   
Menampilkan rencana kueri lengkap, bukan hanya ringkasan.

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

## Catatan penggunaan
<a name="r_EXPLAIN-usage-notes"></a>

PERFORMA EXPLORE 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 EXPLOW. Rencana kueri tergantung pada skema dan statistik tabel sementara. Oleh karena itu, perintah EXPLOW untuk jenis kueri ini mungkin membutuhkan waktu lebih lama untuk dijalankan dari yang diharapkan.

Anda dapat menggunakan EXPLORE hanya untuk perintah berikut:
+ SELECT
+ PILIH KE
+ CREATE TABLE AS
+ INSERT
+ UPDATE
+ DELETE

Perintah EXPLOW akan gagal jika Anda menggunakannya untuk perintah SQL lainnya, seperti data definition language (DDL) atau operasi database.

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

## Perencanaan kueri dan langkah-langkah pelaksanaan
<a name="r_EXPLAIN-query-planning-and-execution-steps"></a>

Rencana eksekusi untuk pernyataan kueri Amazon Redshift tertentu memecah eksekusi dan perhitungan kueri menjadi urutan langkah dan operasi tabel terpisah yang akhirnya menghasilkan hasil akhir yang ditetapkan untuk kueri. Untuk informasi tentang perencanaan kueri, lihat[Pemrosesan kueri](c-query-processing.md).

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

[See the AWS documentation website for more details](http://docs.aws.amazon.com/id_id/redshift/latest/dg/r_EXPLAIN.html)

## Menggunakan EXPLOW untuk RLS
<a name="r_EXPLAIN-RLS"></a>

Jika kueri berisi tabel yang tunduk pada kebijakan keamanan tingkat baris (RLS), EXPLOW menampilkan node RLS khusus. SecureScan Amazon Redshift juga mencatat jenis node yang sama ke tabel sistem STL\_EXPLOW. EXPLOW 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 node RLS. SecureScan 

```
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 paket kueri yang tunduk pada RLS, Amazon Redshift menawarkan izin sistem EXPLOW RLS. Pengguna yang telah diberikan izin ini dapat memeriksa paket kueri lengkap yang juga menyertakan predikat RLS. 

Contoh berikut mengilustrasikan Pemindaian Seq 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 EXPLORE RLS diberikan kepada pengguna, Amazon Redshift mencatat paket kueri lengkap termasuk predikat RLS dalam tabel sistem STL\_EXPLANAGE. Kueri yang dijalankan saat izin ini tidak diberikan akan dicatat tanpa internal RLS. Memberi atau menghapus izin EXPLOW RLS tidak akan mengubah apa yang telah dicatat Amazon Redshift ke STL\_EXPLIGHT untuk kueri sebelumnya.

### AWS Lake Formation-RLS melindungi hubungan Redshift
<a name="r_EXPLAIN_RLS-LF"></a>

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

```
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
<a name="r_EXPLAIN-examples"></a>

**catatan**  
Untuk contoh ini, output sampel mungkin bervariasi tergantung pada konfigurasi Amazon Redshift.

Contoh berikut mengembalikan rencana query untuk query 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 query untuk query 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 query 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)
```