一、Superset二次開發(fā)技術(shù)
Apache Superset是一個基于Python的可視化數(shù)據(jù)探索平臺,是由Airbnb開源,為現(xiàn)代化的數(shù)據(jù)分析工具,提供用于探索,可視化和分享數(shù)據(jù)的直觀界面。Superset的二次開發(fā)可輕松擴展其內(nèi)置功能,提供更多自定義需求。以下是一些常用的Superset二次開發(fā)技術(shù):
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可擴展通過使用開發(fā)自定義數(shù)據(jù)庫類型等插件
class MyEngineSpec(BaseEngineSpec):
engine = 'my_engine'
max_column_name_length = 63
max_table_name_length = 63
espec = MyEngineSpec()
二、Superset二次開發(fā)部署
Superset是一個基于Python Flask Web框架的開源Web應用程序,使用Docker部署非常方便,推薦使用Docker Compose。以下是Superset二次開發(fā)部署的簡單步驟:
1、安裝Docker和Docker Compose
$ sudo apt-get install docker.io
$ sudo pip install -U docker-compose
2、創(chuàng)建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二次開發(fā)難度
Superset二次開發(fā)有一個特點:擴展易,理解難。理解Superset底層框架的架構(gòu)是必須的,例如sqlalchemy、flask、celery、werkzeug等等。此外,學習前端開發(fā)技術(shù)及JavaScript語言也是必不可少的。
四、Superset二次開發(fā)鉆取
Superset通過Druid和SQLAlchemy提供了有效和快速的數(shù)據(jù)查詢和可視化功能。例如,您可以通過Superset創(chuàng)建透視表,交叉表,數(shù)字圖表等,并通過鉆取功能在不同的層次上對數(shù)據(jù)進行細分。以下是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二次開發(fā)登錄
Superset提供自定義身份驗證和登錄邏輯的方法,將登陸、鑒權(quán)、權(quán)限等實現(xiàn)自己的業(yè)務邏輯。以下是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提供基本數(shù)據(jù)探索和可視化功能。以下是一些Superset的使用示例:
1、添加數(shù)據(jù)集:
進入Superset的主頁面,點擊“Sources” -> ”+” -> “Database”,選擇要添加的數(shù)據(jù)源類型,并填寫相關(guān)信息,如數(shù)據(jù)庫類型、連接信息等。
2、創(chuàng)建透視表:
在Superset的主頁面,點擊“Explore” -> “Table” -> 選擇要展現(xiàn)的數(shù)據(jù)表,選擇數(shù)據(jù)表后,可以選擇透視表選項進行設(shè)置,并進行數(shù)據(jù)展示。
3、創(chuàng)建圖表:
在Superset的主頁面,點擊“Explore” -> “Chart” -> 選擇要展現(xiàn)的數(shù)據(jù)表,選擇數(shù)據(jù)表后,可以選擇圖表類型并進行數(shù)據(jù)展示。
七、Superset教程
可以通過官網(wǎng)提供的Superset中文教程來學習Superset的基本操作和使用方法,也可以通過Superset社區(qū)中提供的論壇、問答社區(qū)等參與到Superset的討論和交流中。
八、Superset前端開發(fā)
前端開發(fā)是Superset二次開發(fā)不可缺少的一部分,通過掌握相關(guān)的前端技術(shù),可以實現(xiàn)Superset的定制化需求和自定義開發(fā)。以下是一些常用的Superset前端開發(fā)技術(shù):
1、Superset使用React和Redux實現(xiàn)前端交互邏輯
import React from 'react';
class MyComponent extends React.Component {
constructor(props) {
super(props);
}
render() {
return Hello, Superset!
;
}
}
2、Superset使用D3.js等可視化庫來實現(xiàn)數(shù)據(jù)的可視化展示
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框架的可視化平臺,可以幫助用戶發(fā)現(xiàn)數(shù)據(jù)、分析數(shù)據(jù)、交互式地探索數(shù)據(jù),完成對數(shù)據(jù)的可視化展示。在Superset的平臺上,用戶不僅可以對已有的數(shù)據(jù)進行探索和可視化,還可以對各類數(shù)據(jù)進行拖拽式的展示,并且進行數(shù)據(jù)鉆取等操作。
十、Superset中文教程官網(wǎng)
Superset的官方網(wǎng)址是https://superset.incubator.apache.org/,目前提供了中文版的文檔和教程。通過這個網(wǎng)站,用戶可以了解最新的Superset的版本和相關(guān)特性,并且可以隨時下載最新版本。