在SQL中使用UDF和lambda函数使用示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
丰城网站建设公司成都创新互联,丰城网站设计制作,有大型网站制作公司丰富经验。已为丰城1000多家提供企业网站建设服务。企业网站搭建\成都外贸网站建设公司要多少钱,请找那个售后服务好的丰城做网站的公司定做!
摘要: 场景 日志服务内置了20+类SQL函数。面对用户复杂的业务场景,例如使用json来沉淀业务数据,普通的SQL函数可能就无法满足需求,需要一些用户自定义处理逻辑。为了处理json类的业务数据,我们可以采用把json展开成多行的形式进行统计分析,今天我们介绍使用UDF(lambda)的方式来编写自定义逻辑,处理json、array、map类型的数据。
场景
日志服务内置了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.count+1) 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.count+1) 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.count+1) as ROW(sum double, count INTEGER)), s -> s) as rows from log )
通过子查询的方式,先reduce每一行的array的sum 和count。之后在嵌套查询中,求所有行的sum和count,最后相除求avg:

关于在SQL中使用UDF和lambda函数使用示例分析问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。
网页题目:在SQL中使用UDF和lambda函数使用示例分析
转载注明:http://www.scyingshan.cn/article/ipiphi.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 