Databricks SQL JSON路徑表達式
路徑表達式用於從JSON字符串中提取值:操作符
參數
標識符: JSON字段的標識符,不區分大小寫。
[場]
:一個帶括號區分大小寫的STRING字麵值,用於標識JSON字段。[*]
:標識JSON數組中的所有元素。[指數]
:一個整數字麵值,用於標識基於0的JSON數組中的特定元素。
返回
一個字符串。
當JSON字段存在未分隔符時零
值,您將收到一個SQL零
值,而不是零
文本值。
你可以使用::操作符將值轉換為基本數據類型。
使用from_json函數將嵌套結果轉換為更複雜的數據類型,如數組或結構。
筆記
如果名稱不包含空格或特殊字符,並且在不同情況下沒有相同名稱的字段,則可以使用未分隔符標識符來引用JSON字段。
如果在不同的情況下沒有相同名稱的字段,則使用分隔標識符。
的[場]
始終可以使用符號,但要求您完全匹配字段的大小寫。
如果Databricks SQL不能唯一地識別一個字段,則返回錯誤。如果沒有找到匹配的任何字段Databricks SQL返回零
.
例子
下麵的示例使用語句中創建的數據示例數據.
使用標識符和分隔符提取
>選擇生:老板,生:老板,生:[“主人”),生:[“主人”]從store_data;艾米艾米艾米零—使用反引號轉義特殊字符。使用反勾號時引用不區分大小寫。使用括號區分大小寫。>選擇生:`郵政編碼代碼`,生:`郵政編碼代碼`,生:[“fb: testid”]從store_data;94025940251234
提取嵌套字段
使用點表示法>選擇生:商店.自行車從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_data19.95——使用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”} '作為生