太原的网站搭建公司,怎么建一个小说网站,建设彩票网站犯法吗,专业网站运营设计场景 日志服务内置了20类SQL函数。面对用户复杂的业务场景#xff0c;例如使用json来沉淀业务数据#xff0c;普通的SQL函数可能就无法满足需求#xff0c;需要一些用户自定义处理逻辑。为了处理json类的业务数据#xff0c;我们可以采用把json展开成多行的形式进行统计分析… 场景 日志服务内置了20类SQL函数。面对用户复杂的业务场景例如使用json来沉淀业务数据普通的SQL函数可能就无法满足需求需要一些用户自定义处理逻辑。为了处理json类的业务数据我们可以采用把json展开成多行的形式进行统计分析今天我们介绍使用UDF(lambda)的方式来编写自定义逻辑处理json、array、map类型的数据。 数据样例 __source__: 11.164.232.105
__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: 商品 lambda函数对array类型的数据进行求均值 为了遍历每一个array元素并且把计算所有元素的均值我们通过reduce函数进行计算。 * | select array_column, reduce( cast( json_parse(array_column) as array(bigint)) , CAST(ROW(0.0, 0) AS ROW(sum DOUBLE, count INTEGER)) , (s,x) - cast(row( x s.sum, s.count1) as ROW(sum double, count INTEGER)), s - IF(s.count 0, NULL, s.sum / s.count)) reduce 函数的具体语义参考语法文档。参数分为四部分 cast( json_parse(array_column) as array(bigint)) 表示输入的数组数据 CAST(ROW(0.0, 0) AS ROW(sum DOUBLE, count INTEGER)) 定义起始状态为一个复杂的row类型分别记录sum和count对每一个元素计算累加值(s,x) - cast(row( x s.sum, s.count1) as ROW(sum double, count INTEGER)) s代表已经有的状态x代表新输入的元素计算结果通过cast强制定义为row类型最后对最终状态计算avg值s - IF(s.count 0, NULL, s.sum / s.count)。s代表最终状态。对所有行的array元素求avg * | select sum(rows.sum ) / sum(rows.count) from(select array_column, reduce( cast( json_parse(array_column) as array(bigint)) , CAST(ROW(0.0, 0) AS ROW(sum DOUBLE, count INTEGER)) , (s,x) - cast(row( x s.sum, s.count1) as ROW(sum double, count INTEGER)), s - s) as rows from log ) 通过子查询的方式先reduce每一行的array的sum 和count。之后在嵌套查询中求所有行的sum和count最后相除求avg: