Tüm Ürünler
Search
Belge Merkezi

Hologres:JSON functions

Son Güncelleme:Oct 06, 2026

Hologres, JSON verilerini ayıklamak ve oluşturmak için iki JSON işlevini destekler: GET_JSON_OBJECT belirtilen bir yoldan JSON dizesinden bir değer ayıklar ve ROW_TO_JSON bir satırı JSON dizesine dönüştürür.

İşlev Amaç Giriş Çıktı Sürüm
GET_JSON_OBJECT Bir JSON yolundaki değeri ayıkla JSON dizesi (TEXT), yol ifadesi TEXT Herhangi biri (hive_compatible uzantısı gerektirir)
ROW_TO_JSON Bir satırı JSON dizesine dönüştür Kayıt (tablo, görünüm veya alt sorgu) JSON dizesi Hologres V1.3 ve üzeri

GET_JSON_OBJECT

GET_JSON_OBJECT bir yol ifadesi kullanarak JSON dizesinden bir JSON nesnesi veya skaler değer ayıklar.

Önkoşullar

GET_JSON_OBJECT kullanmadan önce şemanızda hive_compatible uzantısını oluşturun. Daha fazla bilgi için bkz. Uzantılar.

CREATE EXTENSION IF NOT EXISTS hive_compatible SCHEMA <schema_name>;

Söz dizimi

SELECT get_json_object(json_string, path);

Parametreler

Parametre Tür Açıklama
json_string TEXT Geçerli bir JSON dizesi.
path TEXT Ayıklanacak değeri tanımlayan bir yol ifadesi. Bkz. Yol ifadesi söz dizimi.

Dönüş değeri: Ayıklanan değer TEXT olarak döndürülür. Yol JSON içinde yoksa veya JSON dizesi geçersizse NULL döndürülür.

Yol ifadesi söz dizimi

Bir yol ifadesi, bir JSON değişkenini temsil eden $ ile başlar. JSON yapısında gezinmek için aşağıdaki operatörleri kullanın:

Operatör Açıklama Örnek
.key Anahtara göre bir nesne alanına erişin $.store.name
[n] Sıfır tabanlı indekse göre bir dizi öğesine erişin $.items[0]
Dizi indeksleme 0 tabanlıdır. $.items[0] ilk öğeyi döndürür ve $.items[1] ikinci öğeyi döndürür.

Örnekler

Örnek verileri ayarlayın:

-- Create the extension in pg_catalog so all users can access it.
CREATE EXTENSION IF NOT EXISTS hive_compatible SCHEMA pg_catalog;

-- Create and populate the sample table.
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"}');

Üst düzey bir alanı ayıklayın — $.owner değerini alın:

-- Returns: amy
SELECT get_json_object(col_json, '$.owner')
FROM hive_json_example;

İç içe geçmiş nesnelere gidin — $.store.bicycle.price konumundaki bisiklet fiyatını alın:

-- Returns: 19.95
SELECT get_json_object(col_json, '$.store.bicycle.price')
FROM hive_json_example;

Bir dizi öğesine indekse göre erişin — $.store.fruit[0] konumundaki ilk öğeyi alın:

-- Returns: {"weight":8,"type":"apple"}
SELECT get_json_object(col_json, '$.store.fruit[0]')
FROM hive_json_example;

Mevcut olmayan anahtar — yol mevcut olmadığında NULL döndürür:

-- Returns: NULL
SELECT get_json_object(col_json, '$.no_key')
FROM hive_json_example;

ROW_TO_JSON

ROW_TO_JSON bir satırı JSON dizesine dönüştürür. En fazla 50 sütunu kabul eder.

ROW_TO_JSON Hologres V1.3 ve sonraki sürümlerde kullanılabilir. Yükseltmek için örneğinizi yükseltin veya Hologres DingTalk grubu aracılığıyla destek ile iletişime geçin.

Söz dizimi

SELECT ROW_TO_JSON(record);

Parametreler

Parametre Açıklama
record Satır türünde bir değer: tablo adı, görünüm adı veya alt sorgu sonucu.

Dönüş değeri: Her anahtarın kayıtta bir sütuna karşılık geldiği bir JSON dizesi.

Anahtar adlandırması Hologres sürümüne bağlıdır:
V1.3.52 öncesi : Anahtarlar konumsaldır — f1 , f2 vb.
V1.3.52 ve sonrası : Anahtarlar sütun adlarına dayanır.

Örnekler

Örnek verileri ayarlayın:

CREATE TABLE interests_test (
    name    text,
    intrests text
);

INSERT INTO interests_test VALUES
  ('Ava', 'singing, dancing'),
  ('Bob', 'playing football, running, painting'),
  ('Jack', 'arranging flowers, writing calligraphy, playing the piano, sleeping');

Her satırı bir JSON dizesine dönüştürün:

SELECT ROW_TO_JSON(t)
FROM (
    SELECT name, intrests
    FROM interests_test
) AS t;

Hologres V1.3.52 ve sonraki sürümlerde anahtarlar sütun adlarını kullanır:

row_to_json
------------------------------
"{"name": "Jack", "interests": "arranging flowers, writing calligraphy, playing the piano, sleeping"}"
"{"name": "Ava", "interests": "singing, dancing"}"
"{"name": "Bob", "interests": "playing football, running, painting"}"

V1.3.52'den önceki Hologres sürümlerinde anahtarlar konumsal adları kullanır:

row_to_json
------------------------------
{"f1":"Ava","f2":"singing, dancing"}
{"f1":"Bob","f2":"playing football, running, painting"}
{"f1":"Jack","f2":"arranging flowers, writing calligraphy, playing the piano, sleeping"}

Sorun giderme

ERROR: function get_json_object (text, unknown) does not exist

Neden 1 — Eksik şema izni

Şema düzeyi izin modelinde (SLPM), RAM kullanıcısının uzantının oluşturulduğu şemayı (örneğin public şeması) sorgulama izni yoktur.

Bunu düzeltmek için aşağıdaki seçeneklerden birini kullanın:

  • RAM kullanıcısına bu şemayı sorgulama izni verin.

  • Uzantıyı tüm kullanıcıların varsayılan olarak erişebileceği pg_catalog içinde yeniden oluşturun:

    DROP EXTENSION hive_compatible;
    CREATE EXTENSION hive_compatible SCHEMA pg_catalog;

Neden 2 — İlk bağımsız değişken TEXT değil

GET_JSON_OBJECT ilk bağımsız değişkenin TEXT türünde olmasını gerektirir. Sütunun farklı bir veri türü varsa TEXT'e dönüştürün:

SELECT get_json_object(col::text, '$.key') FROM your_table;

ERROR: get_json_object for fe, should not be evaluated

Neden 1 — İlk bağımsız değişken bir sabit

GET_JSON_OBJECT ilk bağımsız değişken olarak bir dize sabitini kabul etmez. Bunun yerine bir tablo sütun referansı iletin:

-- Correct: pass a column reference
SELECT get_json_object(col_json, '$.key') FROM your_table;

Neden 2 — İlk bağımsız değişken NULL içeriyor

İşlevi çağırmadan önce sütunun NULL olduğu satırları kaldırın:

SELECT get_json_object(col_json, '$.key')
FROM your_table
WHERE col_json IS NOT NULL;