

 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 ](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/) 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.

# 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\_mv untuk mempercepat kedua kueri.

Untuk menjawab kueri pertama, Anda harus mewujudkan atribut o\_orderstatus. Anda dapat menghilangkan atribut c\_name karena tidak melibatkan navigasi bersarang atau unnesting. Anda juga harus menyertakan dalam tampilan terwujud atribut c\_custkey dari customer\_orders\_lineitem untuk dapat menggabungkan tabel dasar dengan tampilan terwujud.

Untuk menjawab kueri kedua, Anda juga harus mewujudkan atribut o\_totalprice dan indeks array o\_idx dari c\_orders. Oleh karena itu, Anda dapat mengakses indeks 0 dari c\_orders.

```
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\_orderstatus dan o\_totalprice dari tampilan super\_mv yang terwujud adalah SUPER.

Tampilan super\_mv yang terwujud akan disegarkan secara bertahap setelah perubahan pada tabel dasar customer\_orders\_lineitem.

```
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\_orders\_lineitem dengan super\_mv 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\_idx = 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\_custkey sebagai kunci distribusi dan kunci sortir untuk super\_mv. Amazon Redshift melakukan gabungan gabungan yang efisien, dengan asumsi bahwa c\_custkey juga merupakan kunci distribusi dan kunci pengurutan customer\_orders\_lineitem. Jika bukan itu masalahnya, Anda dapat menentukan c\_custkey sebagai kunci pengurutan dan kunci distribusi customer\_orders\_lineitem 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)
```