较复杂的

多project查询

LogStore与RDS联合查询
Join语法

unnest语法

处理数据时,一列数据通常为字符串或数字等primitive类型的数据。
在复杂的业务场景下,日志数据的某一列可能会是较为复杂的格式,例如:
    数组(array)、对象(map)、JSON等格式
对这种特殊格式的日志字段进行查询分析,可以使用unnest语法。

unnest语法结构:

unnest( array) as table_alias(column_name)
    表示把array类型展开成多行,行的名称为column_name。
unnest(map) as table(key_name, value_name)
    表示把map类型展开成多行,key的名称为key_name,value的名称为value_name

Note

注意,由于unnest接收的是array或者map类型的数据,如果您的输入为字符串类型,那么要先转化成json类型,然后再转化成array类型或map类型,转化的方式为 cast(json_parse(array_column) as array(bigint))。

实例:

__source__:  1.1.1.1
__tag__:__hostname__:  vm-req-170103232316569850-tianchi111932.tc
__topic__:  TestTopic_4
array_column:  [1,2,3]
double_column:  1.23
map_column:  {"a":1,"b":2}
text_column:  商品

遍历数组

遍历数组每一个元素:

使用SQL把array展开成多行:
* | select  array_column, a   from log,
    unnest(
      cast( json_parse(array_column)   as array(bigint) )
    ) as  t(a)

统计数组中的每个元素的和:

* | select   sum(a)    from log,
    unnest(
        cast( json_parse(array_column)   as array(bigint) )
    ) as  t(a)

按照数组中的每个元素进行group by计算:

* | select   a, count(1)    from log,
    unnest(
        cast( json_parse(array_column)   as array(bigint) )
    ) as  t(a)     group by a

遍历Map

遍历Map中的元素:

* | select  map_column , a,b    from log,
    unnest(
        cast( json_parse(map_column)   as map(varchar, bigint) )
    ) as  t(a,b)

按照Map的key进行group by 统计:

* | 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的结果

通常情况下histogram的结果为一串json数据,无法配置视图展示,例如:

* | select histogram(method)

您可以通过unnest语法,把JSON展开成多行配置视图,例如:

* | select  key , value  from(
    select histogram(method) as his from log
) , unnest(his ) as t(key,value)

numeric_histogram语法是为了把数值列分配到多个桶中去,相当于对数值列进行group by:

* | select numeric_histogram(10,Latency)

numeric_histogram的输出格式化展示:

* |  select key,value from(
    select numeric_histogram(10, Latency) as his from log
) , unnest(his) as t(key,value)

实例:

__source__:  1.1.1.1
__tag__:__hostname__:  vm-req-170103232316569850-tianchi111932.tc
__topic__:  TestTopic_4
array_column:  [1,2,3]
double_column:  1.23
map_column:  {"a":1,"b":2}
text_column:  商品