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.
Navigasi
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_orders
kolom 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) y
berarti bahway
iterasi atas setiap tupel dalam kaitannyax
. Dalam hal ini,x
mengacu pada hubungan dany
mengacu pada alias untuk relasix
. Demikian pula, sintaks unnesting menggunakan item klausa FROMx (AS) y
berarti bahway
iterasi atas setiap nilai dalam ekspresi arrayx
. Dalam hal ini,x
adalah ekspresi array dany
adalah alias untukx
.
Operan kiri juga dapat menggunakan notasi titik dan braket untuk navigasi reguler.
Dalam contoh sebelumnya:
-
customer_orders_lineitem c
adalah iterasi atascustomer_order_lineitem
meja dasar -
c.c_orders o
adalah iterasi atasc.c_orders array
Untuk mengulangio_lineitems
atribut, 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 z
iterasi di atas arrayx
dan 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