

 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.

# Merobek-robek data semi-terstruktur ke dalam kolom SUPER dengan tampilan terwujud
<a name="r_shred_super"></a>

Dengan Amazon Redshift, Anda dapat meningkatkan kinerja kueri dengan merobek-robek data ke dalam kolom SUPER menggunakan tampilan terwujud. Penghancuran mengacu pada proses memecah tipe data yang kompleks seperti JSON semi-terstruktur atau XMLmenjadi kolom yang lebih kecil dan datar. Kolom SUPER adalah bentuk khusus penyimpanan kolumnar yang dioptimalkan untuk memindai data parut dengan cepat. 

Bagian berikut menjelaskan langkah-langkah dan pertimbangan untuk merobek-robek data ke dalam kolom SUPER menggunakan tampilan terwujud di Amazon Redshift.

Contoh berikut menunjukkan definisi tampilan terwujud yang mencabik-cabik data bersarang dengan kolom yang dihasilkan masih menjadi tipe data SUPER.

```
SELECT c.c_name, o.o_orderstatus
FROM customer_orders_lineitem c, c.c_orders o;
```

Contoh berikut menunjukkan definisi tampilan terwujud yang membuat kolom skalar Amazon Redshift konvensional dari data yang diparut.

```
SELECT c.c_name, c.c_orders[0].o_totalprice
FROM customer_orders_lineitem c;
```

Anda dapat membuat satu tampilan terwujud super\$1mv untuk mempercepat kedua kueri.

Untuk menjawab kueri pertama, Anda harus mewujudkan atribut o\$1orderstatus. Anda dapat menghilangkan atribut c\$1name karena tidak melibatkan navigasi bersarang atau unnesting. Anda juga harus menyertakan dalam tampilan terwujud atribut c\$1custkey dari customer\$1orders\$1lineitem untuk dapat menggabungkan tabel dasar dengan tampilan terwujud.

Untuk menjawab kueri kedua, Anda juga harus mewujudkan atribut o\$1totalprice dan indeks array o\$1idx dari c\$1orders. Oleh karena itu, Anda dapat mengakses indeks 0 dari c\$1orders.

```
CREATE MATERIALIZED VIEW super_mv distkey(c_custkey) sortkey(c_custkey) AS (
  SELECT c_custkey, o.o_orderstatus, o.o_totalprice, o_idx
  FROM customer_orders_lineitem c, c.c_orders o AT o_idx
);
```

Atribut o\$1orderstatus dan o\$1totalprice dari tampilan super\$1mv yang terwujud adalah SUPER.

Tampilan super\$1mv yang terwujud akan disegarkan secara bertahap setelah perubahan pada tabel dasar customer\$1orders\$1lineitem.

```
REFRESH MATERIALIZED VIEW super_mv;
INFO: Materialized view super_mv was incrementally updated successfully.
```

Untuk menulis ulang kueri PartiQL pertama sebagai kueri SQL biasa, bergabunglah dengan customer\$1orders\$1lineitem dengan super\$1mv sebagai berikut.

```
SELECT c.c_name, v.o_orderstatus
FROM customer_orders_lineitem c 
JOIN super_mv v ON c.c_custkey = v.c_custkey;
```

Demikian pula, Anda dapat menulis ulang kueri PartiQL kedua. Contoh berikut menggunakan filter pada o\$1idx = 0.

```
SELECT c.c_name, v.o_totalprice
FROM customer_orders_lineitem c 
JOIN super_mv v ON c.c_custkey = v.c_custkey
WHERE v.o_idx = 0;
```

Dalam perintah CREATE MATERIALIZED VIEW, tentukan c\$1custkey sebagai kunci distribusi dan kunci sortir untuk super\$1mv. Amazon Redshift melakukan gabungan gabungan yang efisien, dengan asumsi bahwa c\$1custkey juga merupakan kunci distribusi dan kunci pengurutan customer\$1orders\$1lineitem. Jika bukan itu masalahnya, Anda dapat menentukan c\$1custkey sebagai kunci pengurutan dan kunci distribusi customer\$1orders\$1lineitem sebagai berikut.

```
ALTER TABLE customer_orders_lineitem
ALTER DISTKEY c_custkey, ALTER SORTKEY (c_custkey);
```

Gunakan pernyataan EXPLOW untuk memverifikasi bahwa Amazon Redshift melakukan gabungan gabungan pada kueri yang ditulis ulang.

```
EXPLAIN
      SELECT c.c_name, v.o_orderstatus
      FROM customer_orders_lineitem c JOIN super_mv v ON c.c_custkey = v.c_custkey;
      
      QUERY PLAN                                              
      ------------------------------------------------------------------------------------------------------
      XN Merge Join DS_DIST_NONE  (cost=0.00..34701.82 rows=1470776 width=27)
      Merge Cond: ("outer".c_custkey = "inner".c_custkey)
      ->  XN Seq Scan on mv_tbl__super_mv__0 derived_table2  (cost=0.00..14999.86 rows=1499986 width=13)
      ->  XN Seq Scan on customer_orders_lineitem c  (cost=0.00..999.96 rows=99996 width=30)
      (4 rows)
```