JSON yol ifadesi
Şunun için geçerlidir: Databricks SQL denetimi yes Databricks Runtime
JSON yol ifadesi, kullanarak bir JSON dizesinden değerleri ayıklamak için kullanılır : işleci
Sözdizimi
{ { identifier | [ field ] | [ * ] | [ index ] }
[ . identifier | [ field ] | [ * ] | [ index ] ] [...] }
ve *
index
öğesini çevreleyen field
köşeli ayraçlar gerçek köşeli ayraçtır ve isteğe bağlı bir söz dizimini göstermez.
Parametre
- identifier: JSON alanının büyük/küçük harfe duyarsız tanımlayıcısı.
[ field ]
: JSON alanını tanımlayan köşeli ayraçlı büyük/küçük harfe duyarlı STRING değişmez değeri.[ * ]
: JSON dizisindeki tüm öğeleri tanımlama.[ index ]
: 0 tabanlı JSON dizisindeki belirli bir öğeyi tanımlayan tamsayı değişmez değeri.
Döndürür
BIR DIZE.
Sınırlandırılmamış null
değere sahip bir JSON alanı olduğunda, bu sütun için metin değeri değil null
SQL NULL
değeri alırsınız.
Değerleri temel veri türlerine atamak için :: işlecini kullanabilirsiniz.
İç içe sonuçları diziler veya yapılar gibi daha karmaşık veri türlerine ayırmak için from_json işlevini kullanın.
Notlar
Ad boşluk veya özel karakter içermiyorsa ve farklı durumlarda aynı ada sahip bir alan yoksa, bir JSON alanına başvurmak için sınırlandırılmamış tanımlayıcı kullanabilirsiniz.
Farklı bir durumda aynı ada sahip bir alan yoksa sınırlandırılmış tanımlayıcı kullanın.
Gösterimi [ field ]
her zaman kullanılabilir, ancak alanın büyük/küçük harfle tam olarak eşleşmenizi gerektirir.
Databricks SQL bir alanı benzersiz olarak tanımlayamazsa bir hata döndürülür. Herhangi bir alan için eşleşme bulunmazsa Databricks SQL döndürür NULL
.
Örnekler
Aşağıdaki örneklerde Örnek veriler içindeki deyimiyle oluşturulan veriler kullanılır.
Bu bölümde:
- Tanımlayıcı ve sınırlayıcıları kullanarak ayıklama
- İç içe alanları ayıklama
- Dizilerden değerleri ayıklama
- NULL davranışı
- Atama değerleri
- Örnek veriler
Tanımlayıcı ve sınırlayıcıları kullanarak ayıklama
> SELECT raw:owner, raw:OWNER, raw:['owner'], raw:['OWNER'] FROM store_data;
amy amy amy NULL
-- Use backticks to escape special characters. References are case insensitive when you use backticks.
-- Use brackets to make them case sensitive.
> SELECT raw:`zip code`, raw:`Zip Code`, raw:['fb:testid'] FROM store_data;
94025 94025 1234
İç içe alanları ayıklama
-- Use dot notation
> SELECT raw:store.bicycle FROM store_data;
'{ "price":19.95, "color":"red" }'
-- Use brackets
> SELECT raw:['store']['bicycle'] FROM store_data;
'{ "price":19.95, "color":"red" }'
Dizilerden değerleri ayıklama
-- Index elements
> SELECT raw:store.fruit[0], raw:store.fruit[1] FROM store_data;
'{ "weight":8, "type":"apple" }' '{ "weight":9, "type":"pear" }'
-- Extract subfields from arrays
> SELECT raw:store.book[*].isbn FROM store_data;
'[ null, "0-553-21311-3", "0-395-19395-8" ]'
-- Access arrays within arrays or structs within arrays
> SELECT raw:store.basket[*],
raw:store.basket[*][0] first_of_baskets,
raw:store.basket[0][*] first_basket,
raw:store.basket[*][*] all_elements_flattened,
raw:store.basket[0][2].b subfield
FROM store_data;
basket first_of_baskets first_basket all_elements_flattened subfield
---------------------------- ------------------ --------------------- --------------------------------- ----------
[ [ [ [1,2,{"b":"y","a":"x"},3,4,5,6] y
[1,2,{"b":"y","a":"x"}], 1, 1,
[3,4], 3, 2,
[5,6] 5 {"b":"y","a":"x"}
] ] ]
NULL davranışı
> SELECT '{"key":null}':key IS NULL sql_null, '{"key":"null"}':key IS NULL;
true false
Atama değerleri
-- price is returned as a double, not a string
> SELECT raw:store.bicycle.price::double FROM store_data
19.95
-- use from_json to cast into more complex types
> SELECT from_json(raw:store.bicycle, 'price double, color string') bicycle FROM store_data
'{ "price":19.95, "color":"red" }'
-- the column returned is an array of string arrays
> SELECT from_json(raw:store.basket[*], 'array<array<string>>') baskets FROM store_data
'[
["1","2","{\"b\":\"y\",\"a\":\"x\"}]",
["3","4"],
["5","6"]
]'
Örnek veriler
CREATE TABLE store_data AS SELECT
'{
"store":{
"fruit": [
{"weight":8,"type":"apple"},
{"weight":9,"type":"pear"}
],
"basket":[
[1,2,{"b":"y","a":"x"}],
[3,4],
[5,6]
],
"book":[
{
"author":"Nigel Rees",
"title":"Sayings of the Century",
"category":"reference",
"price":8.95
},
{
"author":"Herman Melville",
"title":"Moby Dick",
"category":"fiction",
"price":8.99,
"isbn":"0-553-21311-3"
},
{
"author":"J. R. R. Tolkien",
"title":"The Lord of the Rings",
"category":"fiction",
"reader":[
{"age":25,"name":"bob"},
{"age":26,"name":"jack"}
],
"price":22.99,
"isbn":"0-395-19395-8"
}
],
"bicycle":{
"price":19.95,
"color":"red"
}
},
"owner":"amy",
"zip code":"94025",
"fb:testid":"1234"
}' as raw