查询数据砖的半结构化数据
请注意
在砖运行时8.1及以上。
本文描述了砖SQL操作符可以用来查询和转换的半结构化数据存储为JSON。
请注意
如果处置不当,该功能允许你读半结构化数据文件。然而,对于优化阅读查询性能砖建议您提取的嵌套列使用正确的数据类型。
你从字段中提取一个列包含JSON字符串使用语法<列名称>:< extraction-path >
,在那里<列名称>
字符串列名和吗< extraction-path >
现场提取的路径。返回的结果字符串。
与高嵌套数据创建一个表
运行下面的查询与高度嵌套的数据创建一个表。本文中的示例参考此表。
创建表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”}'作为生
提取一个顶级列
提取一个列,指定JSON的名称字段中提取的道路。
您可以提供列名在括号内。列引用在括号匹配情况敏感。列名称区分大小写的引用。
选择生:老板,生:老板从store_data
+ - - - - - - - - - - - - - - +|老板|老板|+ - - - - - - - - - - - - - - +|艾米|艾米|+ - - - - - - - - - - - - - - +
——引用是大小写敏感的,当你使用括号选择生:老板case_insensitive,生:【“主人”]case_sensitive从store_data
+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - +|case_insensitive|case_sensitive|+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - +|艾米|零|+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - +
用引号的空格和特殊字符转义。字段名称匹配的情况如果不。
——使用引号转义特殊字符。引用是大小写不敏感的,当你使用引号。——使用括号来让他们区分大小写。选择生:”邮政编码代码”,生:”邮政编码代码”,生:【“fb: testid”]从store_data
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|邮政编码代码|邮政编码代码|神奇动物:testid|+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|94025年|94025年|1234年|+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
请注意
如果一个JSON记录包含多个列,可以匹配提取路径由于不分大小写匹配,您将会收到一个错误让你使用括号。如果你有匹配的列行,你将不会收到任何错误。以下将抛出一个错误:{“foo”:“酒吧”,“Foo”:“酒吧”}
,以下不会抛出错误:
{“foo”:“酒吧”}{“Foo”:“酒吧”}
提取嵌套的字段
您指定嵌套域通过点符号或使用括号。当你使用括号、列匹配情况下敏感。
——使用点符号选择生:商店。自行车从store_data——返回的列是一个字符串
+ - - - - - - - - - - - - - - - - - - +|自行车|+ - - - - - - - - - - - - - - - - - - +|{||“价格”:19.95,||“颜色”:“红色”||}|+ - - - - - - - - - - - - - - - - - - +
——使用括号选择生:商店(“自行车”),生:商店(“自行车”]从store_data
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|自行车|自行车|+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|{|零||“价格”:19.95,|||“颜色”:“红色”|||}||+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
从数组中提取值
你用方括号索引元素数组。指数是基于0。您可以使用星号(*
)其次是点或括号从数组中所有元素中提取等领域。
——索引元素选择生:商店。水果(0),生:商店。水果(1]从store_data
+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +|水果|水果|+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +|{|{||“重量”:8,|“重量”:9,||“类型”:“苹果”|“类型”:“梨”||}|}|+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +
——从数组中提取等领域选择生:商店。书(*]。国际标准图书编号从store_data
+ - - - - - - - - - - - - - - - - - - - - - - +|国际标准图书编号|+ - - - - - - - - - - - - - - - - - - - - - - +|(||零,||“0-553-21311-3”,||“0-395-19395-8”||]|+ - - - - - - - - - - - - - - - - - - - - - - +
——访问数组在数组或结构体数组内选择生:商店。篮子(*),生:商店。篮子(*][0]first_of_baskets,生:商店。篮子(0][*]first_basket,生:商店。篮子(*][*]all_elements_flattened,生:商店。篮子(0][2]。b子域从store_data
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|篮子|first_of_baskets|first_basket|all_elements_flattened|子域|+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +|(|(|(|(1,2,{“b”:“y”,“一个”:“x”},3,4,5,6]|y||(1,2,{“b”:“y”,“一个”:“x”}),|1,|1,||||(3,4),|3,|2,||||(5,6]|5|{“b”:“y”,“一个”:“x”}||||]|]|]|||+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + +
把值
您可以使用::
把值基本数据类型。使用from_json方法将嵌套的结果成更复杂的数据类型,比如数组或结构。
——返回价格翻倍,不是一个字符串选择生:商店。自行车。价格::双从store_data
+ - - - - - - - - - - - - - - - - - - +|价格|+ - - - - - - - - - - - - - - - - - - +|19.95|+ - - - - - - - - - - - - - - - - - - +
——使用from_json转换为更复杂的类型选择from_json(生:商店。自行车,“价格翻倍,颜色字符串”)自行车从store_data——返回的列是一个结构体包含的列价格和颜色
+ - - - - - - - - - - - - - - - - - - +|自行车|+ - - - - - - - - - - - - - - - - - - +|{||“价格”:19.95,||“颜色”:“红色”||}|+ - - - - - - - - - - - - - - - - - - +
选择from_json(生:商店。篮子(*),“数组<数组<字符串> >”)篮子从store_data——列返回一个字符串数组的数组
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +|篮子|+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +|(||(“1”,“2”,“{\”b\”:\”y\”,\”一个\”:\”x\”}]”,||(“3”,“4”),||(“5”,“6”]||]|+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +