Aracılığıyla paylaş


JSON yol ifadesi

Şunlar için geçerlidir:onay işareti evet olarak işaretlenmiş Databricks SQL onay işareti evet olarak işaretlenmiş 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çin VARIANT 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.

İç 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ç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 VARIANTkodlanabilir ve bu değer sql NULLdeğildir. Bu nedenle, parse_json('null') IS NULLfalse, 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

> 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;