JSON_TUPLE , bir JSON dizesinden tek geçişte birden fazla değeri ayıklayan tablo döndüren bir işlevdir. Çağrı başına tek değer döndüren GET_JSON_OBJECT veya JSON_VALUE gibi skaler işlevlerin aksine, JSON_TUPLE bir veya daha fazla yol bağımsız değişkeni kabul eder ve her yol bağımsız değişkeni için bir çıktı satırı üretir; bu satırları sonuç kümenize genişletmek amacıyla bir LATERAL TABLE birleşimi ile kullanın.
Sürüm gereksinimi
Ververica Runtime (VVR) 3.0.0+
Söz dizimi
JSON_TUPLE(str, path1, path2, ..., pathN)
Parametreler
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kullanım notları
Yol söz dizimi standart JSONPath gösterimini takip etmez; standart JSONPath'in gerektirdiği baştaki
$karakterini atlayın.Yol bağımsız değişkenleri dize değişmezleri (
'myKey') veya çalışma zamanında VARCHAR olarak çözümlenen sütun başvuruları olabilir.Bir yol giriş JSON'unda bulunamazsa ilgili çıktı sütunu NULL olur.
strNULL ise davranış VVR sürümüne bağlıdır. Bkz. NULL değeri işleme davranışı değişikliği.
Örnekler
-
Örnek veriler
Tablo T1. T1
d (VARCHAR)
s (VARCHAR){"qwe":"asd","qwe2":"asd2","qwe3":"asd3"}
qwe3{"qwe":"asd4","qwe2":"asd5","qwe3":"asd3"}
qwe2 -
Örnek
Aşağıdaki sorgu,
dsütunundan satır başına iki değer ayıklar: değişmez anahtar'qwe'değerini ve sütun başvurusu olanssütunu tarafından adlandırılan anahtarın değerini. İki yol bağımsız değişkeni bulunduğundan,JSON_TUPLEher giriş satırı için iki çıktı satırı üretir.SELECT d, v FROM T1, lateral table(JSON_TUPLE(d, 'qwe', s)) AS T(v); -
Çıktı
d (VARCHAR)
v (VARCHAR){"qwe":"asd","qwe2":"asd2","qwe3":"asd3"}
asd{"qwe":"asd","qwe2":"asd2","qwe3":"asd3"}
asd3{"qwe":"asd4","qwe2":"asd5","qwe3":"asd3"}
asd4{"qwe":"asd4","qwe2":"asd5","qwe3":"asd3"}
asd5
NULL değeri işleme: Davranış değişikliği
str NULL olduğunda JSON_TUPLE işlevinin davranışı VVR sürümleri arasında değişmiştir. İşiniz VVR 11.0 öncesinde geliştirildiyse ve eski davranışa dayanıyorsa aşağıdaki davranış karşılaştırmasını inceleyin.
Davranış karşılaştırması
str bağımsız değişkeninin NULL olduğu aşağıdaki sorguyu varsayalım:
SELECT * FROM (VALUES (1), (2)) AS v(x)
, LATERAL TABLE(
json_tuple(CAST(NULL AS STRING), 'a', 'b')
) AS T;
-- Each input row returns two rows with NULL. Total: 4 rows — (1,null), (1,null), (2,null), (2,null)
|
|
|
|
|
|
|
|
|
|
|
|