Redash 二次开发入门

前言

在Redash二次开发上做了不少工作,修改bug,定制样式,定制功能,增加数据源等等。聊聊自己的二次开发经验。

懂分享的人,一定会快乐!

环境准备

Redash依赖的外部环境比较多,特别是Python相关的包,大多数时候一次装不成功,需要单独装或者更新安装其他系统依赖库,祝大家一次成功!

环境准备可以参考另一篇blog,没用全说,其余的自己动动脑筋比较好。

附传送门:Redash开发指南

系统架构介绍

总的来说,Redash分为2部分:前端展示,后端数据库连接查询。在这中间,Redash采用celery进行任务调度,满足大量用户查询。

接下来会从三个方面进行总结:

  • 总体结构
  • 前端逻辑
  • 后端逻辑
总体结构

在这里插入图片描述

Redash在应用层、前后端均带有自己的核心模块。总而言之,当用户在使用Query、Dashboard、Alert功能时,会由前端提供基础的展示,

再把用户的请求通过JS和后端的Server层交互。用户所有的请求会放在任务队列中,对于需要查询的任务,则会去找对应的数据查询引擎。

前端逻辑

前端主要是控制页面元素和CSS样式,提供可视化组件和基本的功能。所有与后端交互的部分由JS业务逻辑控制,实现数据传输与功能跳转。

后端逻辑

在这里插入图片描述
后端的大部分功能依赖Celery进行完成,使用Redis做消息中间件。在任务队列中,大多数任务互相独立,进行数据查询时,worker起到主要作用。

Redash的一个特色是连接了28种以上的数据源,所以自带的数据查询引擎模块融合了这些数据库(引擎)的Python调用接口,十分丰富。

代码结构介绍

Redash的模块化做的非常好,基本上可以通过目录和文件名分析出代码的功能定位。嗯,看过的都说好,改过的都说爽。
在这里插入图片描述
一图其实可以省略很多字。实在不明白,欢迎留言评论,加小密圈哈。

案例上手

Redash有一个潜在的性能问题:Hive获取几万张表的schema信息时,促使celery worker任务队列堵塞,资源响应过慢。

所以,就以这个问题来看看源码修改。

问题分析:Reash采用desc命令获取hive table schema信息(db名,table列名),每张表执行一次desc,速度过慢。

解决方案:直接通过hive metadata获取,即,从mysql database中获取schema信息。(不懂hive的metadata为啥用mysql的,可以去查查)

准备查询mysql的SQL代码:

# 获取DB名
db_sql = "select name as db from DBS"

# 获取table名
db_list = ['xx1', 'xx2']
for db in db_list:
	tabel_sql = "select tbl_name as table_name from DBS as db inner join TBLS as tbl on db.db_id = tbl.db_id where db.name = '{}'".format(db[0])
	
# 获取column名
table_list = ['t1', 't2']
for table in table_list:
	sql = "select * from ( "
	sql += "select col.column_name, col.type_name as column_type from DBS as db inner join TBLS as tbl on db.db_id = tbl.db_id inner join SDS as sds on tbl.sd_id = sds.sd_id inner join COLUMNS_V2 as col on sds.cd_id = col.cd_id"
	sql += " where db.name = '{}' and tbl_name = '{}'".format(db[0], table[0])
	sql += " union all "
	sql += "select pt.PKEY_NAME as column_name, pt.PKEY_TYPE as column_type from DBS as db inner join TBLS as tbl on db.db_id = tbl.db_id left join PARTITION_KEYS as pt on tbl.tbl_id = pt.tbl_id"
	sql += " where db.name = '{}' and tbl_name = '{}'".format(db[0], table[0])
	sql += " ) as t where t.column_name is not null"	

前端添加hive数据源连接串的地方,增加mysql配置信息:

# 修改前端配置
def configuration_schema(cls):
    return {
        "type": "object",
        "properties": {
            "host": {
                "type": "string"
            },
            "port": {
                "type": "number"
            },
            "database": {
                "type": "string"
            },
            "username": {
                "type": "string"
            },
            "mysql_host": {
                "type": "string",
            },
            "mysql_port": {
                "type": "number",
                "default": 3306
            },
            "mysql_database": {
                "type": "string",
                "default": "hive_test"
            },
            "mysql_username": {
                "type": "string",
                "default": "root"
            },
            "passwd": {
                "type": "string",
                "title": "Mysql Password"
            }
        },
        "order": ["host", "port", "database", "username", "mysql_host", "mysql_port", "mysql_database", "mysql_username", "passwd"],
        "required": ["host", "mysql_host", "mysql_port", "mysql_database", "mysql_username", "passwd"],
        'secret': ['passwd']
    }

修改获取schema信息的处理函数_get_table(self, schema), 将其改为通过配置拿mysql连接串,联系上述SQL逻辑,获取schema信息即可。此处不做演示了。

结语

以上,算是笔者总结的二次开发入门资料吧。如有问题,欢迎加入小圈子,一起交流!

在这里插入图片描述

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Ubuntu 20.04是一款广受欢迎的Linux操作系统,而Redash则是一种用于数据可视化和分享的工具。 Ubuntu 20.04提供了对Redash的全面支持,你可以通过安装一些必要的软件和配置,将Redash部署到Ubuntu系统上。 首先,你需要在Ubuntu上安装Docker,这是一种用于容器化应用程序的开源平台。你可以通过运行以下命令来安装Docker: ``` sudo apt update sudo apt install docker.io ``` 安装完成后,你需要启动并将Docker服务设置为开机自启动: ``` sudo systemctl start docker sudo systemctl enable docker ``` 接下来,你需要创建一个用于持久化存储Redash数据的Docker卷,这可以通过运行以下命令来完成: ``` sudo docker volume create redash_data ``` 然后,你可以使用Docker Compose来定义和管理Redash的容器化部署。在Ubuntu 20.04上安装Docker Compose的方法如下: ``` sudo apt install docker-compose ``` 安装完成后,你可以下载Redash的Docker Compose配置文件,并进行一些自定义配置。你可以在https://redash.io/help/open-source/setup 上找到这个文件。 将下载的docker-compose.yml文件保存到一个目录中,然后在该目录中运行以下命令来启动Redash容器: ``` sudo docker-compose up -d ``` 在Redash容器启动后,你可以通过浏览器访问`http://localhost`来访问Redash的Web界面。 总而言之,通过在Ubuntu 20.04上安装Docker和Docker Compose,并使用相应的配置文件,你可以方便地在你的机器上部署Redash。这将使你能够对数据进行可视化和分享,以提高数据分析和决策的效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值