摘要: 場景 一般,咱們處理數據,一列數據類型要麼是字符串,要麼是數字,這些都是primitive類型的數據。json
場景數組
一般,咱們處理數據,一列數據類型要麼是字符串,要麼是數字,這些都是primitive類型的數據。在某些比較複雜的業務場景下,咱們會在一列中使用複雜的格式,例如數組array, 對象(map),json等格式來表示複雜的數據,例如:函數
array_column
是數組類型。假如,咱們但願統計array_column中全部數值的彙總值,那麼咱們得遍歷每一行的數組中的每個元素。3d
unnest語法code
unnest(map) as table(key_name, value_name)對象
表示把map類型展開成多行,key的名稱爲key_name, value的名稱爲value_name
cast(json_parse(array_column) as array(bigint))
遍歷數組每個元素blog
使用SQL把array展開成多行:文檔
* | select array_column, a from log, unnest( cast( json_parse(array_column) as array(bigint) ) ) as t(a)
字符串
上述SQL把數組展開成多行數字,unnest( cast( json_parse(array_column) as array(bigint) ) ) as t(a)
,unnest語法把數組展開,以t來命名新生成的表,使用a來引用展開後的列。結果以下圖:get
* | select sum(a) from log, unnest( cast( json_parse(array_column) as array(bigint) ) ) as t(a)
* | select a, count(1) from log, unnest( cast( json_parse(array_column) as array(bigint) ) ) as t(a) group by a
遍歷Map
* | select map_column , a,b from log, unnest( cast( json_parse(map_column) as map(varchar, bigint) ) ) as t(a,b)
* | select key, sum(value) from log, unnest( cast( json_parse(map_column) as map(varchar, bigint) ) ) as t(key,value) GROUP BY key
格式化顯示histogram,numeric_histogram的結果
1.histogram
histogram函數相似於count group by 語法。語法參考文檔。
一般咱們看到histogram的結果以下:
* | select histogram(method)
是一串json,沒法配置視圖展現,咱們能夠用unnest語法,把json展開成多行配置視圖,例如:
* | select key , value from( select histogram(method) as his from log) , unnest(his ) as t(key,value)
接下來,能夠配置可視化視圖:
2. numeric_histogram
numeric_histogram語法是爲了把數值列分配到多個桶中去,至關於對數值列進行group by,具體語法參考文檔
* | select numeric_histogram(10,Latency)
numeric_histogram的輸出以下:
爲了格式化展現該結果,咱們這樣寫SQL:
* | select key,value from(select numeric_histogram(10,Latency) as his from log) , unnest(his) as t(key,value)
結果以下:
同時配置柱狀圖的形式展現: