Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Serialisasi kompleks bersarang JSON
Topik ini menunjukkan cara membuat serial data bersarang dalam format. JSON Data bersarang adalah data yang berisi bidang bersarang. Bidang bersarang adalah bidang yang disatukan sebagai entitas tunggal, seperti array, struct, atau objek.
Alternatif untuk metode yang ditunjukkan dalam tutorial ini adalah untuk menanyakan kolom koleksi bersarang tingkat atas sebagai serial. JSON Anda dapat menggunakan serialisasi untuk memeriksa, mengonversi, dan menyerap data bersarang seperti Redshift Spectrum. JSON Metode ini didukung untukORC,, IonJSON, dan format Parket. Gunakan parameter konfigurasi sesi json_serialization_enable
untuk mengonfigurasi perilaku serialisasi. Saat diatur, tipe JSON data kompleks diserialisasikan ke VARCHAR (65535). Yang bersarang JSON dapat diakses denganJSONfungsi. Untuk informasi selengkapnya, lihat json_serialization_enable.
Misalnya, tanpa pengaturanjson_serialization_enable
, kueri berikut yang mengakses kolom bersarang langsung gagal.
SELECT * FROM spectrum.customers LIMIT 1;
=> ERROR: Nested tables do not support '*' in the SELECT clause.
SELECT name FROM spectrum.customers LIMIT 1;
=> ERROR: column "name" does not exist in customers
Pengaturan json_serialization_enable
memungkinkan kueri koleksi tingkat atas secara langsung.
SET json_serialization_enable TO true;
SELECT * FROM spectrum.customers order by id LIMIT 1;
id | name | phones | orders
---+--------------------------------------+----------------+----------------------------------------------------------------------------------------------------------------------
1 | {"given": "John", "family": "Smith"} | ["123-457789"] | [{"shipdate": "2018-03-01T11:59:59.000Z", "price": 100.50}, {"shipdate": "2018-03-01T09:10:00.000Z", "price": 99.12}]
SELECT name FROM spectrum.customers order by id LIMIT 1;
name
---------
{"given": "John", "family": "Smith"}
Pertimbangkan item berikut saat membuat serial bersarangJSON.
Ketika kolom koleksi diserialisasikan sebagai VARCHAR (65535), subbidang bersarangnya tidak dapat diakses secara langsung sebagai bagian dari sintaks kueri (misalnya, dalam klausa filter). Namun, JSON fungsi dapat digunakan untuk mengakses bersarangJSON.
Representasi khusus berikut tidak didukung:
ORCserikat
ORCpeta dengan tombol tipe kompleks
Datagram ion
Ion SEXP
Stempel waktu dikembalikan sebagai string ISO serial.
Kunci peta primitif dipromosikan ke string (misalnya,
1
ke"1"
).Nilai nol tingkat atas diserialisasikan sebagai. NULLs
Jika serialisasi meluap VARCHAR ukuran maksimum 65535, sel diatur ke. NULL
Serialisasi tipe kompleks yang berisi string JSON
Secara default, nilai string yang terkandung dalam koleksi bersarang diserialisasikan sebagai string yang lolosJSON. Melarikan diri mungkin tidak diinginkan ketika string valid. JSON Sebagai gantinya, Anda mungkin ingin menulis subelement bersarang atau bidang yang secara VARCHAR langsung sebagai. JSON Aktifkan perilaku ini dengan json_serialization_parse_nested_strings
konfigurasi tingkat sesi. Ketika keduanya json_serialization_enable
dan json_serialization_parse_nested_strings
disetel, JSON nilai yang valid diserialisasikan sebaris tanpa karakter escape. Ketika nilainya tidak validJSON, nilai tersebut diloloskan seolah-olah nilai json_serialization_parse_nested_strings
konfigurasi tidak disetel. Untuk informasi selengkapnya, lihat json_serialization_parse_nested_string.
Misalnya, asumsikan data dari contoh sebelumnya yang terkandung JSON sebagai tipe structs
kompleks di bidang name
VARCHAR (20):
name
---------
{"given": "{\"first\":\"John\",\"middle\":\"James\"}", "family": "Smith"}
Ketika json_serialization_parse_nested_strings
diatur, name
kolom diserialisasikan sebagai berikut:
SET json_serialization_enable TO true;
SET json_serialization_parse_nested_strings TO true;
SELECT name FROM spectrum.customers order by id LIMIT 1;
name
---------
{"given": {"first":"John","middle":"James"}, "family": "Smith"}
Alih-alih melarikan diri seperti ini:
SET json_serialization_enable TO true;
SELECT name FROM spectrum.customers order by id LIMIT 1;
name
---------
{"given": "{\"first\":\"John\",\"middle\":\"James\"}", "family": "Smith"}