`
猫耳呀
  • 浏览: 165941 次
社区版块
存档分类
最新评论

日志OLAP:在SQL中使用UDF, lambda函数使用案例

 
阅读更多

摘要: 场景 日志服务内置了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 函数的具体语义参考语法文档。参数分为四部分

  1. cast( json_parse(array_column) as array(bigint)) 表示输入的数组数据
  2. CAST(ROW(0.0, 0) AS ROW(sum DOUBLE, count INTEGER)) 定义起始状态为一个复杂的row类型,分别记录sum和count
  3. 对每一个元素,计算累加值,(s,x) -> cast(row( x+ s.sum, s.count+1) as ROW(sum double, count INTEGER)) s代表已经有的状态,x代表新输入的元素,计算结果通过cast强制定义为row类型
  4. 最后对最终状态,计算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:

原文链接

分享到:
评论

相关推荐

    oe Celko’s Analytics and OLAP in SQL

    《Joe Celko’s Analytics and OLAP in SQL》是著名数据库专家Joe Celko的一部专著,专注于探讨在SQL环境中进行数据分析和在线分析处理(OLAP)的理论与实践。这本书对于理解和掌握高级SQL技巧,特别是在大数据分析...

    SQL Server 2005 BI综合案例系列课程(17):航空运营服务系统中的OLAP应用

    《SQL Server 2005 BI综合案例系列课程(17):航空运营服务系统中的OLAP应用》 本课程是针对SQL Server 2005商务智能(BI)技术在航空运营服务系统中的实际应用进行深入讲解。商务智能是企业数据分析的核心工具,...

    OLAP 商业智能 数据仓库 学习案例 SQL Server 2008 Analysis Services Business Intelligence Study sample

    在这个学习案例中,"datawarehouse"可能代表的是实际的数据仓库项目文件,可能包含了ETL脚本、数据模型设计、多维数据集定义和相关的测试数据。通过深入研究这些文件,你可以实践上述概念,并增强你在OLAP和商业智能...

    SQLServer OLAP实验详解(含数据)

    在本实验中,我们将深入探讨SQLServer在在线分析处理(OLAP)以及数据挖掘中的应用。这个实验基于一个名为FoodMart的数据集,该数据集是一个典型的企业级零售业务数据库,适用于展示多维数据分析和数据仓库的功能。...

    藏经阁-「ICDE 2019」Alibaba OLAP:Challenge,Evolution and Improvement

    在这个演讲中,阿里云OLAP团队分享了他们在数据库架构设计和实现中的经验和教训,从传统的RDBMS到云计算时代的OLAP系统演进。 数据库在云计算时代面临的挑战 在云计算时代,数据库面临着许多挑战,包括数据处理、...

    数据库原理与应用:基于SQL Server 200_

    1. **数据库基本概念**:包括数据库、数据模型(如关系模型)、数据库管理系统(DBMS)等定义,以及它们在信息系统中的角色。 2. **数据模型**:讲解实体-关系(E-R)模型、关系模型,以及如何用这些模型来表达现实...

    基于SQL Server的OLAP和数据挖掘设计.pdf

    在这个案例中,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 2008是微软公司推出的一款强大的关系型数据库管理系统,它在数据存储、处理和分析方面提供...

    SQL Server 2000 OLAP

    在SQL Server 2000中,OLAP服务是通过Analysis Services组件实现的,它提供了强大的数据聚合、切片和 dice 功能,以及旋转(pivot)操作,以帮助用户从不同角度理解数据。 OLAP系统主要由以下几个关键组件构成: 1...

    OLAP技术及其在SQL SERVER2000中的实现.pdf

    在SQL Server 2000 中,用户可以利用立方体(Cube)对象和维度对象来实现OLAP功能。通过SQL Server Analysis Services (SSAS),用户可以构建、管理和查询立方体,它包含了多维数据集(Multidimensional Datasets)的...

    SQL Server 2005 BI系列课程(2):基于SQL SERVER 2005 BI平台实现商务智能过程

    10. **案例研究**:通过具体的商务智能应用场景,演示如何使用SQL Server 2005 BI平台解决实际业务问题。 附带的**20071016--SQL Server 2005 BI系列课程(2):基于SQL SERVER 2005 BI平台实现商务智能过程.pdf** ...

    jasperreports mvn的依赖包olap4j-0.9.7.309-JS-3

    下载之后再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

    "olap4j-0.9.7.309-JS-3.jar"是一个专注于在线分析处理(OLAP)的Java库,它在编程社区中具有一定的地位,但并非易得之物。这个特定版本的库在maven中央仓库中难以找到,导致了开发者在寻找和使用时遇到了困扰。 ...

    SQL-SERVER2008R2函数大全

    SQL Server 2008 R2是微软公司发布的一款关系数据库管理系统,它支持数据仓库和在线...此外,文档中的一些函数可能因为OCR扫描错误导致文字识别不准确,建议结合实际的开发环境和SQL Server的官方文档进行验证和使用。

    SQL Server数据库的三种版本及OLAP方法的研究

    SQL Server 数据库是微软公司推出的关系型数据库管理系统,它在企业数据管理和商业智能应用中扮演着重要角色。本文主要探讨了SQL Server的三个主要版本——SQL Server 2000、SQL Server 2005和SQL Server 2008,以及...

    利用SQLServer 进行OLAP实验过程.rar

    在SQLServer中,可以使用Integration Services(SSIS)进行数据抽取、转换和加载(ETL)过程,将源数据清洗并导入到数据仓库中。 接下来,创建多维数据集(Cube)是OLAP的核心步骤。在SQLServer中,Analysis ...

    olap4j-0.9.7.309-JS-3.zip-Java工具类资源下载

    在本例中,olap4j-0.9.7.309-JS-3.pom包含了olap4j的依赖关系和版本信息,以便于使用Maven构建工具将该库集成到其他Java项目中。通过引入这个pom文件,开发人员可以确保他们的项目能够正确地获取和管理olap4j库及其...

Global site tag (gtag.js) - Google Analytics