Meneri data bersarang - AWS Clean Rooms

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

Meneri data bersarang

AWS Clean Roomsmenawarkan akses yang kompatibel dengan SQL ke data relasional dan bersarang.

AWS Clean Roomsmenggunakan notasi putus-putus dan subskrip array untuk navigasi jalur saat mengakses data bersarang. Hal ini juga memungkinkanFROMitem klausa untuk mengulangi array dan digunakan untuk operasi unnest. Topik berikut memberikan deskripsi pola kueri berbeda yang menggabungkan penggunaan tipe data array/struct/map dengan navigasi jalur dan array, unnesting, dan gabungan.

AWS Clean Roomsmemungkinkan navigasi ke dalam array dan struktur menggunakan[...]braket dan notasi titik masing-masing. Selanjutnya, Anda dapat mencampur navigasi ke dalam struktur menggunakan notasi titik dan array menggunakan notasi braket.

Sebagai contoh, kueri berikut dalam kueri berikut dalamc_orderskolom data array adalah array dengan struktur dan atribut diberi namao_orderkey.

SELECT cust.c_orders[0].o_orderkey FROM customer_orders_lineitem AS cust;

Anda dapat menggunakan notasi titik dan tanda kurung di semua jenis kueri, seperti pemfilteran, gabungan, dan agregasi. Anda dapat menggunakan notasi ini dalam kueri di mana biasanya ada referensi kolom.

Contoh berikut menggunakan pernyataan SELECT yang memfilter hasil.

SELECT count(*) FROM customer_orders_lineitem WHERE c_orders[0].o_orderkey IS NOT NULL;

Contoh berikut menggunakan braket dan navigasi titik di kedua klausa GROUP BY dan ORDER BY.

SELECT c_orders[0].o_orderdate, c_orders[0].o_orderstatus, count(*) FROM customer_orders_lineitem WHERE c_orders[0].o_orderkey IS NOT NULL GROUP BY c_orders[0].o_orderstatus, c_orders[0].o_orderdate ORDER BY c_orders[0].o_orderdate;

Kueri yang tidak bersarang

Untuk kueri unnest,AWS Clean Roomsmemungkinkan iterasi melalui array. Hal ini dilakukan dengan menavigasi array menggunakan klausa FROM dari query.

Menggunakan contoh sebelumnya, contoh berikut iterasi atas nilai atribut untukc_orders.

SELECT o FROM customer_orders_lineitem c, c.c_orders o;

Sintaks unnesting adalah perpanjangan dari klausa FROM. Dalam SQL standar, klausa FROMx (AS) yberarti bahwayiterasi atas setiap tupel dalam kaitannyax. Dalam hal ini,xmengacu pada hubungan danymengacu pada alias untuk relasix. Demikian pula, sintaks unnesting menggunakan item klausa FROMx (AS) yberarti bahwayiterasi atas setiap nilai dalam ekspresi arrayx. Dalam hal ini,xadalah ekspresi array danyadalah alias untukx.

Operan kiri juga dapat menggunakan notasi titik dan braket untuk navigasi reguler.

Dalam contoh sebelumnya:

  • customer_orders_lineitem cadalah iterasi atascustomer_order_lineitemmeja dasar

  • c.c_orders oadalah iterasi atasc.c_orders array

Untuk mengulangio_lineitemsatribut, yang merupakan array dalam array, Anda menambahkan beberapa klausa.

SELECT o, l FROM customer_orders_lineitem c, c.c_orders o, o.o_lineitems l;

AWS Clean Roomsjuga mendukung indeks array saat mengulangi array menggunakanATkata kunci. Klausulx AS y AT ziterasi di atas arrayxdan menghasilkan bidangz, yang merupakan indeks array.

Sebagai contoh berikut: bagaimana indeks array bekerja.

SELECT c_name, orders.o_orderkey AS orderkey, index AS orderkey_index FROM customer_orders_lineitem c, c.c_orders AS orders AT index ORDER BY orderkey_index; c_name | orderkey | orderkey_index -------------------+----------+---------------- Customer#000008251 | 3020007 | 0 Customer#000009452 | 4043971 | 0 (2 rows)

Contoh berikut iterasi atas array skalar.

CREATE TABLE bar AS SELECT json_parse('{"scalar_array": [1, 2.3, 45000000]}') AS data; SELECT index, element FROM bar AS b, b.data.scalar_array AS element AT index; index | element -------+---------- 0 | 1 1 | 2.3 2 | 45000000 (3 rows)

Contoh berikut iterasi atas array dari beberapa level. Contoh menggunakan beberapa klausa unnest untuk beralih ke array terdalam. Thef.multi_level_array ASarray iterasimulti_level_array. ArrayASelemen adalah iterasi atas array di dalammulti_level_array.

CREATE TABLE foo AS SELECT json_parse('[[1.1, 1.2], [2.1, 2.2], [3.1, 3.2]]') AS multi_level_array; SELECT array, element FROM foo AS f, f.multi_level_array AS array, array AS element; array | element -----------+--------- [1.1,1.2] | 1.1 [1.1,1.2] | 1.2 [2.1,2.2] | 2.1 [2.1,2.2] | 2.2 [3.1,3.2] | 3.1 [3.1,3.2] | 3.2 (6 rows)

Semantik longgar

Secara default, operasi navigasi pada nilai data bersarang mengembalikan null alih-alih mengembalikan kesalahan saat navigasi tidak valid. Navigasi objek tidak valid jika nilai data bersarang bukan objek atau jika nilai data bersarang adalah objek tetapi tidak berisi nama atribut yang digunakan dalam kueri.

Misalnya, kueri berikut mengakses nama atribut yang tidak valid di kolom data bersarangc_orders:

SELECT c.c_orders.something FROM customer_orders_lineitem c;

Navigasi array mengembalikan null jika nilai data bersarang bukan array atau indeks array di luar batas.

Hasil kueri berikut karenac_orders[1][1]berada di luar batas.

SELECT c.c_orders[1][1] FROM customer_orders_lineitem c;

Jenis introspeksi

Kolom tipe data bersarang mendukung fungsi inspeksi yang mengembalikan tipe dan informasi tipe lainnya tentang nilai. AWS Clean Rooms mendukung fungsi boolean berikut untuk kolom data bersarang:

  • DESIMAL_PRESISI

  • SKALA DESIMAL

  • IS_ARRAY

  • IS_BIGINT

  • IS_CHAR

  • ADALAH_DESIMAL

  • IS_MENGAPUNG

  • IS_INTEGER

  • IS_OBJEK

  • IS_SKALAR

  • IS_SMALLINT

  • IS_VARCHAR

  • JSON_TYPEOF

Semua fungsi ini mengembalikan false jika nilai input adalah null. IS_SCALAR, IS_OBJECT, dan IS_ARRAY saling eksklusif dan mencakup semua nilai yang mungkin kecuali untuk null. Untuk menyimpulkan jenis yang sesuai dengan data,AWS Clean Roomsmenggunakan fungsi JSON_TYPEOF yang mengembalikan tipe (tingkat atas) nilai data bersarang seperti yang ditunjukkan pada contoh berikut:

SELECT JSON_TYPEOF(r_nations) FROM region_nations; json_typeof ------------- array (1 row)
SELECT JSON_TYPEOF(r_nations[0].n_nationkey) FROM region_nations; json_typeof ------------- number