تعبير مسار JSON
ينطبق على: التحقق من Databricks SQL Databricks Runtime
يتم استخدام تعبير مسار JSON لاستخراج القيم من سلسلة JSON باستخدام عامل التشغيل :
بناء الجمله
{ { identifier | [ field ] | [ * ] | [ index ] }
[ . identifier | [ field ] | [ * ] | [ index ] ] [...] }
الأقواس المحيطة field
، *
و index
هي أقواس فعلية ولا تشير إلى بناء جملة اختياري.
معلمات
- المعرف: معرف غير حساس لحالة الأحرف لحقل JSON.
[ field ]
: حرف سلسلة حساس لحالة الأحرف بين قوسين يحدد حقل JSON.[ * ]
: تحديد جميع العناصر في صفيف JSON.[ index ]
: عدد صحيح حرفي يحدد عنصرا معينا في صفيف JSON يستند إلى 0.
ارجاع
سلسلة.
عند وجود حقل JSON بقيمة غير محددة null
، ستتلقى قيمة SQL NULL
لهذا العمود، وليس قيمة نصية null
.
يمكنك استخدام :: عامل التشغيل لتحويل القيم إلى أنواع البيانات الأساسية.
استخدم الدالة from_json لتحويل النتائج المتداخلة إلى أنواع بيانات أكثر تعقيدا، مثل الصفائف أو البنيات.
تلاحظ
يمكنك استخدام معرف غير محدد للإشارة إلى حقل JSON إذا كان الاسم لا يحتوي على مسافات أو أحرف خاصة، ولا يوجد حقل بنفس الاسم في حالة مختلفة.
استخدم معرفا محددا إذا لم يكن هناك حقل بنفس الاسم في حالة مختلفة.
[ field ]
يمكن دائما استخدام العلامات، ولكن يتطلب منك مطابقة حالة الحقل تماما.
إذا تعذر على Databricks SQL تحديد حقل بشكل فريد، يتم إرجاع خطأ. إذا لم يتم العثور على تطابق لأي حقل ترجعه NULL
Databricks SQL .
امثله
تستخدم الأمثلة التالية البيانات التي تم إنشاؤها باستخدام العبارة في بيانات المثال.
في هذا القسم:
- استخراج باستخدام المعرف والمحددات
- استخراج الحقول المتداخلة
- استخراج القيم من الصفائف
- سلوك NULL
- قيم الإرسال
- مثال على البيانات
استخراج باستخدام المعرف والمحددات
> 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
استخراج الحقول المتداخلة
-- 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" }'
استخراج القيم من الصفائف
-- 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
> SELECT '{"key":null}':key IS NULL sql_null, '{"key":"null"}':key IS NULL;
true false
قيم الإرسال
-- 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"]
]'
مثال على البيانات
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