Databricks SQL JSON路徑表達式

路徑表達式用於從JSON字符串中提取值:操作符

語法

標識符|||指數標識符|||指數...

周圍的括號而且指數是實際的括號,不表示可選語法。

參數

  • 標識符: JSON字段的標識符,不區分大小寫。

  • :一個帶括號區分大小寫的STRING字麵值,用於標識JSON字段。

  • :標識JSON數組中的所有元素。

  • 指數:一個整數字麵值,用於標識基於0的JSON數組中的特定元素。

返回

一個字符串。

當JSON字段存在未分隔符時值,您將收到一個SQL值,而不是文本值。

你可以使用::操作符將值轉換為基本數據類型。

使用from_json函數將嵌套結果轉換為更複雜的數據類型,如數組或結構。

筆記

如果名稱不包含空格或特殊字符,並且在不同情況下沒有相同名稱的字段,則可以使用未分隔符標識符來引用JSON字段。

如果在不同的情況下沒有相同名稱的字段,則使用分隔標識符。

始終可以使用符號,但要求您完全匹配字段的大小寫。

如果Databricks SQL不能唯一地識別一個字段,則返回錯誤。如果沒有找到匹配的任何字段Databricks SQL返回

例子

下麵的示例使用語句中創建的數據示例數據

使用標識符和分隔符提取

>選擇老板老板:[“主人”),:[“主人”store_data艾米艾米艾米—使用反引號轉義特殊字符。使用反勾號時引用不區分大小寫。使用括號區分大小寫。>選擇郵政編碼代碼郵政編碼代碼:[“fb: testid”store_data94025940251234

提取嵌套字段

使用點表示法>選擇商店自行車store_data{"價格":19.95,"顏色":"紅色"}——使用括號>選擇:[“存儲”] [“自行車”store_data{"價格":19.95,"顏色":"紅色"}

從數組中提取值

——索引元素> SELECT raw:store.fruit[0], raw:store.fruit[1] FROM store_data;'{"weight":8, "type":"apple"}' '{"weight":9, "type":"pear"}'——從數組>中提取子字段SELECT raw:store.book[*]。isbn FROM store_data;'[null, "0-553-21311-3", "0-395- 19995 -8"]'——訪問數組中的數組或數組中的結構> SELECT raw:存儲。籃子[*],生:商店。籃子[*][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"} ] ] ]

空的行為

>選擇”{零}“關鍵”:“關鍵sql_null”{“關鍵”:“零”}’關鍵真正的

把值

——price返回double類型,而不是string類型>選擇商店自行車價格::store_data1995——使用from_json轉換為更複雜的類型>選擇from_json商店自行車'價格雙倍,顏色字符串'自行車store_data{"價格":19.95,"顏色":"紅色"}——返回的列是字符串數組的數組>選擇from_json商店籃子),“數組<數組<字符串> >”籃子store_data”((“1”、“2”、“{\ b \”:\“y \”,\“\”,\“x \ "})”,(“3”、“4”)(“5”、“6”)]“

示例數據

創建表格store_data作為選擇”{“存儲”:{“水果”:[{“重量”:8,“類型”:“蘋果”},{“重量”:9,“類型”:“梨”}),“籃子”:((1、2、{“b”:“y”,“一個”:“x”}),(3、4),(5、6)),“書”:(奈傑爾•裏斯”“作者”:“標題:“世紀名言”,“類別”:“引用”,“價格”:8.95},“作者”:“赫爾曼·麥爾維爾”,“標題”:“白鯨記”,“類別”:“小說”,“價格”:8.99,“isbn”:“0-553-21311-3”},“作者”:“J。r。r。托爾金"“標題”:“指環王”,“類別”:“小說”,“讀者”:({“年齡”:25歲的“名稱”:“bob”},{“年齡”:26日,“名字”:“傑克”}),“價格”:22.99,“isbn”:“0-395-19395-8”),“自行車”:{“價格”:19.95,“顏色”:“紅色”},“老板”:“艾米”,“郵政編碼”:“94025”,“fb: testid”:“1234”} '作為