JSON路径表达式
适用于:砖的SQL砖运行时
路径表达式用于从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”}'作为生