精华内容
下载资源
问答
  • kylin大数据多维分析

    2018-06-04 01:16:47
    Apache Kylin,中文名麒(shen)麟(shou) 是Hadoop动物园的重要成员。 Apache Kylin是一个开源的分布式分析引擎,最初由eBay开发贡献至开源... 简而言之,Kylin的核心思想是计算在多维分析中可能使用的测量值的期望值
  • 本文档介绍 OLAP、MDX 基本概念和原理、Mondrian 的使用和一些前端工具的使用。其中 “基本概念”和“MDX”这两章基本都是通用的内容,并不仅限于 Mondrian。 本文档主要用做简略的指南,更深入、更详细的内容请参考...
  • 技术调研_数据质量管理&性能量化&多维分析 ,技术调研_数据质量管理&性能量化&多维分析 ,技术调研_数据质量管理&性能量化&多维分析
  • 用于Biber多维分析(MDA)的多语言Python版本 这是用于英语,法语,俄语和西班牙语的Biber标记器的Python版本,以及用于多维分析的R脚本。 早在1988年,道格·贝伯(Doug Biber)开发了一种通过使用一组可提取特征...
  • 数仓ClickHouse多维分析应用实践.pdf
  • 银行信贷业务分析中的多维分析技术,朱超平,周文安,多维分析技术通过从多个方面和多个角度以多维的形式来分析数据,通过对这些数据的多角度分析为高层决策提供信息依据。本文主要论
  • 面向多场景的大数据多维分析系统的设计与实现,周康,孔慧慧,针对现有的大数据多维分析及可视化工具分析场景单一,生命周期不健全的问题,利用Apache Spark、Apache Kylin等分布式处理技术,设计与实
  • 各大厂大数据实现案例
  • Hive中的多维分析函数

    千次阅读 多人点赞 2021-08-16 23:27:00
    标题Hive中的多维分析函数 众所周知,Hive是一个OLAP数据库,拥有着很强大的数据分析能力。 但是当我们一张表的维度信息特别多,并且需要各种维度组合的统计分析结果时就很不方便。比如一张表有5个维度,所有的维度...

    Hive中的多维分析函数

    众所周知,Hive是一个OLAP数据库,拥有着很强大的数据分析能力。
    但是当我们一张表的维度信息特别多,并且需要各种维度组合的统计分析结果时就很不方便。比如一张表有5个维度,所有的维度组合是2的5次方也就是32种,那也就意味着我们需要写32个查询的HQL解决我们的需求。同时不方便的点还存在于我们需要将32个HQL的查询结果写入到32张不同的表中,无形中给我们未来查询我们所需要的信息带来了额外的麻烦。
    本篇文章就是介绍Hive中非常好用的多维分析函数帮助我们解决以上两个痛点问题。

    1.环境说明

    当前环境采用Hadoop3.1.3以及Hive3.1.2版本!

    2.准备数据

    [whalex@hadoop102data]$ vim test.txt
    1001    John    male    sale    beijing 
    1002    Tom     female  sale    shanghai
    1003    Bob     male    sale    beijing
    1004    Alex    male    product shanghai
    

    3.建表并导入数据

    create table test(id string,name string,sex string,dept_name string,addr string) row format delimited fields terminated by '\t';
    load data local inpath '/opt/whalex/data/test.txt' into table test;
    

    4.Grouping Sets计算多种自定义维度组合问题

    此时需要计算如下需求:

    1. 按照性别分组计算每种性别的人数
    2. 按照部门和性别分组计算每个部门每种性别的人数
    3. 按照地区和性别分组计算每个地区每种性别的人数

    我们可以采用如下3条HQL语句计算并插入到不同的3个结果表中

    select sex,count(*) ct from test group by sex;
    select dept_name,sex,count(*) ct from test group by dept_name,sex;
    select addr,sex,count(*) ct from test group by addr,sex;
    

    其实在Hive中提供了Grouping Sets帮助我们解决上述问题,Grouping Sets说明如下图所示:
    在这里插入图片描述

    所以以上3条HQL可以合并为如下一条HQL

    select dept_name,addr,sex,count(*) ct from test group by dept_name,addr,sex grouping sets((sex),(dept_name,sex),(addr,sex)) order by dept_name,addr,sex;
    
    +------------+-----------+---------+-----+
    | dept_name  |   addr    |   sex   | ct  |
    +------------+-----------+---------+-----+
    | NULL       | NULL      | female  | 1   |
    | NULL       | NULL      | male    | 3   |
    | NULL       | beijing   | male    | 2   |
    | NULL       | shanghai  | female  | 1   |
    | NULL       | shanghai  | male    | 1   |
    | product    | NULL      | male    | 1   |
    | sale       | NULL      | female  | 1   |
    | sale       | NULL      | male    | 2   |
    +------------+-----------+---------+-----+
    

    注:HQL中的order by只是为了让输出结果更好看一些,没有其他意义。

    5.With Cube解决计算所有维度组合问题

    此时需要计算地区、部门以及性别三个维度所有组合的聚合数据
    我们当然还可以使用Grouping Sets来解决问题,HQL如下

    select dept_name,addr,sex,count(*) ct from test group by dept_name,addr,sex grouping sets((addr,dept_name,sex),(addr,dept_name),(addr,sex),(dept_name,sex),(addr),(dept_name),(sex),()) order by dept_name,addr,sex;
    
    +------------+-----------+---------+-----+
    | dept_name  |   addr    |   sex   | ct  |
    +------------+-----------+---------+-----+
    | NULL       | NULL      | NULL    | 4   |
    | NULL       | NULL      | female  | 1   |
    | NULL       | NULL      | male    | 3   |
    | NULL       | beijing   | NULL    | 2   |
    | NULL       | beijing   | male    | 2   |
    | NULL       | shanghai  | NULL    | 2   |
    | NULL       | shanghai  | female  | 1   |
    | NULL       | shanghai  | male    | 1   |
    | product    | NULL      | NULL    | 1   |
    | product    | NULL      | male    | 1   |
    | product    | shanghai  | NULL    | 1   |
    | product    | shanghai  | male    | 1   |
    | sale       | NULL      | NULL    | 3   |
    | sale       | NULL      | female  | 1   |
    | sale       | NULL      | male    | 2   |
    | sale       | beijing   | NULL    | 2   |
    | sale       | beijing   | male    | 2   |
    | sale       | shanghai  | NULL    | 1   |
    | sale       | shanghai  | female  | 1   |
    +------------+-----------+---------+-----+
    

    此时我们也可以使用With Cube来解决问题

    GROUP BY a, b, c WITH CUBE is equivalent to
    GROUP BY a, b, c GROUPING SETS ( (a, b, c), (a, b), (b, c), (a, c), (a), (b), (c), ( )).
    

    所以HQL可以改为:

    select dept_name,addr,sex,count(*) ct from test group by dept_name,addr,sex with cube order by dept_name,addr,sex;
    
    +------------+-----------+---------+-----+
    | dept_name  |   addr    |   sex   | ct  |
    +------------+-----------+---------+-----+
    | NULL       | NULL      | NULL    | 4   |
    | NULL       | NULL      | female  | 1   |
    | NULL       | NULL      | male    | 3   |
    | NULL       | beijing   | NULL    | 2   |
    | NULL       | beijing   | male    | 2   |
    | NULL       | shanghai  | NULL    | 2   |
    | NULL       | shanghai  | female  | 1   |
    | NULL       | shanghai  | male    | 1   |
    | product    | NULL      | NULL    | 1   |
    | product    | NULL      | male    | 1   |
    | product    | shanghai  | NULL    | 1   |
    | product    | shanghai  | male    | 1   |
    | sale       | NULL      | NULL    | 3   |
    | sale       | NULL      | female  | 1   |
    | sale       | NULL      | male    | 2   |
    | sale       | beijing   | NULL    | 2   |
    | sale       | beijing   | male    | 2   |
    | sale       | shanghai  | NULL    | 1   |
    | sale       | shanghai  | female  | 1   |
    +------------+-----------+---------+-----+
    

    6.With Rollup解决计算层级维度组合问题

    数据:

    1       2020    12      31      56
    2       2020    12      31      89
    3       2021    01      01      78
    4       2021    01      01      67
    5       2021    01      02      56
    

    建表:

    create table test1(order_id int,year string,month string,day string,order_amount int) row format delimited fields terminated by '\t';
    

    现在需要按照时间统计销售总额,注意按照时间聚合数据的时候,单独的月份、单独的天、月份和天以及年和天的维度聚合出来的指标是没有意义的,也就是说按照时间维度聚合指标时只有“年月日”、“年月”、“年”以及不添加维度信息计算总和时才是有意义的。
    这种像年月日维度的可以称为层级维度,同样可以使用Grouping Sets来解决该需求,HQL如下:

    select year,month,day,sum(order_amount) from test1 group by year,month,day grouping sets((year,month,day),(year,month),(year),()) order by year,month,day;
    
    +-------+--------+-------+------+
    | year  | month  |  day  | _c3  |
    +-------+--------+-------+------+
    | NULL  | NULL   | NULL  | 346  |
    | 2020  | NULL   | NULL  | 145  |
    | 2020  | 12     | NULL  | 145  |
    | 2020  | 12     | 31    | 145  |
    | 2021  | NULL   | NULL  | 201  |
    | 2021  | 01     | NULL  | 201  |
    | 2021  | 01     | 01    | 145  |
    | 2021  | 01     | 02    | 56   |
    +-------+--------+-------+------+
    

    此时我们还可以使用With Rollup来解决该需求

    GROUP BY a, b, c, WITH ROLLUP is equivalent to GROUP BY a, b, c GROUPING SETS ( (a, b, c), (a, b), (a), ( )).
    

    所以HQL可以改为:

    select year,month,day,sum(order_amount) from test1 group by year,month,day with rollup order by year,month,day;
    
    +-------+--------+-------+------+
    | year  | month  |  day  | _c3  |
    +-------+--------+-------+------+
    | NULL  | NULL   | NULL  | 346  |
    | 2020  | NULL   | NULL  | 145  |
    | 2020  | 12     | NULL  | 145  |
    | 2020  | 12     | 31    | 145  |
    | 2021  | NULL   | NULL  | 201  |
    | 2021  | 01     | NULL  | 201  |
    | 2021  | 01     | 01    | 145  |
    | 2021  | 01     | 02    | 56   |
    +-------+--------+-------+------+
    

    7.总结

    Hive中提供了grouping setswith cube以及with rollup来解决多维分析的问题,当维度特别多时,我们根据具体情况可以使用对应的函数来解决问题。
    我们可以将结果输出到一张表中方便后续查询,比如我们是a,b,c三个维度使用with cube计算的结果集,当我们只需要group by a的结果时,我们可以使用select a,ct from result_table where a is not null and b is null and c is null;这样的HQL获取需要的结果,避免了我们在开头提到了多条HQL需要使用多张表来保存数据给最后查询带来麻烦的问题。

    展开全文
  • 多维分析报表结合商业智能的核心技术——OLAP,可以帮助用户进行多角度、灵活动态的分析。多维分析报表由“维”(影响因素)和 “指标”(衡量因素)组成,能够真正为用户所理解、并真实的反映企业特性信息。 一个...

    多维分析报表结合商业智能的核心技术——OLAP,可以帮助用户进行多角度、灵活动态的分析。多维分析报表由“维”(影响因素)和 “指标”(衡量因素)组成,能够真正为用户所理解、并真实的反映企业特性信息。
    一个合格的多维分析工具具有完整的OLAP分析功能,像Smartbi,不仅具有同类产品中典型的数据多维交叉展现分析、钻取分析、维度旋转、数据切片、数据过滤、统计图展示功能,而且还具有非常特色的层级设置、Flash打印等特性。此外,其界面友好易用,用户进行数据分析的操作过程简单方便、体验良好。
    假如说要做一个每个月打开报表时展现的是当前月或上月的数据的报表的话,那就需要做动态多维分析报表。多维分析默认时间参数是随时间而变化的,无需每次都去编辑多维分析。
    以Smartbi制作的报表为例,教大家如何实现动态多维分析。
    动态多维分析的实现方法
    通过用户属性实现
    1、在业务库里增加一张表Time_New(Time_id, Time_Name,Time_type),用来记录各类时间类型的最新数据。其中字段Time_id记录当前业务库中最新多维时间的ID;Time_Name记录当前业务库最新多维时间的名称;Time_type是时间类型的标志,如时间维的层次机构是年>季度>月,我们可以使用标志:Y(代表年)、Q(代表季度)、M(代表月)。表数据示例如下:

    在这里插入图片描述

    2、通过ETL操作,更新Time_New表的数据,使当前数据是用户能看到的最新时间。
    3、添加业务库作为关系数据源。
    4、在用户属性下新建一个用户属性。此用户属性是为了取业务库中最新的月份时间,其数据源选择步骤1中创建的关系数据源,类型选择“字符串”,命名为"最新月份",表达式设置如下:Select Time_ID as A from Time_New where Time_type=‘M’;

    在这里插入图片描述

    5、新建一个多维参数。新建多维分析参数,命名为"时间"。参数类型选择“成员”;控件类型选择“下拉树”;成员所在层次选择“时间”;备选值选择“成员树选择”方式;默认值选择“MDX语句”,MDX语句为:select {最新月份} on Columns from [Sales] ,其中最新月份是把左侧用户属性节点下的"最新月份"拖入;其它设置默认即可。具体设置如下图:

    在这里插入图片描述
    在这里插入图片描述

    6、新建多维分析。选择Cube 【Sales】构建多维分析。其中行区选择“商店”维的华南、华北和华东成员,列上选择度量维的销售量、销售成本和销售额成员。
    7、新建局部自定义成员。在左侧资源树的 自定义成员 > 局部 下新建一个局部自定义成员。从左侧资源树参数节点下拖拽时间参数到MDX表达式中。具体设置如下:

    8、将以上定制的自定义成员添加到行区中,刷新报表,最后得到的效果如下图。当更新业务库的最新时间后,打开此多维分析,"时间"参数的值也会跟着变化,因此默认看到的是多维分析的最新时间数据,我们也可以通过切换参数值来查看其他时间的数据。

    在这里插入图片描述
    在这里插入图片描述

    图:多维分析操作示例
    从上面Smartbi制作动态多维分析的月总结,我们可以发现,其实每一项数据都是通过公式运算得出的,它们的不同之处在于各自使用的公式和取值字段是不一样的,而它们的相同之处在于得到数据的步骤很简单,我们不需要了解计算过程是如何复杂,只需要掌握计算公式如何使用以及各个参数代表什么,继而点击“确定”保存就可以进行跨行组计算啦~
    Smartbi多维分析的功能亮点

    1. 支持对已生成的表格数据再分析,例如切块参数、钻取、分类汇总、行列互换等。
    2. 支持添加各种计算,例如占比、排名、同期值、环比、增长率等多种分析。
    3. 支持图形分析,内置了柱图、线图、饼图、面积图、雷达图等多种Echarts图形。
    4. 支持设置告警,可实现对关键信息的实时监控,帮助用户及时发现问题并采取相应措施。
    5. 支持多种输出方式,生成的分析结果可以WORD、EXCEL、TXT、HTML等多种方式导出。
    6. 支持创建自定义成员以及自定义命名集,用户可基于已有成员,通过算术运算符、数字和MDX函数进行重新组合生成新的维度成员或者新的维度成员集合。
    展开全文
  • 大数据多维分析平台的实践 一、 大数据多维分析平台搭建的初心 随着公司业务量的增长,基于传统关系型数据库搭建的各种报表查询分析系统,性能下降明显。同时由于大数据平台的的日趋完善,实时的核心业务数据逐步...

    大数据多维分析平台的实践

    一、  大数据多维分析平台搭建的初心

    随着公司业务量的增长,基于传统关系型数据库搭建的各种报表查询分析系统,性能下降明显。同时由于大数据平台的的日趋完善,实时的核心业务数据逐步进入大数据平台。数据进入了大数据平台,相伴而来的是各种业务需求,这里主要聚焦在如何高效稳定的基于大数据平台的数据进行查询。通过分析,我们面临的挑战如下:

    • 亿级别表下任意维度和时间跨度的高效的统计查询
    • 业务分析的维度越来越多,是否可以提供一个灵活的多维度组合查询的工具,而不是针对不同的维度组合开发不同的报表

          基于以上目标,开始搭建大数据的多维分析平台。

    二、  多维分析平台技术选型

      搭建多维分析平台,首先面临的是技术选型,基于我们对开源框架的使用经验和实际情况,我们主要看业界主流的公司是如何使用应对的,在技术选型上会进行一定的比较,但不会投入比较大的资源进行验证,主张快速的迭代,效果的评估。多维分析平台技术选型主要面临是OLAP引擎和前端UI的选型。

      我们先来看一下OLAP的基本概念和分类。

    OLAP 翻译成中文叫联机分析处理,OLTP 叫联机事务处理。OLTP 它的核心是事务,实际上就是我们常见的数据库。我们业务数据库就是面向于事务。它的并发量会比较高,但是操作的数据量会比较小。它是实时更新的。数据库的设计会按照 3NF 范式,更高的话可能会按照 BC 范式之类的来做。而 OLAP 的核心是分析,面向应用是分析决策,需要分析的数据级会非常大,可能 TB,甚至 PB 都会有。它的数据更新会稍微慢一些,它的设计一般是反范式的,因为面向分析。常见的是雪花模型和星型模型。

     OLAP的引擎目前主要分为3类

    第一种叫 ROLAP,叫关系型 OLAP,它的特点就是它是基于关系性模型,计算的时候,根据原始数据去做聚合运算。常见的实现,小数据量可以利用 MySQL、SqlServer 这种传统数据库,而大数据量可以利用 Spark SQL、Tidb、ES 这些项目。

    第二种类型叫 MOLAP,叫多维 OLAP,它的特点就是它会基于一个预定义的模型,我需要知道,要根据什么维度,要去算哪些指标,我提前就把这些结果弄好,存储在引擎上。细节数据和聚合后的数据保存在cube中,以空间换时间,查询效率高。

    实际上我们的很多业务也是基于此思想去做的,比如我们会在ES里面按照电站、客户等维度进行聚合,满足日常的T+1查询需求,只不过这个地方每个聚合维度需要在ES里面做一个表,并增加上复杂的ETL处理.符合这个理念在业界用的比较多的为Kylin. 并且基于Kylin 有完整的一套开源产品KMS。涵盖了多维分析的前端UI及多维分析数据库。

    第三种叫 HOLAP(Hybrid OLAP),叫混合 OLAP,特点是数据保留在关系型数据库的事实表中,但是聚合后的数据保存在cube中,聚合时需要比ROLAP高,但低于MOLAP。

    综合分析,技术选型上主要考虑第ROLAP和MOLAP。关于OLAP的分类已经经过了很多年的发展,市场上相关的产品也有很多,但是大数据下基于开源组件应该如何搞?

    在大数据时代,有了分布式计算和分布式存储,对于亿级别表的任意时间跨度多维度组合的查询,是不是可以直接查询,不用再预聚合。按照这个思路,查找了一些方案,没有很明显的技术倾向,我们想尝试了在Spark sql、tidb、es 上直接基于原始数据进行计算,效果不是很理想,这个按照理论,如果查询要想达到比较好的结果,可能集群规模需要加大不少。同时我们对别了大数据的MOLAP的产品,发现了KMS框架,最大的特点是同时提供了前端展现、以及数据库.并且目前业界主流互联网公司也都在用.经过对比权衡,决定先期基于KMS框架搭建多维分析平台.

    三、  KMS框架介绍

    • 整体介绍

    KMS = Kylin + Mondrian + Saiku 是一个简单的三层架构,Git上已经有一个整合Kylin,Mondrian以及Saiku的项目。

    Kylin: kylin是apache软件基金会的顶级项目,一个开源的分布式多维分析工具。通过预计算所有合理的维度组合下各个指标的值并把计算结果存储到HBASE中的方式,大大提高分布式多维分析的查询效率。Kylin接收sql查询语句作为输入,以查询结果作为输出。通过预计算的方式,将在hive中可能需要几分钟的查询响应时间下降到毫秒级

    Mondrian:Mondrian是一个OLAP分析的引擎,主要工作是根据事先配置好的schema,将输入的多维分析语句MDX(Multidimensional Expressions )翻译成目标数据库/数据引擎的执行语言(比如SQL)

    Saiku: Saiku提供了一个多维分析的用户操作界面,可以通过简单拖拉拽的方式迅速生成报表。Saiku的主要工作是根据事先配置好的schema,将用户的操作转化成MDX语句提供给Mondrian引擎执行

                  其中Mondrian和Saiku已经是非常成熟的框架,这里我们简单看下Kylin的架构.

    • Kylin

    Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。

     

     

    Apache kylin 能提供低延迟(sub-second latency)的秘诀就是预计算,即针对一个星型拓扑结构的数据立方体,预计算多个维度组合的度量,然后将结果保存在 hbase 中,对外暴露 JDBC、ODBC、Rest API 的查询接口,即可实现实时查询。主要的使用包含3个步骤

    l   通过Kylin提供的UI界面定义多维分析模型和Cube

    l   对定义好的cube进行预计算,并将计算的结果存储到hbase中

    l   查询时通过kylin引擎将查询的sql引擎翻译成hbase的scan等进行数据的查询

     更多关于kylin的案例、原理、调优 大家可以参考kylin的官方网站和社区,并可以通过社区邮件进行问题交流.

    四、  多维分析平台的架构及应用情况

    • 业务规划

    多维分析报表的创建,除了工具本身之外,对系统数据的处理和设计也是非常之重要,基于目前的使用,主要考虑以下几个问题

    ²  多维报表的创建规划过程需要有一套数据分层划分模型,形成方法论、体系,以便指导业务人员进行报表的定义

    ²  新的业务需求提出时,是基于现有报表增加维度还是增加一个新的报表

    ²  多个报表由于业务需求,有重复的维度,重复的维度如何保证数据的一致性

    基于以上我们将数据和维度进行了层次划分,业务处理过程采用逐层汇总的方式,进行数据汇总,最后通过saiku进行查询展现.数据分层结构如下:

    日志数据:主要包含充电过程中的分钟报文数据、智能运维的分钟报文数据,数据主要存在HBase、ES、TIDB

    明细数据:主要包含各种不同的业务订单数据。数据主要存储在sqlserver、ES。

    聚合数据:聚合数据为按照不同的业务维度进行聚合的数据.比如 :按照电站、结算账户等归集的充电数据。数据主要存储在ES、Kylin.

    公共维度:主要为系统共用的基础数据,比如电站、集控、终端数据。数据公用。

    • 部署架构

       

    基于kylin 的设计架构,我们充分利用现有的hbase集群和计算集群,搭建了基于KMS的多维分析平台,这里重点介绍一下我们的架构部署情况.先看一下部署架构.

     

    目前进入kylin的数据主要来自于sqlserver和kafka,通过kettle、flume等工具将数据抽取到离线计算集群hive数据库。

    数据抽取到hive数据库之后,通过统一的调度工具调用Kylin的cube的build API,按照业务需求对之前定义好的cube进行预计算,计算好的结果存储到hbase集群

    考虑到kylinbuild时占用资源较多,集群部署时,将kylin的build节点和查询节点进行了分离。目前build节点为一台,查询节点为2台。Hbase集群目前和线上的业务公用.

    前端展示saiku是个成熟的多维分析展现工具,对接的数据源有很多种,社区开源版本主要提供了kylin、mysql的支持。在适应性上可以直接和kylin和tidb进行联通使用。由于kylin 查询节点部署了2台,为了充分使用saiku的缓存,在saiku端开发了基于用户的负载均衡。同时考虑到我们目前使用的集群,通过自定义开发实现了与ES集群的连通性.

    • 应用情况

    目前通过kylin定义的cube有20几个,最大的cube存储已经超过2T.基于saiku定义的报表目前主要用于公司的运营、运维、充电安全相关的查询。其中最大的查询维度已经接近100个.系统应用截图如下

     

     

    • 解决的问题

    ²  为了保证saiku的HA同时充分利用saiku的缓存,开发了基于用户的负载均衡框架

    ²  为了方便通过手机进行多维分析报表的简单修改,对saiku框架进行了修改,适配了手机

    ²  对saiku的元数据增加了缓存,提高了查询速度

    ²  修改了saiku对大小写的配置,适配kylin数据库

    ²  参考kylin官方的案例和性能调优针对构建和查询过程进行优化

    五、  总结及问题

    • 目前存在的问题

    ²  多维分析集群查询对hbase的查询内存消耗较大,查询内存会引起gc,从而影响hbase的其他读写服务

    ²  数据结构发生变化,历史数据需要重新刷,运维成本比较高

    ²  历史数据发生变化,需要经常进行历史数据的刷新

    ²  非聚合组的维度进行查询,部分查询较慢

    ²  Saiku前端的灵活性和数据库能力的矛盾

    • 下一步的方向

    ²  提升运维效率,在某些表上进行es的应用,提升报表的实时性,建立起不同等级的数据表不同的数据库的区分原则

    ²  针对数据的日常刷新,开发简单的运维工具

     

    参考:https://www.cnblogs.com/pbc1984/p/11074499.html

    展开全文
  • 8月13日的【创客168】第7期:大数据平台架构及应用实践和9月22日的第三届互联网应用技术峰会上进行了“大数据多维分析引擎在魅族的实践”的分享。ApacheKylin近日获得授权分享这则案例,希望对您有所帮助。在此感谢...
  • 为了解决传统全链路数据多维分析技术,存在数据存储效率低的问题,提出基于大数据交互的全链路数据多维分析技术。该技术针对数据的分级储存、降维处理、效率等问题进行研究,引入基于大数据交互方法对全链路数据进行...
  • 没错,就是想针对程序数据集上的多维分析唠几毛钱的!所谓程序数据集,是指数据源不是来自文件和SQL,而是由程序现计算出来的。这种情况在许多BI系统中都会出现,BI系统自己管理数据模型,把数据库挡在后面,不会...

    看到文章标题,顾名思义应该也晓得本篇文章的重点内容是要说啥了吧?

     

    没错,就是想针对程序数据集上的多维分析唠几毛钱的!所谓程序数据集,是指数据源不是来自文件和SQL,而是由程序现计算出来的。这种情况在许多BI系统中都会出现,BI系统自己管理数据模型,把数据库挡在后面,不会直接开放SQL,更不会提供文件让你直接访问,访问数据都要通过程序接口(比如JavaAPI或Webservice)——这样一来,想要对这些程序接口返回的结果集做多维分析看似就有些困难了。

    小编我本着先客户之忧而忧的服务宗旨,思前想后还是觉得之前的《把 Excel 透视表搬到 WEB 上》和《给一句 SQL 就能做多维分析》对多维分析的介绍不太够,所以今天特地再来唠唠如何对程序数据集做多维分析。

     

    访问 JavaAPI

    API是应用程序编程接口,程序开放API就是开放接口,开放后接口返回的程序数据就可以被其他程序调用了。

    问题来了,在俺们多维分析中怎样才能对API接口返回的程序数据做分析呢?

    简单,其实是分分钟搞定的事儿!

    步骤一:

    最最重要的前提,要麻烦程序猿自定义类,把要返回的结果集封装在一个静态方法中

    本例小编自己写了个api,为方法传入txt文件路径,然后将txt内容以文本字符串返回。

    test.txt文件内容:

    undefined

    自定义类TxtTest

    package api;
    import java.io.*; 
    
    public class TxtTest {	
                    //为方便对本方法的调用,此处需为静态方法 
                    //通过对方法传入txt文件路径和是否有标题(true/false)两个参数,将txt内容以文本字符串返回	
    		public static String readTxttoString(String pathName,boolean hasTitle)
    	{
    		final BufferedReader bfr;
    		final String encoding = "gbk";
    		final File file = new File(pathName);
    		String lineTxt=null;
    		StringBuffer buf = new StringBuffer();
    		InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding);
    		bfr = new BufferedReader(read);
    		while((lineTxt=bfr.readLine())!=null){
    			buf.append(lineTxt+"\n");
    				}		
    		return buf.toString();		
    	}
    }
    
    
    

    package api; import java.io.*; public class TxtTest { //为方便对本方法的调用,此处需为静态方法 //通过对方法传入txt文件路径和是否有标题(true/false)两个参数,将txt内容以文本字符串返回 public static String readTxttoString(String pathName,boolean hasTitle) { final BufferedReader bfr; final String encoding = "gbk"; final File file = new File(pathName); String lineTxt=null; StringBuffer buf = new StringBuffer(); InputStreamReader read = new InputStreamReader(new FileInputStream(file), encoding); bfr = new BufferedReader(read); while((lineTxt=bfr.readLine())!=null){ buf.append(lineTxt+"\n"); } return buf.toString(); } }

    步骤二:

    将TxtTest.class文件放入WEB应用能加装到的类路径下,本例以安装包自带的demo应用为例,因此该文件可放入[安装根目录]\report\web\webapps\demo\WEB-INF\classes\api下。

     

    步骤三:

    在集算器设计器中新建 txtTest.dfx,添加参数和网格内容:

    undefined

     

    A

    1

    =invoke(api.TxtTest.readTxttoString,pathName,hasTitle)

    2

    =A1.import@tq()

    3

    return A1

     

    使用invoke函数,调用步骤一中自定义JAVA类中的静态方法,并为方法传入参数。 保存后将dfx文件放至[安装根目录]\report\web\webapps\demo\WEB-INF\files\dfx目录下。至于为啥要把文件放到这儿,先卖个关子,后面再解释。

    集算器用的invoke函数主要是用来调用用户自定义函数的,不仅能像上面例子这样返回字符串,还可以返回其他多种类型,不过必须使用可与集算器匹配的数据类型,否则有可能在展现或调用时出现错误。集算器中常用数据类型对应的Java类型如下:

    整数

    java.lang.Integer

    长整数

    java.lang.Long

    浮点数

    java.lang.Double

    长实数

    java.math.BigInteger

    实数

    java.lang.Number

    布尔型

    java.lang.Boolean

    字符串

    java.lang.String

    日期

    java.sql.Date

    时间

    java.sql.Time

    日期时间

    java.sql.TimeStamp

    二进制数据

    byte[]

     

    步骤四:

    多维分析中添加 dfx 文件数据集

    undefined

    数据集窗口大家一定都不陌生,多维分析与外部API之间的通道就是通过它指定DFX文件完成的。

    选择dfx文件时是不是发现步骤三中创建的dfx被列出来了,前因后果这下明白了吧,猜对了,这个列表默认就是把[安装根目录]\report\web\webapps\demo\WEB-INF\files\dfx这个目录下的所有dfx列出。想要修改这个目录路径也是ok的,在 "[demo 应用根目录]/raqsoft/guide/jsp/olap.jsp" 中添加 JS API 进行指定,如下图所示:

    undefined

    选择dfx文件,传递参数值,点击查询数据,缓存入文件保存,数据集就创建完成了!

     

    接下来马上又到了每日开心一刻了,任性拖拽无人阻拦,哈哈!

    点击【添加报表】,选择数据集,填写报表名称【确定】

    undefined

      

    添加报表后,数据集返回的表结构指标就这样赤裸裸的出来了,接下来就可以拖拖拽拽查看指标内容了。咋样,有没有发现其实这种调用JavaAPI的程序数据集也挺好使,只要先把自定义类做好就相当于完成一大半了,集算器dfx只是起到了个中间调用的作用。

    undefined

    API返回的程序数据不仅可以是txt文本串,还可以是json串。关于json串在多维分析的调用我们也有攻略帮您解决,其实很简单,API里的内容由您自己做主,只要最终返回的是json串就行,这里主要就是变通一下步骤三dfx文件中对json串的处理。

    dfx内容作如下修改:

     

    A

    1

    =invoke(api.TxtTest.readTxttoString,pathName,hasTitle)

    2

    =json(A1)

    3

    return A2

     

    访问多维分析页面,添加dfx文件类型的数据集。

     

    聪明的你,看到这里应该什么都明白了吧?其实换汤不换药,重点都在dfx文件上,只是API返回的类型不同,在dfx中处理方法不同罢了。

     

    访问 Webservice

    提起Webservice一定都不陌生,一款跨编程语言和跨操作系统平台的远程调用技术。关于Webservice的使用原理小编就不班门弄斧在高手面前显摆了,相信作为资深程序猿的您早已对它了如指掌了吧,哈哈

    那在我们多维分析里是否能调用这种远程接口呢?答案必须是肯定的,当然能!

    我们已经做了全方位考量,不仅能调用JavaApi还能调用Webservice接口,方法和JavaApi的调用大致类同,具体是哪里相同哪里类同请看下例分晓。

    下面以手机号码归属地查询作为示例,介绍对WebService的调用(本例使用的WebService服务是国内官方的手机号码归属地查询所在的服务):

    步骤一:

    在集算器设计器中新建 webTest.dfx,添加网格内容

     

     

    A

    B

    C

    1

    =[18810690043,15207579527,13018617766, 13713309396,15810200987,13168889653, 13501321234,13003110868,13310006279, 13003113520,18718391001,13168889659]

    //手机号

     

    2

    =ws_client("http://ws.webxml.com.cn/WebServices/ MobileCodeWS.asmx?WSDL")

    //访问国内手机号码归属地查询WEB服务

     

    3

    =create(手机号,省份,城市,卡类型)

    //创建序表

     

    4

    for A1

    //使用for循环,逐个查询手机号的归属地等信息

     

    5

     

    =ws_call(A2,"MobileCodeWS":"MobileCodeWSSoap": "getMobileCodeInfo",A4:"mobileCode")

    //传入手机号,从服务器查询手机号归属地

    6

     

    =B5.split@1(":")(2).split(" ").insert(1,A4)

     

    7

     

    =A3.record@i(B6,0)

    //将查询结果作为记录插入A3序表中

    8

    return A3

      

     

    保存后将 dfx 文件放至[安装根目录]\report\web\webapps\demo\WEB-INF\files\dfx目录下。

    步骤二:

    多维分析中添加 dfx 文件数据集

    选择dfx文件,传递参数值,点击查询数据,缓存入文件保存,数据集就创建完成了!

    undefined

    dfx下拉列表里的文件是从哪里读取的,还用小编再提一下吗?嘻嘻,巩固下记忆吧,这个列表默认就是把[安装根目录]\report\web\webapps\demo\WEB-INF\files\dfx这个目录下的所有dfx列出。不过这个路径也是可以修改的,修改方法和JavaApi里使用时的修改方法一样。

    数据集创建完成后,接下来就是拖拽指标进行分析了

    点击【添加报表】,选择数据集,填写报表名称【确定】

    undefined

    undefined

    undefined

    将指标拖拽到右侧数据显示区,这样一来,从WebService服务器获取的手机归属地的信息就展现在我们眼前了,是不是很方便呢?

    undefined

    利用 Tag 标签添加 dfx 数据集

    上面两种程序数据集在多维分析使用时都是通过界面数据集菜单配置的dfx数据集,其实还可以通过Tag标签添加。

    在Tag标签的使用与之前讲的SQL数据集大同小异,只是属性略有不同。

    Tag标签添加dfx数据集:

    <raqsoft:analysev2
    	dfxFile="WEB-INF/files/dfx/txtTest.dfx" //指定相对于web根目录的dfx文件
    	dfxParams="pathName='D:/2.json';"	//dfx所需的参数
    
    ></raqsoft:analysev2>
    

    <raqsoft:analysev2 dfxFile="WEB-INF/files/dfx/txtTest.dfx" //指定相对于web根目录的dfx文件 dfxParams="pathName='D:/2.json';" //dfx所需的参数 … … />

    在Tag标签中添加dfx数据集,访问多维分析页面时会将该数据集默认作为初始数据集,并直接将结果集以明细的形式展现在页面中。

    undefined

     

    叮叮叮,关于JavaApi和Webservice程序接口的访问到此就介绍完了,通过对本篇文章的学习,一定更能领会我们多维分析的妙处了吧。使用dfx数据集访问程序数据集是直接借用集算器函数轻松引入程序数据集结果,当然,除此之外还能利用集算器的计算能力,对程序数据集的结果做二次处理,最终在界面上做拖拽分组、聚合、过滤等等数据分析动作。

    但是,我要说但是,这里都用到了集算器的脚本,而自写脚本的功能是不包含在基本润乾报表中的,也就是说需要花钱滴。嗯,听起来有点悲伤,不过,认真关注乾学院,后面我们会主动提供办法让你绕过这个检查,还是不花钱,一定要关注,不可错过哟!

    其实两种程序接口类型在多维分析的使用中是有一定的共同点的,下图就能直观的让我们看到区别: 

    undefined

    JavaAPI和WebService两种程序数据集上的多维分析都是使用的dfx数据集,不同点是dfx文件中使用的函数不同,这是关键点!JavaApi时是先将程序接口进行封装,然后在集算器中使用invoke函数调用自定义类。WebService时则是直接使用函数远程访问官方手机号码归属地查询所在的服务器获取手机号归属地数据。

    其实,如果想实现高性能还可以直接用二进制格式,但就需要学习集算器的数据类型及相关API了。此处就不过多介绍了。还是那句话,更多关于集算器的学习可参考帮助文档《函数参考》、《教程》。

    好了,本篇文章虽然讲完了,但它却已成为我们之间交友学习的开端,还在犹豫什么,快来加入乾学院吧,带你了解更腻害的多维分析。



    作者:sln
    链接:http://c.raqsoft.com.cn/article/1539249655403?r=xiaohuihui
    来源:乾学院
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • 睿思OLAP-开源多维分析系统 支持对关系型数据库进行OLAP查询,无需编写任何其他代码,用户只需需要通过语义层的定义就可以轻松构建自己的多维数据模型并进行数据多维查询和可视化。 产品优势: 简单易用:系统十分...
  • OLAP(On-Line Analytical Processing)联机分析处理,1993 年由关系型数据库之父埃德加·科德(Edgar Frank Codd)提出,其中主要为多维分析多维分析常见操作 下钻 从高层次想低层次明细数据穿透。例如“省”...
  • 多维分析作用: 可以让分析人员快速的从对个角度感知数据情况。大数据下,可以全局的了解数据。 在决策时,通过维度组合及条件过滤,很容易抽丝剥茧,验证各自的想法。
  • 对外贸数据进行多维分析 PAGE 2 [文档标题 对外贸数据进行多维分析 本次课程介绍对外贸数据进行多维分析 一对外贸数据进行多维分析 多维分析在报表分析的基础上从业务场景从多个维度进行深入的探索式的分析一个多维...
  • 这些词我们在建设分析型应用时...而狭义上的 BI 则主要多维分析,在实际工作中,狭义 BI 也更流行一些。 著名的啤酒和尿布的故事曾一度在 BI 领域广泛传唱,据说沃尔玛通过数据分析发现了在某一时间段啤酒和尿片的销
  • olap 多维分析In the previous article of OLAP, we have seen various applications of OLAP, Various types of OLAP, advantages, and disadvantages of OLAP. In this article, we will learn about the, 在OLAP...
  • ​多维数据分析是一种非常先进的数据分析理念,但往往被人们想的很复杂,特别容易被联想至四维或更高维度空间的样子。实际上这完全没有必要,多维...首先,创建多维分析分为两种模式: 新建多维分析 和 新建多维探索 。
  • Doris 一种实时多维分析的解决方案

    千次阅读 2020-03-10 21:01:48
    物化视图(rollup) ROLLUP 在多维分析中是“上卷”的意思,即将数据按某种指定的粒度进行进一步聚合。 在 Doris 中,我们将用户通过建表语句创建出来的表成为 Base 表(Base Table)。Base 表中保存着按用户建表...
  • 点击上方 "zhisheng"关注,星标或置顶一起成长Flink 从入门到精通系列文章公众号内回复ClickHouse关键字可以获取该 PPT 基于 Apac...
  • cognos多维分析

    2014-08-15 13:28:49
    cognos多维分析使用说明,ibm cognos
  • 然而有了多维动态数据分析分析图表不再只有一个分析视角,也不再仅仅服务于具体某个人,而是服务于所有浏览者。所有打开这张图表的浏览者,都能够从自身分析视角出发去做更具个性化、更符合自身分析需求的自助式...
  • 多维分析中,对32种语言特征进行了标记,计数和归一化。 然后,将这些特征的归一化频率用于因素分析,确定了六个因素:(1)个人参与叙述,(2)信息产生,(3)互动说服力,(4)抽象/非人格风格,(5)评价立场...
  • 大数据多维分析平台实践方案 大数据多维分析平台实践方案 一大数据多维分析平台搭建的初心 随着公司业务量的增长基于传统关系型数据库搭建的各种报表查询分析系统性能下降明显同时由于大数据平台的的日趋完善实时的...
  • OLAP的多维分析操作

    千次阅读 2019-09-13 23:33:44
    OLAP的多维分析操作包括:钻取(Drill-down)、上卷(Roll-up)、切片(Slice)、切块(Dice)以及旋转(Pivot) 以下面的数据立方体为例来逐一解释:  钻取(Drill-down):从汇总数据拆分到更细节的数据 在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 75,791
精华内容 30,316
关键字:

多维分析