查詢數據磚的半結構化數據
請注意
在磚運行時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”]||]|+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +