场景
日志服务内置了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:
相关推荐
Oracle Essbase & Oracle OLAP: The Guide to Oracle's Multidimensional Solution (Osborne ORACLE Press Series) By Michael Schrader, Dan Vlamis, Mike Nader, Chris Claterbos, Dave Collins, Mitch Campbell, ...
藏经阁-「ICDE 2019」Alibaba OLAP:Challenge,Evolution and Improvement
下载之后再maven的bin目录下使用mvn命令:mvn install:install-file -Dfile=F:\apache-maven-3.5.3\mylib\olap4j-0.9.7.309-JS-3.jar -DgroupId=org.olap4j -DartifactId=olap4j-0.9.7.309-JS-3 -Dversion=0.9.7.309...
OLAP 商业智能 数据仓库 学习案例 SQL Server 2008 Analysis Services Business Intelligence Study sample. 欢迎大家学习!
Joe Celko’s Analytics and OLAP in SQL
olap4j-0.9.7.309-JS-3.jar 29-Apr-2013 11:12 434.91 KB olap4j-0.9.7.309-JS-3.pom 29-Apr-2013 11:12 397 bytes
SQLServer OLAP实验详解,内含数据备份文件,以FoodMart为案例,讲解使用SQLServer 经历数据仓库,进行OLAP分析,建立数据挖掘模型。
SQL Server 2000 OLAP
SQL Server数据库的三种版本及OLAP方法的研究
下载之后再maven的bin目录下使用mvn命令:mvn install:install-file -Dfile=F:\apache-maven-3.5.3\mylib\olap4j-0.9.7.309-JS-3.jar -DgroupId=org.olap4j -DartifactId=olap4j-0.9.7.309-JS-3 -Dversion=0.9.7.309...
DB2中OLAP函数。电子文档里面有详细介绍!对学习开窗函数有很好的帮助。联机分析处理OLAP是一种软件技术,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。
详解Oracle分析函数,主用于OLAP,以实例讲解分析函数. 如: 排序用Rank, Dense_rank, row_number 1.带空值的排列 2.Top/Bottom N查询 3.First/Last排名查询 4.按层次查询 1.窗口函数简介 2.窗口函数示例-全统计 3....
资源名称:SQL Server 2000 OLAP解决方案—数据仓库与AnalysisService内容简介:SQL Server 2000是一套集易学、易用以及功能强大于一身的数据库系统软件,除了传统的基本数据库功能外,还增加了联机分析处理(OLAP)...
如果你想利用SQLServer进行 OLAP实验,下载本资源就没有错,压缩包内部含数据备份文件,主要是讲解使用SQLServer 创建数据仓库,并进行OLAP分析操作,建立数据挖掘模型的过程
olap4j-0.9.7.309-JS-3.jar maven中央仓库下载不到 网上找了很久
数据仓库和OLAP实践教程(sql server
OLAP技术及其在SQL SERVER2000中的实现.pdf
内含ppt,视频,文档,示例,非常好!!!!!!!!!!!!
基于SQL Server的OLAP和数据挖掘设计.pdf
蒙德里安·奥拉普 JRuby gem,用于使用Mondrian OLAP Java库执行关系数据库数据的多维查询。 描述 SQL语言非常适合从关系数据库中进行临时... 可以用于在基于mondrian-olap的后端数据库之上创建易于使用的基于Web的报