问题背景

Kylin作为一个极其优秀的MOLAP,提供了完整的Cube创建、更新流程。同时提供了Sql查询。功能上看没有问题,但是在提供查询服务的时候还是有些不友好。

sql查询需要常常需要关联Hive表,Cube的作用是对查询做优化,但是用户需要知道hive表结果——为什么不提供接口让用户直接对Cube模型查询呢?

比如,我们用kylin建立了一个Sales Cube,关于公司销售数据统计。维度包括:年/季度/天,以及部门site;统计值measure包括,销售金额,销量,销售员数量等。

这个Cube需要通过两个hive表join得到基础数据。

我们不想让用户关心底层的hive表结构,而是希望他们能够更直接地对Cube的数据结构查询。

MDX

多维表达式是OLAP的查询语言,查询对象是多维数据结构Cube,解析器(例如Mondrian)会吧MDX转换成SQL来查询关系数据库(可能是多条查询)。

Cubes Framework

从API调用者的角度提供一套OLAP操作的API可能更友好,例如我们的Sales Cube模型建立好之后,通过drilldown/rollup, slice/dice操作的组合就能得到最终的统计结果。这比用MDX或者Sql都更方便。Cubes能做到(https://pythonhosted.org/cubes/index.html)

某种意义上Cubes是多维模型的ORM。

Kylinpy

Cubes支持多种数据源,只要有SqlAlchemy dialect就可以。kylinpy是kylin的sqlalchemy包。但是跟cubes对接时需要稍作修改:

diff --git a/kylinpy/kylindb.py b/kylinpy/kylindb.py
index bd0562e..6d6f7c7 100644
--- a/kylinpy/kylindb.py +++ b/kylinpy/kylindb.py
@@ -39,6 +39,10 @@ class Cursor(object):
] for c in self._column_metas) def execute(self, query, *params, **kwargs):
+ for param in params:
+ for k,v in param.items():
+ query = query.replace('%('+k+')s', str(v))
+

Cubes model.json

根据Kylin的模型建立对应的Cubes模型文件:

{
    "dimensions": [
        {
            "name":"year",
            "levels": [
                {
                    "name":"YEAR",
                    "label":"YEAR",
                    "attributes": ["YEAR_BEG_DT"]
                },
                {
                    "name":"QUATER",
                    "label":"QUATER",
                    "attributes": ["QTR_BEG_DT"]
                },
                {
                    "name":"PART_DT",
                    "label":"PART_DT",
                    "attributes": ["PART_DT"]
                }
            ]
        },
        {
            "name":"site", 
            "levels": [
                {
                    "name": "LSTG_SITE_ID",
                    "label": "LSTG_SITE_ID",
                    "attributes": ["LSTG_SITE_ID"]
                }
         ]
        }
    ],
    "cubes": [
        {
            "name": "KYLIN_SALES",
            "dimensions": ["year", "site"],
            "joins": [
                 {"master":"PART_DT", "detail":"KYLIN_CAL_DT.CAL_DT","method": "match"}
            ],
            "measures": [
                {"name": "PRICE", "label": "PRICE"},
                {"name": "ITEM_COUNT", "label": "ITEM_COUNT"},
                {"name": "SELLER_ID", "label": "SELLER_ID", "aggregates":["count_distinct"]}
            ],
            "aggregates": [
                {
                    "name": "TOTAL_SOLD",
                    "function": "sum",
                    "measure": "PRICE"
                },
                {
                    "name": "TOTAL_ITEMS",
                    "function": "sum",
                    "measure": "ITEM_COUNT"
                },
                {
                    "name": "_COUNT_",
                    "function": "count"
                },
                {
                    "name": "DISTINC_SALLERS",
                    "function": "count_distinct",
                    "measure": "SELLER_ID"
                }
            ],
            "mappings": {
                    "year.PART_DT": "PART_DT",
                    "year.YEAR_BEG_DT": "KYLIN_CAL_DT.YEAR_BEG_DT",
                    "year.QTR_BEG_DT": "KYLIN_CAL_DT.QTR_BEG_DT",
                    "site.LSTG_SITE_ID": "LSTG_SITE_ID"                 },
            "info": {
                "min_date": "2010-01-01",
                "max_date": "2010-12-31"
            }
        }
    ]
}

slicer启动和使用

slicer.ini 文件

[workspace]
log_level: debug [server]
host: localhost
port: 5000
reload: yes
prettyprint: yes [store]
type: sql
url: kylin://ADMIN:KYLIN@localhost:7070/Tutorial?version=v1
schema=DEFAULT
dimension_schema=DEFAULT [models]
main: model.json

启动

slicer serve slicer.ini

http查询示例:

-- 按季度下钻所有统计结果

http://localhost:5000/cube/KYLIN_SALES/aggregate?drilldown=year:QUATER

-- 按年下钻所有统计结果

http://localhost:5000/cube/KYLIN_SALES/aggregate?drilldown=year:YEAR

-- 按年下钻site0的所有统计结果

http://localhost:5000/cube/KYLIN_SALES/aggregate?drilldown=year:YEAR&cut=site:0

-- 对0-4这几个销售点,统计2012年每个季度的结果

http://localhost:5000/cube/KYLIN_SALES/aggregate?drilldown=year.QUATER|site&cut=year.YEAR_BEG_DT:date'2012-01-01'|site:0-4

DataBrewery Cubes 连接Kylin的更多相关文章

  1. 使用Kylin构建企业大数据分析平台的4种部署方式

    本篇博客重点介绍如何使用Kylin来构建大数据分析平台.根据官网介绍,其实部署Kylin非常简单,称为非侵入式安装,也就是不需要去修改已有的 Hadoop大数据平台.你只需要根据的环境下载适合的Kyl ...

  2. Kylin如何进行JDBC方式访问或者调用

    Kylin提供了标准的ODBC和JDBC接口,能够和传统BI工具进行很好的集成.分析师们可以用他们最熟悉的工具来享受Kylin带来的快速.我们也可以对它进行定制开发报表等,把kylin当做数据库服务器 ...

  3. Python之Cubes框架使用

    本文主要内容包含Cubes框架的介绍和简单使用. 一. 介绍和安装 Cubes是一个轻量级的Python框架和一套工具,用于开发报告和分析应用程序,在线分析处理(OLAP),多维分析和聚合数据的浏览. ...

  4. superset 安装测试,基于windows 和 centos7.x

    1.刚开始在windows平台测试搭建,报各种问题,搭建可以参考官网https://superset.incubator.apache.org/installation.html#deeper-sql ...

  5. kylin 连接 hortonworks 中的 hive 遇到的问题

    用 hortonworks(V3.1.0.0) 部署了 ambari (V2.7.3),用 ambari 部署了 hadoop 及 hive. 1.  启动 kylin(V2.6)时,遇到如下问题: ...

  6. 使用别的电脑连接另一台电脑当中的虚拟机中的kylin项目

    环境说明: 本机A的ip:192.168.0.242 服务器B的ip:192.168.0.125 服务器上的虚拟机C的ip:192.168.43.129 目前状态: B上面能访问C上的站点kylin站 ...

  7. 【Kylin实战】邮件报表生成

    在cube build完成后,我的工作是写sql生成数据分析邮件报表.但是,问题是这种重复劳动效率低.易出错.浪费时间.还好Kylin提供RESTful API,可以将这种数据分析需求转换成HTTP请 ...

  8. Apache Kylin的核心概念

    不多说,直接上干货! 1.表(table):This is definition of hive tables as source of cubes,在build cube 之前,必须同步在 kyli ...

  9. Apache Kylin远程代码执行漏洞复现(CVE-2020-1956)

    Apache Kylin远程代码执行(CVE-2020-1956) 简介 Apache Kylin 是美国 Apache 软件基金会的一款开源的分布式分析型数据仓库.该产品主要提供 Hadoop/Sp ...

随机推荐

  1. 3Linux常用命令

    文件目录管理命令 1.touch touch 文件名   #创建空白文件 -a  修改读取(访问)时间atime -m  修改修改时间mtime -d  同时修改atime 和 mtime touch ...

  2. CentOS内网机器利用iptables共享公网IP上网

    公司有个业务是2B的以及日活不大,所以两台服务器搞定,一个6M EIP.两台机器都是CentOS7系统EIP为 xxx.xxx.xxx.xxx绑在 内网ip为 172.18.30.175的服务器上,内 ...

  3. https://github.com/commonsguy/cw-omnibus.git

    https://github.com/commonsguy/cw-omnibus.git

  4. 关于Bootstrap的入门知识

    问:Bootstrap是什么? 答:开源的前端框架,就是一些事先写好的css.js等. 问:Bootstrap在哪儿下载? 答:官方(https://getbootstrap.com/),中文(htt ...

  5. sql server 查看锁表SQL【转】

    1.select * from sys.dm_tran_locks或sp_LOCK 查看request_node 字段中为'X'(排他锁)或'IX'(意向排他锁)2.用sp_who2 + pid(进程 ...

  6. openvpn显示连接成功但是无法进行git操作

    使用openvpn连接公司内网以进行git操作.以管理员身份运行openvpn gui,一段时间后提示连接成功,右下角图标变成绿色,但是进行git操作,每次都发生失败,提示连接不上.右键点击openv ...

  7. APIcloud微信支付和支付宝支付(方案2,主要在后台进行)

    支付宝代码 var aliPay = api.require('aliPay'); api.ajax({ url: yuming+'index.php/api/Alipay/getOrder', me ...

  8. windows 命令行出现中文乱码

    1.打开CMD.exe命令行窗口 2.通过 chcp命令改变代码页chcp 65001  //UTF-8的代码页为65001

  9. Tomcat的三种部署方式

    Tomcat是目前web开发中非常流行的Web 服务器,也就是tomcat在部署项目的时候,必须要把应用程序中所用到的jar包放到tomcat的lib目录下,然后再一起部署到服务器上. 那么tomca ...

  10. JS同步与异步;

    JS的同步与异步 同步:代买从上往下的执行 异步:每个模块各执行各的,同时执行,互不干扰 四个异步事件:(1)定时器(2)ajax(3)时间的绑定(4)回调函数 现在用定时器来说一说setTimeOu ...