您的位置:

Superset二次开发详解

一、Superset二次开发技术

Apache Superset是一个基于Python的可视化数据探索平台,是由Airbnb开源,为现代化的数据分析工具,提供用于探索,可视化和分享数据的直观界面。Superset的二次开发可轻松扩展其内置功能,提供更多自定义需求。以下是一些常用的Superset二次开发技术:

1、Superset使用Python Flask Web框架

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
   return 'Hello World’

if __name__ == '__main__':
   app.run()

2、Superset可扩展通过使用开发自定义数据库类型等插件

class MyEngineSpec(BaseEngineSpec):
    engine = 'my_engine'
    max_column_name_length = 63
    max_table_name_length = 63

espec = MyEngineSpec()

二、Superset二次开发部署

Superset是一个基于Python Flask Web框架的开源Web应用程序,使用Docker部署非常方便,推荐使用Docker Compose。以下是Superset二次开发部署的简单步骤:

1、安装Docker和Docker Compose

$ sudo apt-get install docker.io
$ sudo pip install -U docker-compose

2、创建Superset Docker-compose.yml文件

version: '2.1'
services:
   superset:
      build: .
      command: bash -c "/app/docker-entrypoint.sh && superset runserver -d"
      ports:
         - "8088:8088"
      environment:
         - SUPERSET_LOAD_EXAMPLES=yes
      volumes:
         - .:/app
         - ./superset_home:/app/superset_home

3、运行Superset

$ docker-compose up -d

三、Superset二次开发难度

Superset二次开发有一个特点:扩展易,理解难。理解Superset底层框架的架构是必须的,例如sqlalchemy、flask、celery、werkzeug等等。此外,学习前端开发技术及JavaScript语言也是必不可少的。

四、Superset二次开发钻取

Superset通过Druid和SQLAlchemy提供了有效和快速的数据查询和可视化功能。例如,您可以通过Superset创建透视表,交叉表,数字图表等,并通过钻取功能在不同的层次上对数据进行细分。以下是Superset钻取的代码示例:

query_obj = (
    db.session.query(
        column1, column2, func.sum(column3),
        func.sum(column4)
    )
    .filter(Column1 == x)
    .group_by(column1, column2)
    .having(func.sum(column3) > 5)
)

return PivotTableBuilder().table_name("Results").pivot_query(query_obj).\
    add_column(column1).add_column(column2).add_metric(
        "sum_column3", func.sum, column3,
    ).add_metric(
        "sum_column4", func.sum, column4,
    ).build()

五、Superset二次开发登录

Superset提供自定义身份验证和登录逻辑的方法,将登陆、鉴权、权限等实现自己的业务逻辑。以下是Superset自定义身份验证的代码示例:

from flask import request
from flask_appbuilder.security.views import UserDBModelView
from wtforms import Form, StringField

class CustomLogin(UserDBModelView):

    def _handle_user(self, user, next_url):
        self.update_redirect()

        if user.auth_provider_type == 'ldap':
            return self.render_template(
                'superset/ldap_error.html',
                providers=[
                    p for p in self.appbuilder.sm.auth_user_registration.
                    get_auth_providers() if p.auth_type != 'ldap'])

        if self.appbuilder.sm.force_password_change_on_first_login and user \
                and user.password == conf.get('DEFAULT_PASSWORD'):
            self.appbuilder.sm.session.add(
                self.appbuilder.sm.UserSecurity(
                    user=user, password=generate_password_hash(
                        request.form['new_password'], method='sha256')))
            self.appbuilder.sm.session.commit()
            flash("Please login with new password", "warning")
            return redirect(self.appbuilder.get_url_for_login)

        return redirect(next_url)

class CustomAuthDBView(AuthDBView):

    login_template = 'superset/custom_login.html'

    def create_form(self):
        class LoginForm(self.orig_form):
            username = StringField(validators=[validators.InputRequired()], default='')
            password = PasswordField(validators=[validators.InputRequired()], default='')
        setattr(LoginForm, 'next', HiddenField())
        self.form_class = LoginForm

    def is_token_valid(self, token):
        return True # token validation code

flask_appbuilder_flaskappbuilder.add_view_no_menu(CustomLogin)
flask_appbuilder_flaskappbuilder.add_view_no_menu(CustomAuthDBView)

六、Superset使用

Superset提供基本数据探索和可视化功能。以下是一些Superset的使用示例:

1、添加数据集:

进入Superset的主页面,点击“Sources” -> ”+” -> “Database”,选择要添加的数据源类型,并填写相关信息,如数据库类型、连接信息等。

2、创建透视表:

在Superset的主页面,点击“Explore” -> “Table” -> 选择要展现的数据表,选择数据表后,可以选择透视表选项进行设置,并进行数据展示。

3、创建图表:

在Superset的主页面,点击“Explore” -> “Chart” -> 选择要展现的数据表,选择数据表后,可以选择图表类型并进行数据展示。

七、Superset教程

可以通过官网提供的Superset中文教程来学习Superset的基本操作和使用方法,也可以通过Superset社区中提供的论坛、问答社区等参与到Superset的讨论和交流中。

八、Superset前端开发

前端开发是Superset二次开发不可缺少的一部分,通过掌握相关的前端技术,可以实现Superset的定制化需求和自定义开发。以下是一些常用的Superset前端开发技术:

1、Superset使用React和Redux实现前端交互逻辑

import React from 'react';

class MyComponent extends React.Component {
   constructor(props) {
      super(props);
   }

   render() {
      return 

Hello, Superset!

; } }

2、Superset使用D3.js等可视化库来实现数据的可视化展示

var svg = d3.select("body")
   .append("svg")
   .attr("width", w)
   .attr("height", h)
   .append("g")
   .attr("transform", "translate(" + margin.left + "," + margin.top + ")");

九、Superset可视化平台

Superset作为一个基于Python Flask Web框架的可视化平台,可以帮助用户发现数据、分析数据、交互式地探索数据,完成对数据的可视化展示。在Superset的平台上,用户不仅可以对已有的数据进行探索和可视化,还可以对各类数据进行拖拽式的展示,并且进行数据钻取等操作。

十、Superset中文教程官网

Superset的官方网址是https://superset.incubator.apache.org/,目前提供了中文版的文档和教程。通过这个网站,用户可以了解最新的Superset的版本和相关特性,并且可以随时下载最新版本。