Merobek-robek data semi-terstruktur ke dalam kolom SUPER dengan tampilan terwujud - Amazon Redshift

Amazon Redshift tidak akan lagi mendukung pembuatan Python UDFs baru mulai 1 November 2025. Jika Anda ingin menggunakan Python UDFs, buat UDFs sebelum tanggal tersebut. Python yang ada UDFs akan terus berfungsi seperti biasa. Untuk informasi lebih lanjut, lihat posting blog.

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

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