场景
日志服务内置了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:
相关推荐
《Joe Celko’s Analytics and OLAP in SQL》是著名数据库专家Joe Celko的一部专著,专注于探讨在SQL环境中进行数据分析和在线分析处理(OLAP)的理论与实践。这本书对于理解和掌握高级SQL技巧,特别是在大数据分析...
《SQL Server 2005 BI综合案例系列课程(17):航空运营服务系统中的OLAP应用》 本课程是针对SQL Server 2005商务智能(BI)技术在航空运营服务系统中的实际应用进行深入讲解。商务智能是企业数据分析的核心工具,...
在这个学习案例中,"datawarehouse"可能代表的是实际的数据仓库项目文件,可能包含了ETL脚本、数据模型设计、多维数据集定义和相关的测试数据。通过深入研究这些文件,你可以实践上述概念,并增强你在OLAP和商业智能...
在本实验中,我们将深入探讨SQLServer在在线分析处理(OLAP)以及数据挖掘中的应用。这个实验基于一个名为FoodMart的数据集,该数据集是一个典型的企业级零售业务数据库,适用于展示多维数据分析和数据仓库的功能。...
在这个演讲中,阿里云OLAP团队分享了他们在数据库架构设计和实现中的经验和教训,从传统的RDBMS到云计算时代的OLAP系统演进。 数据库在云计算时代面临的挑战 在云计算时代,数据库面临着许多挑战,包括数据处理、...
1. **数据库基本概念**:包括数据库、数据模型(如关系模型)、数据库管理系统(DBMS)等定义,以及它们在信息系统中的角色。 2. **数据模型**:讲解实体-关系(E-R)模型、关系模型,以及如何用这些模型来表达现实...
在这个案例中,SQL Server 2012被选作实现OLAP和数据挖掘功能的工具。它包含一些专门的组件,如SSIS(SQL Server Integration Services)、SSAS(SQL Server Analysis Services)和SSRS(SQL Server Reporting ...
《SQL Server 2008案例教程》是一本旨在引导读者深入理解并熟练掌握SQL Server 2008这一数据库管理系统的专著。SQL Server 2008是微软公司推出的一款强大的关系型数据库管理系统,它在数据存储、处理和分析方面提供...
在SQL Server 2000中,OLAP服务是通过Analysis Services组件实现的,它提供了强大的数据聚合、切片和 dice 功能,以及旋转(pivot)操作,以帮助用户从不同角度理解数据。 OLAP系统主要由以下几个关键组件构成: 1...
在SQL Server 2000 中,用户可以利用立方体(Cube)对象和维度对象来实现OLAP功能。通过SQL Server Analysis Services (SSAS),用户可以构建、管理和查询立方体,它包含了多维数据集(Multidimensional Datasets)的...
10. **案例研究**:通过具体的商务智能应用场景,演示如何使用SQL Server 2005 BI平台解决实际业务问题。 附带的**20071016--SQL Server 2005 BI系列课程(2):基于SQL SERVER 2005 BI平台实现商务智能过程.pdf** ...
下载之后再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...
"olap4j-0.9.7.309-JS-3.jar"是一个专注于在线分析处理(OLAP)的Java库,它在编程社区中具有一定的地位,但并非易得之物。这个特定版本的库在maven中央仓库中难以找到,导致了开发者在寻找和使用时遇到了困扰。 ...
SQL Server 2008 R2是微软公司发布的一款关系数据库管理系统,它支持数据仓库和在线...此外,文档中的一些函数可能因为OCR扫描错误导致文字识别不准确,建议结合实际的开发环境和SQL Server的官方文档进行验证和使用。
SQL Server 数据库是微软公司推出的关系型数据库管理系统,它在企业数据管理和商业智能应用中扮演着重要角色。本文主要探讨了SQL Server的三个主要版本——SQL Server 2000、SQL Server 2005和SQL Server 2008,以及...
在SQLServer中,可以使用Integration Services(SSIS)进行数据抽取、转换和加载(ETL)过程,将源数据清洗并导入到数据仓库中。 接下来,创建多维数据集(Cube)是OLAP的核心步骤。在SQLServer中,Analysis ...
在本例中,olap4j-0.9.7.309-JS-3.pom包含了olap4j的依赖关系和版本信息,以便于使用Maven构建工具将该库集成到其他Java项目中。通过引入这个pom文件,开发人员可以确保他们的项目能够正确地获取和管理olap4j库及其...