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