Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir: Databricks SQL
Databricks Runtime
JSON yol ifadesi, bir JSON dizesinden veya VARIANT
üzerinden : operatörünü kullanarak değerleri ayıklamak için kullanılır.
Sözdizimi
{ { identifier | [ field ] | [ * ] | [ index ] }
[ . identifier | [ field ] | [ * ] | [ index ] ] [...] }
field
, *
ve index
öğelerini çevreleyen köşeli ayraçlar gerçek köşeli ayraçlardır ve isteğe bağlı bir söz dizimini göstermez.
Parametreler
-
identifier: JSON alanının tanımlayıcısı. JSON
STRING
türleri için tanımlayıcı büyük/küçük harfe duyarlı değildir.VARIANT
türleri için büyük/küçük harfe duyarlıdır. -
[ field ]
: Bir JSON alanını tanımlayan köşeli ayraçlı büyük/küçük harfe duyarlıSTRING
sabit değer. -
[ * ]
: Bir JSON dizisindeki tüm öğeleri tanımlama. Bu söz dizimi içinVARIANT
desteklenmez. -
[ index ]
: 0 tabanlı JSON dizisindeki belirli bir öğeyi tanımlayan tamsayı değişmez değeri.
İadeler
STRING
Gezinilen ifade bir STRING
ise.
VARIANT
Eğer gezinilen ifade bir VARIANT
ise.
Eğer JSON alanı, sınırlandırılmamış bir null
değere sahipse, bu sütun için NULL
SQL null
değeri alırsınız, metin değeri değil.
Değerleri temel veri türlerine dökmek için :: işlecini kullanabilirsiniz.
Notlar
Ad, boşluk veya özel karakter içermediği sürece ve JSON'da farklı bir durumda aynı ada sahip bir alan olmadığı sürece, bir JSON alanına atıfta bulunmak için sınırlandırılmamış bir tanımlayıcı kullanabilirsiniz.
Farklı bir durumda aynı ada sahip bir alan yoksa sınırlandırılmış tanımlayıcı kullanın.
[ field ]
gösterimi her zaman kullanılabilir, ancak alanın büyük küçük harf uyumunu tam olarak eşleştirmenizi gerektirir.
Azure Databricks bir alanı benzersiz olarak tanımlayamıyorsa bir hata döndürülür. Herhangi bir alan için eşleşme bulunmazsa Azure Databricks döndürür NULL
.
Bir NULL
değer içinde VARIANT
kodlanabilir ve bu değer sql NULL
değildir.
Bu nedenle, parse_json('null') IS NULL
false
, ancak is_variant_null(parse_json('null'))
true
.
VARIANT
kodlanmış bir null, bir türe dönüştürülerek SQL NULL
olabilir. Örneğin, parse_json('null')::int IS NULL
şeklindedir true
.
Ö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 çıkarma
- NULL davranışı
- Değerleri dönüştürme
- VARIANT ifadeleri
- Ö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ıkla
-- 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
Değerleri dönüştürme
-- price is returned as a double, not a string
> SELECT raw:store.bicycle.price::double FROM store_data
1.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"]
]'
VARIANT ifadeleri
-- Using JSON paths for VARIANT
> SELECT raw:store.bicycle FROM store_data_variant;
'{ "price":19.95, "color":"red" }'
-- Extracting from VARIANT arrays
> SELECT raw:store.fruit[0], raw_variant:store.fruit[1] FROM store_data_variant;
'{ "weight":8, "type":"apple" }' '{ "weight":9, "type":"pear" }'
-- SQL NULL behavior of VARIANT NULL values
> SELECT
parse_json(NULL) IS NULL AS sql_null,
parse_json('null') IS NULL AS variant_null,
parse_json('{ "field_a": null }'):field_a IS NULL AS variant_null_value,
parse_json('{ "field_a": null }'):missing IS NULL AS missing_sql_value_null
true false false true
-- price is returned as a double, not a VARIANT
> SELECT raw:store.bicycle.price::double FROM store_data_variant
1.95
Ö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
> CREATE TABLE store_data_variant AS SELECT parse_json(raw) FROM store_data;