JSON yol ifadesi

Şunun için geçerlidir:evet olarak işaretlendi Databricks SQL denetimi yes Databricks Runtime olarak işaretlendi

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 fieldköş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

> 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