kylin与superset集成实现数据可视化

什么是OLAP?主流八大开源OLAP技术架构对比 随着大数据技术在各行各业的深入应用,对于海量数据的分析需求也愈加凸显,OLAP技术也逐渐走入人们的视野。本文将围绕常见的开源OLAP引擎展开,介绍什么是OLAP以及OLAP的常见操作和分类,并对目前主流的开源OLAP引擎进行对比和特点的总结。 一、什么是OLAP OLAP(On-line Analytical Processing,联机分析处理)是在基于数据仓库多维模型的基础上实现的面向分析的各类操作的集合。可以比较下其与传统的OLTP(On-line Transaction Processing,联机事务 阅读详情

原文地址:http://minirick.duapp.com/kylinyu-supersetji-cheng-shi-xian-shu-ju-ke-shi-hua/?utm_source=tuicool&utm_medium=referral

apache kylin是一个开源分布式引擎,提供Hadoop之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据。而superset是airbnb开源的一款数据可视化工具。

kylin在超大数据规模下仍然可以提供秒级甚至毫秒级sql响应的OLAP多维分析查询服务。而且对服务器内存的要求也不像spark sql那么高,经过多方面的优化,数据膨胀率甚至可以控制在100%以内。它利用hive做预计算,然后建立多维的数据立方体,并存在hbase中,从而提供了实时查询的能力。

superset也就是早先的caravel,提供了丰富的图表供用户配置。只要连上数据源,勾几个简单的配置,或者写点sql。用户就可以轻易的构建基于d3、nvd3、mapbox-gl等的炫酷图表。
superset

我厂也是选择了kylin和superset,遗憾的是superset支持多种数据源,包括druid、hive、impala、sparkSQL、presto以及多种主流关系型数据库,但是并不支持kylin。于是我们对其进行了改进。

首先观察superset的源码,它后台使用Flask App Builder搭建的,数据访问层用sqlalchemy实现。也就是说,它本质上可以支持所有数据源,只要实现一套kylin的dialect即可。而同时github上有一个pykylin项目,就是实现的这个dialect。这极大增强了我解决这个问题的信心。

正好前几周,superset出了一个新的prod版本airbnb_prod.0.15.5.0。装好它和pykylin之后,导入kylin数据源,成功! 导入kylin数据源 但是点开sqllab想敲点sql验证一下时,却出了异常。 异常 Debug了pykylin代码,发现get_table_names方法的入参connection实际已经是sqlalchemy的Engine对象了,这可能是最新sqlalchemy的版本升级造成的。总之,将原来的代码:

def get_table_names(self, connection, schema=None, **kw):
return connection.connection.list_tables()
改成:

def get_table_names(self, engine, schema=None, **kw):
connection = engine.contextual_connect()
return connection.connection.list_tables()
即可。

顺便我们看到这里它扩展了sqlalchemy的list_tables方法,sqllab左上方的table选择区还有列出所有schema的下拉框,于是我们顺带把list_schama方法也实现。connection.py添加:

def list_schemas(self):
route = ‘tables_and_columns’
params = {‘project’: self.project}
tables = self.proxy.get(route, params=params)
return [t[‘table_SCHEM’] for t in tables]
dialect.py添加:

def get_schema_names(self, engine, schema=None, **kw):
connection = engine.contextual_connect()
return connection.connection.list_schemas()
之后执行sql还是有错: 异常 pykylin在每次调用kylin的api时会首先登录,以获得JSESSIONID,并存入cookie中,这里是登录失败,检查代码,发现这里问题还挺多的,首先proxy.py中的login方法作者写的是self.password = user应改成password。dialect.py中create_connect_args方法改为:

def create_connect_args(self, url):
opts = url.translate_connect_args()
api_prefix = ‘kylin/api/’
args = {
‘username’: opts[‘username’],
‘password’: opts[‘password’],
‘endpoint’: ‘http://%s:%s/%s’ % (opts[‘host’], opts[‘port’], api_prefix)
}
args.update(url.query)
return [], args
这样大部分sql查询没有问题,但是有的查询结果有部分值是null,这样也会出错。修改cursor.py的_type_mapped方法:

def _type_mapped(self, result):
meta = self.description
size = len(meta)
for i in range(0, size):
column = meta[i]
tpe = column[1]
val = result[i]
if val is None:
pass
elif tpe == ‘DATE’:
val = parser.parse(val)
elif tpe == ‘BIGINT’ or tpe == ‘INT’ or tpe == ‘TINYINT’:
val = int(val)
elif tpe == ‘DOUBLE’ or tpe == ‘FLOAT’:
val = float(val)
elif tpe == ‘BOOLEAN’:
val = (val == ‘true’)
result[i] = val
return result
这样在sqllab中执行sql基本没问题了。 sqllab

下一步开始自定义slice,定制自己的可视化dashboard。

在这里再次遇到问题,superset会自动把count函数计算的列设置别名叫count,而count是kylin的关键字,因此导致查找失败。修改superset的models.py的sqla_col方法:

@property
def sqla_col(self):
    name = self.metric_name
    if name == 'count':
        name = 'total_count'
    return literal_column(self.expression).label(name)

另外在slice中还经常会遇到pandas抛出的KeyError异常。这是因为在superset里面所有的关键字都是小写,然而kylin返回的所有的数据metadata全是大写,导致superset在kylin的返回结果中查询关键字的时候出现找不到关键字的错误。

修改pykylin的cursor.py的execute方法。

def execute(self, operation, parameters={}, acceptPartial=True, limit=None, offset=0):
sql = operation % parameters
data = {
‘sql’: sql,
‘offset’: offset,
‘limit’: limit or self.connection.limit,
‘acceptPartial’: acceptPartial,
‘project’: self.connection.project
}
logger.debug(“QUERY KYLIN: %s” % sql)
resp = self.connection.proxy.post(‘query’, json=data)

    column_metas = resp['columnMetas']

    for c in column_metas:
        c['label'] = str(c['label']).lower()
        c['name'] = str(c['name']).lower()

    self.description = [
        [c['label'], c['columnTypeName'],
         c['displaySize'], 0,
         c['precision'], c['scale'], c['isNullable']]
        for c in column_metas
    ]

    self.results = [self._type_mapped(r) for r in resp['results']]
    self.rowcount = len(self.results)
    self.fetched_rows = 0
    return self.rowcount

最后,我发现在查找的字段包含kylin中的date类型时也会出错。点击slice页面右上角的query按钮,可以查看superset最终发送的sql。 kylin不支持的长日期格式 将它直接拷贝到kylin的insight页面去执行,发现报错。原来kylin的date类型只支持年月日,而superset在添加日期搜索条件时为了实现定时刷新图表而在sql的日期条件中都精确到了时分秒。关于这个我原先是在superset中做了修改。

在superset的models.py的get_query_str方法中:

time_filter = dttm_col.get_time_filter(from_dttm, to_dttm)
改为

if engine.name == ‘kylin’:
time_filter = dttm_col.get_date_filter(from_dttm, to_dttm)
else:
time_filter = dttm_col.get_time_filter(from_dttm, to_dttm)
添加get_date_filter,dt_sql_literal函数:

def get_date_filter(self, start_dttm, end_dttm):
col = self.sqla_col.label(‘__time’)
return and_(
col >= text(self.dt_sql_literal(start_dttm)),
col <= text(self.dt_sql_literal(end_dttm)),
)

def dt_sql_literal(self, dttm):
return “’{}’”.format(dttm.strftime(‘%Y-%m-%d’))
这样对于所有kylin数据源的查找时间范围条件都将转为年月日的格式。

不过我一直感觉这个改动不是很完美,是一种典型的打补丁的做法。后来我发现superset支持在列的设置页面为一个日期列添加自定义的格式转换函数 superset日期转换函数设置 于是我在这里设置日期列格式

TO_DATE(‘{}’, ‘yyyy-MM-dd’)

然后可以看到slice这里sql中的该列都变成了to_date函数形式 to_date sql 最后的工作就是修改kylin源码,添加对日期函数的支持。hive sql是支持to_date等日期格式转换函数的,kylin凭什么不支持?

大致debug了一下kylin的源码,kylin处理sql的入口在server-base模块下的QueryController.java的query方法中。我发现在最终调用jdbc驱动执行sql之前,kylin会调QueryUtil类的massageSql方法来优化sql。主要是加上limit和offset参数。最后调内部类DefaultQueryTransformer的transform方法改掉sql中的一些通病,比如SUM(1)改成count(1)等。日期转换函数的处理放在这后面我觉得是最合适的。

添加正则表达式,以匹配日期函数:

private static final String TO_DATE = “(to_date|TO_DATE)\(‘|\”[‘|\”],\s?‘|\”[‘|\”]\)”;
private static final Pattern FN_TO_DATE = Pattern.compile(TO_DATE);
添加日期转行函数解析:

private String executeFN(String sql) {
Matcher m;
while (true) {
m = FN_TO_DATE.matcher(sql);
if (!m.find())
break;
String dateTime = m.group(2);
String format = m.group(3);
SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd HH:mm:ss”);
Date dt = null;
try {
dt = sdf.parse(dateTime);
} catch (ParseException e) {
logger.error(“Parse date error”, e);
}
sdf = new SimpleDateFormat(format);
String date = sdf.format(dt);
String begin = sql.substring(0, m.start());
String end = sql.substring(m.end(), sql.length());
sql = begin + “’” + date + “’” + end;
}
return sql;
}
然后kylin就可以支持上面sql的执行了 kylin支持to_date 最后,让我们多尝试一些可视化图表吧,把它们做成dashboard superset dashboard

结论:kylin很好地支持了我厂每天上百GB数据的立方体建模和实时查找,结合superset的方案,作为我厂内部的可视化工具,收到了很好地效果。

基于Apache Kylin大数据多维查询分析平台实践(已稳定运行2年多) 背景:B公司,前美纳斯上市公司,上亿App用户,近年来数据呈爆发式增长,每天行为日志达10T,原有的hive+mysql(查询太慢,存储太大),hive+impala(界面不友好,需要写sql语言,门槛较高,不方便运营人员查询数据,对多维数据查询较慢),已经满足不了当下需求,急需要一个能支持大规模数据查询,速度又快,使用零门槛的查询服务,几套方案选择后,最终选择了Kylin,主要看重的是它支持大规... 阅读详情

相关推荐

如何将Superset图表嵌入html

superset配置图表免登陆访问,之后可将图表嵌入到html系统中

【Superset】00 写在之前

写在之前 各位小伙伴大家好,我是一个正在学习superset的萌新。 Supertset是在我寻找企业数据分析解决方案时候,在github上找到的一个开源项目。他也是github上BI相关获得Star最多的项目。 他是由Airbnb团队研发,项目正处于Apache项目孵化中。原项目地址,可以访问:https://github.com/apache/incubator-superset 了解项目信息...

378

云模型在综合评价过程中的应用

目录 1 云模型标尺(标准云模型)的构建方法 1.1 通过正态云的“3En 规则”来表示评价论域 1.2 通过论域的边界值隶属度相等来表示评价论域 1.3 通过黄金分割法来表示评价论域 2 确定评价结果的过程 2.1 基本云发生器 2.2 X条件云发生器 2.3 两种方法的区别 综合评价问题一般分为以下六个步骤 1、明确评价目的; 2、确定被评价对象; 3、建立评价指标体系(包括收集评价指标的原始值、评价指标的若干预处理等); 4、确立与各项评价指标相对应的权重系数; 5、选..

weixin_62223576的博客 1万+

Superset整合keycloak系统

上面介绍的内容是在本地直接运行,如果在docker中需要将superset_config.py文件合并到superset/config.py中,主要原因是环境变量问题。keycloak规定:每一个要接入keycloak的三方系统必须要有一个client与之相对应,所以上来就要创建一个,假设名字为superset。本篇主要介绍superset如何整合单点登陆系统keycloak,现在网上的博客大部分都是失效了,这里我相当于更新一下,避免大家再走弯路。三、linux docker环境修改。

程序员的世界 1769

海康威视工业相机SDK二次开发实战:多相机同步采集与图像存储

本文详细介绍了海康威视工业相机SDK二次开发实战,包括多相机同步采集与图像存储的优化方案。通过MVS软件搭建开发环境,实现硬件与软件触发同步采集,并提供高效的图像存储管理技巧,帮助开发者提升工业视觉项目的效率与稳定性。

weixin_29168813的博客 667

CarSim仿真高级进阶---VS 命令行

仿真软件作为一种强大的工具,被广泛应用于汽车工程领域,本文将介绍如何使用VS命令行进行CarSim仿真的高级进阶操作,我们将结合相关的源代码和描述,帮助读者更好地理解和应用这一功能。打开Visual Studio,在“文件”菜单下选择“新建”->“项目”,然后选择“控制台应用程序”模板,填写项目名称和位置,点击“确定”按钮创建项目。保存源代码后,点击菜单中的“生成”->“生成解决方案”来构建项目,确保构建成功,没有任何错误。点击“编辑”按钮,在弹出的窗口中点击“新建”按钮。,并拥有有效的许可证。

weixin_50547796的博客 310

superset安装采坑

为了写毕业设计安装spuerset 弄到半夜一点多,才算勉强弄好。记录一下就去睡觉。 首先在阿里云ecs下尝试安装,阿里云比较坑的一点是他默认给你安装了python2.7,并且有些linux基础组件还必须基于python2.7。要用python3的东西就很不方便 。指路在阿里云CentOS服务器上安装Python3.7并设置为默认Python 此时你已经很好的做到python3和pyth...

qq_39625998的博客 1252

Python 爬虫实战:美团大众点评餐厅数据爬取与分析

本文摘要:美团/大众点评餐厅数据爬虫实战指南 本文详细介绍了如何开发一个完整的餐厅数据爬虫系统,涵盖从环境配置到数据可视化的全流程。主要内容包括: 项目目标:爬取餐厅基本信息(名称、评分、价格等)及详情数据,支持市场分析和商业决策 技术方案:使用Python生态工具(Requests、Playwright、Pandas等)构建爬虫系统 核心挑战:破解大众点评的字体反爬机制和美团的API签名验证 实现细节:提供完整的代码示例,包括字体解析、签名生成、请求重试等关键功能 数据应用:支持将结果导出为CSV/Exc

u014481728的博客 321

官方教程:Apache Kylin和Superset集成,使用开源组件,完美打造OLAP系统

本文转自Apache Kylin公众号apachekylin. Superset 是一个数据探索和可视化平台,设计用来提供直观的,可视化的,交互式的分析体验。 Superset 提供了两种分析数据源的方式: 1. 用户可以以单表形式直接查询多种数据源,包括 Presto、Hive、Impala、SparkSQL、MySQL、Postgres、Oracle、Redshift、SQL Server、D...

weixin_34025051的博客 858

手把手教您国内安装 Claude Code 并配置自定义大模型(包含New-API中转和可视化管理工具的使用)

国内免魔法畅用 Claude Code!手把手教你 Windows 安装、配置文件写法、对接阿里百炼 / DeepSeek / 智谱✨,附完整参数、正确命令、三方工具管理方案,新手一次成功!✅

XiaoqiangClub的博客 3786

基于Simulink的轨道交通信号控制系统仿真详细介绍

轨道交通信号控制系统是确保列车安全、高效运行的核心技术。通过Simulink进行信号控制系统的仿真,可以验证系统的设计、优化调度策略并提高安全性。以下是如何在MATLAB和Simulink中设计并仿真一个轨道交通信号控制系统的详细步骤。通过上述步骤,我们成功设计并实现了基于Simulink的轨道交通信号控制系统仿真。该系统能够根据列车位置、速度和轨道状态生成控制指令,确保列车的安全、高效运行。通过虚拟场景仿真、硬件在环测试和实机测试,验证了系统的性能,并通过参数优化进一步提升了系统的可靠性。引入智能调度。

xiaoheshang_123的博客 463

13.6 Apache Kylin和Superset集成,使用开源组件,完美打造OLAP系统

Superset 是一个数据探索和可视化平台,设计用来提供直观的,可视化的,交互式的分析体验。 Superset 提供了两种分析数据源的方式: 1. 用户可以以单表形式直接查询多种数据源,包括 Presto、Hive、Impala、SparkSQL、MySQL、Postgres、Oracle、Redshift、SQL Server、Druid 等。本文后续内容也会详细介绍Superset...

kk25114的博客 503

具身智能:原理、算法与系统 第16章 运动控制基础

实时迭代(Real-Time Iteration, RTI)策略在每个采样时刻执行有限次迭代(通常一次),利用相邻时刻解的连续性,在严格时间限制内获得可行解。比例-积分-微分(Proportional-Integral-Derivative, PID)控制是工业界最广泛应用的控制策略,其原理基于误差的当前值(比例)、累积值(积分)与变化率(微分)的线性组合。力-位置混合控制(Hybrid Force/Position Control)将任务空间分解为力控制子空间与位置控制子空间,分别控制。

VectorShift的博客 146

官方教程:Apache Kylin和Superset集成,开源组件完美打造OLAP系统

Superset 是一个数据探索和可视化平台,设计用来提供直观的,可视化的,交互式的分析体验。 Superset 提供了两种分析数据源的方式: 1. 用户可以以单表形式直接查询多种数据源,包括 Presto、Hive、Impala、SparkSQL、MySQL、Postgres、Oracle、Redshift、SQL Server、Druid 等。本文后续内容也会详细介绍Superset如何支...

yangbosos的博客 1089

11、基于STM32的智能药盒

当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未有的速度被单片机智能控制系统所取代。嵌入式具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。

行走的皮卡丘 6106

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

superset

#简介 python 大数据多维可视化分析工具,以flask appbuilder框架+sqlalchemy为基础 曾用名Caravel, Panoramix, 一款开源OLAP+数据可视化分析前端工具,支持Druid和Kylin 官网; http://airbnb.io/projects/superset/ 源码:https://github.com/apache/incubator-

天枢的博客 2359

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

superset支持的图表_KyLin与、 Superset集成

Apache Superset(incubating)(以下简称Superset)起源于2015年年初黑客马拉松项目,曾经使用“Caravel”和“Panoramix”作为项目名称。作为Apache软件基金会孵化项目,Superset的目标是要做成数据可视化平台,现在经过3年多的发展,Superset已经成为一个集合了数据可视化、数据自助分析、数据探索的企业级应用。Superset 提供...

weixin_39951181的博客 411

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

superset连接kylin并附带使用案例

本文章主要介绍下superset连接kylin,最后再介绍下使用案例,superset官方文档没有任何介绍连接到kylin的文档,但GitHub中有多个kylin与superset的结合的开源插件,最终找到一款一直有人在维护更新的工具--kylinpy,另外一款是pykylin,坑太多没人维护,不推荐。。1. 安装kylinpy插件,连接kylin进入linux python虚拟环境:在什么环境下...

臭臭猫 3607

Apache Superset技术实践

Apache Superset技术实践

super_chenzhou 3708

Apache Kylin集成superset

Superset是一款开源的数据可视化工具,目前可以与各种数据源进行集成,包括mysql、druid等。本文主要讲解在非root用户下如何安装和配置superset,来实现对apache kylin的访问。

skyyws的博客 4491

Superset部署与集成kylin

Superset是什么 superset是一个Apache开源的数据探查与可视化平台,怎么说呢,我们只需要安装它,配置他的一些文件,就可以连接数据库,进行图表展示。 Superset介绍 后端:整个项目的后端是基于Python的,用到了Flask、Pandas、SqlAlchemy。 前端:用到了npm、react、webpack,这意味着你可以在手机也可以流畅使用。。 功能介绍: 1、我们可以通过连接数据库,去对数据库中的单个表进行配置,展示出柱状图,折线图,饼图,气泡图,词汇云,数字,环状.

那年夏天110的博客 1272

给大数据分析师的一双大礼:Apache Kylin和Superset

在大数据时代,使用传统数据处理方式已经无法满足企业大规模数据的增长,而人工智能和IoT时代的到来让处理超大规模数据,解读超大规模数据的需求更加迫在眉睫。

优快云大数据 3215

superset结合kylin

连接前的准备: 除了要安装好kylin和superset之外。还需要安装kylinpy来支持 安装文档详情见kylin的api文档http://kylin.apache.org/cn/docs21/tutorial/kylin_client_tool.html 连接步骤 1.kylin中创建成功了cube 2.superset搭建成功 3.superset连接kylin kyli...

lzlnd的博客 974
上一篇: Apache Kylin原理学习之Cube的创建与Build
下一篇: Ambari离线部署Hadoop集群踩到的坑
Ronney-Hua
博客等级 码龄10年 48粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值