0

高颜值大数据分析:Palo + Qlik

大数据分析往往给人的印象往往是一个睡眠不足的数据科学家和一大堆服务器,其实,云端的大数据分析是可以很简洁且高颜值。

Qlik是Gartner的BI魔力象限上领先的产品之一,因为基于列的内存数据压缩技术而闻名世界——由于从异构数据源装载的数据在内存中以压缩形式保存,所以关联数据集并进行分析将快如闪电。

这个特性对于MySQL这样的事务型数据库是非常合适的,但是对于Palo这样的针对大数据的分析型数据仓库并不合适。一方面,Palo的分布式查询要比单机技术更有效,另一方面Palo能储存PB级别的数据装载到单机内存中是毫无可能的。

针对Palo这样的大数据分析服务,Qlik提供了Direct Discovery特性,可以让用户把数据量较小且变化缓慢的维度数据放入内存,而数据量较大的实事数据留在Palo里面,而用户的拖拽体验与传统BI毫无二致,使得商务用户无需编程也能很轻松地玩转大数据,相当的体面。

在这篇文章里我们将介绍如何使用Qlik Sense连接Palo进行大数据分析。哦,差点忘了,Qlik Sense是免费产品 ^_^

创建ODBC连接

Qlik支持任意提供ODBC或者OLE DB驱动的数据源。

由于Palo完全兼容MySQL,可以通过Windows系统的ODBC数据源使用MySQL ODBC Unicode Driver创建对Palo实例的连接,用户级或者系统级的DSN都可以:

palo-qlik-sense-01

加载数据模型

Qilk等世界领先的BI工具都支持基于列的内存数据压缩技术——由于从异构数据源装载的数据在内存中以压缩形式保存,关联数据集并进行分析将快如闪电。

这个特性对于MySQL这样的OLTP数据源是非常合适的,非但不会影响MySQL日常业务的吞吐,而且还能加快查询速度。比如下图是Qlik从两个数据集导入数据、关联F3列、并创建基于列的内存数据压缩格式:

palo-qlik-sense-03

但是基于列的内存数据压缩技术对于Palo这样的OLAP数据源并不合适。一方面,Palo的大规模分布式查询要比单机技术高效得多,另一方面Palo能储存PB级别的数据装载到内存中并不现实。为了解决这个问题,Qlik提供了Direct Discovery特性,帮助用户把相对固定的维度数据(F1、F3)放入内存,而大量的度量数据(F2)仍然动态从Palo里面获取:

palo-qlik-sense-02

仍然用云端的数据仓库Palo一文中使用的Star Schema Benchmark数据为例。

打开数据加载编辑器,对于SUPPLIER、PART、CUSTOMER、DATE等维度表可以使用数据连接向导导入到内存模型,自动生成的代码比如:

LOAD `S_SUPPKEY` as SUPPKEY,
    `S_NAME`,
    `S_ADDRESS`,
    `S_CITY`,
    `S_NATION`,
    `S_REGION`,
    `S_PHONE`;
SQL SELECT `S_SUPPKEY`,
    `S_NAME`,
    `S_ADDRESS`,
    `S_CITY`,
    `S_NATION`,
    `S_REGION`,
    `S_PHONE`
FROM ssb.SUPPLIER;

而LINEORDER这张事实表需要通过以下语句仅仅载入部分维度数据:

DIRECT QUERY
DIMENSION
    `LO_ORDERKEY`,
    `LO_LINENUMBER`,
    `LO_SUPPKEY` as SUPPKEY,
    `LO_PARTKEY` as PARTKEY,
    `LO_CUSTKEY` as CUSTKEY,
    `LO_ORDERDATE` as ORDERDATE,
    `LO_COMMITDATE` as COMMITDATE
MEASURE
    `LO_ORDERPRIOTITY`,
    `LO_SHIPPRIOTITY`,
    `LO_QUANTITY`,
    `LO_EXTENDEDPRICE`,
    `LO_ORDTOTALPRICE`,
    `LO_DISCOUNT`,
    `LO_REVENUE`,
    `LO_SUPPLYCOST`,
    `LO_TAX`,
    `LO_SHIPMODE`
FROM ssb.LINEORDER;

其中,DIRECT QUERY表示用Direct Discovery特性,把各个外键列放到DIMENSION标签下,度量列放在MEASURE标签下即可。

有一个小细节需要注意,那就是对Palo使用Direct Discovery特性的时候,需要在载入脚本加入:

SET DirectIdentifierQuoteChar='``';

加载数据后,可以看到Qlik导入了SUPPLIER等维度表以及LINEORDER实事表中维度数据,但是度量数据并没有导入,留在了Palo数据仓库中:

palo-qlik-sense-04

验证数据模型

在Qlik中切换到数据模型查看器,验证数据模型。Qlik是根据列名来定义关联的,最终的星型数据模型如下:

palo-qlik-sense-05

中间LINEORDER有个带箭头的数据库标记,表示该数据集使用了Direct Discovery特性。

换言之,数据仓库中含有大量数据的实事表(如LINEORDER)应该用Direct Discovery特性来刻画,而周围的维度表(如ORDERDATE等)可以载入内存加快数据切片的速度。

数据交互分析

现在可以进行交互式分析了。

首先让我们建立一个复合维度,依次以年、客户国籍、产品分类下钻:

palo-qlik-sense-06

接着便可以定义柱状图:

  • 维度:使用刚才创建的下钻复合维度
  • 度量:定义一个计算值SUM(LO_REVENUE – LO_SUPPLYCOST)来表示总利润

结果将会产生按照年份排序的总利润,如下:

palo-qlik-sense-07

由于1998年的销售下降很快,可以单独选取1998年,确认后便得到按照国家的细分,并可以仅仅选取ASIA的国家:

palo-qlik-sense-08

貌似INDIA的销售出了问题,还可以继续下钻观察产品的利润:

palo-qlik-sense-09

需要注意的是,这一切漂亮图样都不需要任何编码,商务人士都可以通过Qlik拖拖拽拽完成交互式分析,而背后的一切大数据全部都由Palo来搞定!

 



张 琪

发表评论

电子邮件地址不会被公开。 必填项已用*标注