Topik ini menjelaskan fungsi JSON yang terkait dengan Hologres.
GET_JSON_OBJECT
Sintaksis
Fungsi GET_JSON_OBJECT digunakan untuk mengekstrak objek JSON dari string JSON. Sebelum menggunakan fungsi ini, Anda harus membuat ekstensi. Untuk informasi lebih lanjut, lihat Ekstensi.
-- Buat ekstensi. CREATE EXTENSION IF NOT EXISTS hive_compatible SCHEMA <schema_name>; SELECT get_json_object ( json_string, path );Parameter
Parameter
Deskripsi
json_string
Objek JSON. Nilainya bertipe TEXT. Nilai tersebut harus berupa string JSON yang valid.
path
Path JSON yang menentukan objek untuk diekstraksi. Tanda dolar (
$) mewakili variabel JSON. Operator titik (.) atau tanda kurung siku ([]) digunakan untuk mengakses objek atau array JSON.Jika string JSON tidak valid, NULL akan dikembalikan.
Contoh
Siapkan data sampel.
-- Buat ekstensi. CREATE EXTENSION IF NOT EXISTS hive_compatible SCHEMA pg_catalog; -- Siapkan data sampel. BEGIN; CREATE TABLE hive_json_example ( col_json text ); COMMIT; INSERT INTO hive_json_example VALUES ('{"store":{"fruit":[{"weight":8,"type":"apple"}, {"weight":9,"type":"pear"}],"bicycle":{"price":19.95,"color":"red"}},"email":"amy@only_for_json_udf_test.net","owner":"amy"}');Contoh 1: Kueri data di path
$.ownerdalam objek JSON dari kolomcol_json.-- Nilai yang dikembalikan adalah amy. SELECT get_json_object (col_json, '$.owner') FROM hive_json_example;Contoh 2: Kueri data di path
$.store.bicycle.pricedari objek JSON pada kolomcol_json.-- Nilai yang dikembalikan adalah 19.95. SELECT get_json_object (col_json, '$.store.bicycle.price') FROM hive_json_example;Contoh 3: Kueri elemen pertama dengan indeks 0 dari array
fruitdi path$.store.fruitdari objek JSON pada kolomcol_json.-- Nilai yang dikembalikan adalah {"weight":8, "type":"apple"}. SELECT get_json_object (col_json, '$.store.fruit[0]') FROM hive_json_example;Contoh 4: Kueri data dari variabel non-objek JSON.
-- Nilai yang dikembalikan adalah NULL. SELECT get_json_object (col_json, '$.no_key') FROM hive_json_example;
ROW_TO_JSON
Fungsi ROW_TO_JSON digunakan untuk menggabungkan beberapa string atau kolom menjadi string JSON dan mengembalikan hasilnya sebagai string JSON. Maksimal 50 kolom dapat digabungkan.
Hanya Hologres V1.3 ke atas yang mendukung fungsi row_to_json. Jika ingin menggunakan fungsi ini, Anda dapat bergabung dengan grup DingTalk Hologres untuk meminta peningkatan instance Hologres atau tingkatkan instance Anda. Untuk informasi lebih lanjut tentang cara bergabung dengan grup DingTalk Hologres, lihat Dapatkan dukungan online untuk Hologres.
Sintaksis
SELECT ROW_TO_JSON(record)Parameter
record: Parameter bertipe baris, yang dapat berupa nama tabel, nama tampilan, atau hasil kueri.
Contoh
-- Siapkan data uji. CREATE TABLE interests_test ( name text, intrests text ); INSERT INTO interests_test VALUES ('Ava', 'menyanyi, menari'), ('Bob', 'bermain sepak bola, lari, melukis'), ('Jack', 'merangkai bunga, menulis kaligrafi, bermain piano, tidur'); SELECT ROW_TO_JSON(t) FROM ( SELECT name, intrests FROM interests_test) AS t;Pada Hologres V1.3.52 ke atas, kunci dalam objek JSON dapat dibuat berdasarkan nama kolom.
Pada versi Hologres sebelum V1.3.52, hasil berikut dikembalikan:
row_to_json ------------------------------ {"f1":"Ava","f2":"menyanyi, menari"} {"f1":"Bob","f2":"bermain sepak bola, lari, melukis"} {"f1":"Jack","f2":"merangkai bunga, menulis kaligrafi, bermain piano, tidur"}Pada Hologres V1.3.52 ke atas, hasil berikut dikembalikan:
row_to_json ------------------------------ "{"name": "Jack", "interests": "merangkai bunga, menulis kaligrafi, bermain piano, tidur"}" "{"name": "Ava", "interests": "menyanyi, menari"}" "{"name": "Bob", "interests": "bermain sepak bola, lari, melukis"}"
Kesalahan umum
ERROR: function get_json_object (text, unknown) does not existPenyebab mungkin 1
Dalam model izin tingkat skema (SLPM), pengguna RAM tidak memiliki izin untuk menanyakan skema tempat ekstensi dibuat. Misalnya, pengguna RAM tidak memiliki izin untuk menanyakan skema public tempat ekstensi dibuat.
Solusi 1
Berikan pengguna RAM izin untuk menanyakan skema.
Eksekusi pernyataan berikut untuk membuat ekstensi di skema pg_catalog. Dengan cara ini, semua pengguna memiliki izin untuk menanyakan skema ini.
DROP EXTENSION hive_compatible; CREATE EXTENSION hive_compatible schema pg_catalog;
Penyebab mungkin 2
Parameter pertama GET_JSON_OBJECT bukan bertipe TEXT.
Solusi 2
Ubah tipe data parameter pertama menjadi TEXT.
ERROR: get_json_object for fe, should not be evaluatedPenyebab mungkin 1
Parameter pertama GET_JSON_OBJECT adalah konstanta.
Solusi 1
Tetapkan parameter pertama sebagai nama kolom tabel.
Penyebab mungkin 2
Parameter pertama GET_JSON_OBJECT berisi nilai NULL.
Solusi 2
Hapus nilai NULL dari parameter pertama.