DataBrewery Cubes 连接Kylin
问题背景
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的更多相关文章
- 使用Kylin构建企业大数据分析平台的4种部署方式
本篇博客重点介绍如何使用Kylin来构建大数据分析平台.根据官网介绍,其实部署Kylin非常简单,称为非侵入式安装,也就是不需要去修改已有的 Hadoop大数据平台.你只需要根据的环境下载适合的Kyl ...
- Kylin如何进行JDBC方式访问或者调用
Kylin提供了标准的ODBC和JDBC接口,能够和传统BI工具进行很好的集成.分析师们可以用他们最熟悉的工具来享受Kylin带来的快速.我们也可以对它进行定制开发报表等,把kylin当做数据库服务器 ...
- Python之Cubes框架使用
本文主要内容包含Cubes框架的介绍和简单使用. 一. 介绍和安装 Cubes是一个轻量级的Python框架和一套工具,用于开发报告和分析应用程序,在线分析处理(OLAP),多维分析和聚合数据的浏览. ...
- superset 安装测试,基于windows 和 centos7.x
1.刚开始在windows平台测试搭建,报各种问题,搭建可以参考官网https://superset.incubator.apache.org/installation.html#deeper-sql ...
- kylin 连接 hortonworks 中的 hive 遇到的问题
用 hortonworks(V3.1.0.0) 部署了 ambari (V2.7.3),用 ambari 部署了 hadoop 及 hive. 1. 启动 kylin(V2.6)时,遇到如下问题: ...
- 使用别的电脑连接另一台电脑当中的虚拟机中的kylin项目
环境说明: 本机A的ip:192.168.0.242 服务器B的ip:192.168.0.125 服务器上的虚拟机C的ip:192.168.43.129 目前状态: B上面能访问C上的站点kylin站 ...
- 【Kylin实战】邮件报表生成
在cube build完成后,我的工作是写sql生成数据分析邮件报表.但是,问题是这种重复劳动效率低.易出错.浪费时间.还好Kylin提供RESTful API,可以将这种数据分析需求转换成HTTP请 ...
- Apache Kylin的核心概念
不多说,直接上干货! 1.表(table):This is definition of hive tables as source of cubes,在build cube 之前,必须同步在 kyli ...
- Apache Kylin远程代码执行漏洞复现(CVE-2020-1956)
Apache Kylin远程代码执行(CVE-2020-1956) 简介 Apache Kylin 是美国 Apache 软件基金会的一款开源的分布式分析型数据仓库.该产品主要提供 Hadoop/Sp ...
随机推荐
- Maven下CXF的wsdl2java生成客户端代码
<plugin> <groupId>org.apache.cxf</groupId> <artifactId>cxf-codegen-plugin< ...
- 微信小程序 支付功能 服务器端(TP5.1)实现
首先下载微信支付SDK ,将整个目录的文件放在 /application/extend/WxPay 目录下 在使用SDK之前我们需要对 WxPay.Config.php 进行配置 <?php n ...
- 定时器和函数的使用初级------移动一个div元素
在页面的动画效果中,经常有看到某个小块从一个地方移动到另一个地方的现象,现在,我们也来自己做一个这样的小动画,涉及到的基础包括定时器的使用和函数的使用 例如,我们要实现一个小方块从左面移动到右面,然后 ...
- Lua中面向对象
一.Lua中类的简单实现: (1)版本——摘自 Cocos2.0中的: --Create an class. function class(classname, super) local superT ...
- H5相关网址
html5中国 http://www.html5cn.org/ HTML 5 教程 http://www.w3school.com.cn/html5/index.asp http://www. ...
- 【Django】数据迁移问题
最近发现,Django在修改models之后重新生成迁移文件(这里可以生成),再进行数据库迁移的时候老是出错,查询数据库时老是找不到表格或者字段. 尝试过重新新建项目,新建一个同名APP,然后mode ...
- localStorage,sessionStorage,cookie使用场景和区别
localStorage:HTML5新增的在浏览器端存储数据的方法.设置和获取localStorage的方法: 设置: localStorage.name = 'zjj'; 获取: localStor ...
- 清理xcode
移除 Xcode 运行安装 APP 产生的缓存文件(DerivedData) ~/Library/Developer/Xcode/DerivedData 移除 APP 打包的ipa历史版本(Archi ...
- [leetcode]265. Paint House II粉刷房子(K色可选)
There are a row of n houses, each house can be painted with one of the k colors. The cost of paintin ...
- 49-2015年第6届蓝桥杯Java B组
1.三角形面积 如图1所示.图中的所有小方格面积都是1. 那么,图中的三角形面积应该是多少呢? 请填写三角形的面积.不要填写任何多余内容或说明性文字. image.png 计算方法: 8 * ...