ستريك البيانات SQL التعبير مسار JSON

يتم استخدام تعبير مسار JSON لاستخراج القيم من سلسلة JSON باستخدام : عامل التشغيل

بناء الجملة

{ { identifier | [ field ] | [ * ] | [ index ] }
  [ . identifier | [ field ] | [ * ] | [ index ] ] [...] }

الأقواس field المحيطة ، * وهي index أقواس الفعلية ولا تشير إلى بناء جملة اختياري.

المعلمات

  • المعرف: معرف غير حساس لحالة الأحرف لحقل JSON.
  • [ field ]: عبارة عن سلسلة حساسة لحالة الأحرف بين قوسين تعرف حقل JSON.
  • [ * ]تحديد كافة العناصر في صفيف JSON.
  • [ index ]قيمة حرفية صحيحة لتعريف عنصر معين في صفيف JSON يستند إلى 0.

المرتجعات

سلسلة.

عندما يكون حقل JSON موجودا بقيمة غير null محددة، ستتلقى قيمة SQL NULL لهذا العمود، وليس قيمة null نصية.

يمكنك استخدام :: عامل التشغيل إلى تحويل القيم إلى أنواع البيانات الأساسية.

استخدم الدالة from_json لتحويل النتائج المتداخلة إلى أنواع بيانات أكثر تعقيدا، مثل الصفائف أو البنيات.

ملاحظات

يمكنك استخدام معرف un-delimited للإشارة إلى حقل JSON إذا كان الاسم لا يحتوي على مسافات أو أحرف خاصة، ولا يوجد حقل بنفس الاسم في حالة مختلفة.

استخدم معرف محدد إذا لم يكن هناك حقل بنفس الاسم في حالة مختلفة.

[ field ]يمكن استخدام بالتحديد دائما، ولكنه يتطلب منك مطابقة حالة الحقل تماما.

إذا لم يتمكن databricks SQL من تعريف حقل بشكل فريد يتم إرجاع خطأ. إذا لم يتم العثور على تطابق لأي حقل Databricks SQL إرجاع NULL .

أمثلة

تستخدم الأمثلة التالية البيانات التي تم إنشاؤها باستخدام العبارة في بيانات Example.

في هذا القسم:

استخراج باستخدام المعرف ومحددات

> 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"]
  ]'

مثال على البيانات

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