溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐

發(fā)布時(shí)間:2020-10-12 21:49:25 來(lái)源:網(wǎng)絡(luò) 閱讀:30595 作者:翰墨桃源 欄目:大數(shù)據(jù)

1. 前言

此次實(shí)踐過(guò)程全屬個(gè)人學(xué)習(xí),我選擇了在window下安裝Superset,并進(jìn)行嵌入后臺(tái)系統(tǒng)實(shí)踐。對(duì)此進(jìn)行實(shí)踐過(guò)程總結(jié),實(shí)踐成果分享給大家,供大家參考,如果你有更好的想法,歡迎留言交流。

2. 環(huán)境準(zhǔn)備

2.1 安裝Python

建議安裝Python 3.4 以上版本。Python 2.7 版本在windows 上存在各種編碼問(wèn)題。https://www.python.org/downloads/release/python-350/

下載Windows x86-64 executable installer 。直接使用exe的安裝包即可,安裝過(guò)程中選中增加到環(huán)境變量。

  檢查:CMD下 分別運(yùn)行python -V  pip-V。如果找不到命令,則需要添加python的安裝目錄到path環(huán)境變量下。

2.2 安裝 virtualenv

此步驟可選,直接安裝的話(huà)跳到第四步。因?yàn)?/span>Superset需要安裝的組件較多,最好是使用virtualenv獨(dú)立一套python環(huán)境。

  在開(kāi)發(fā)Python應(yīng)用程序的時(shí)候,系統(tǒng)安裝的Python3只有一個(gè)版本。所有第三方的包都會(huì)被pip安裝到Python3site-packages目錄下。

  如果我們要同時(shí)開(kāi)發(fā)多個(gè)應(yīng)用程序,那這些應(yīng)用程序都會(huì)共用一個(gè)Python,就是安裝在系統(tǒng)的Python 3。如果應(yīng)用A需要jinja 2.7,而應(yīng)用B需要jinja 2.6怎么辦?

這種情況下,每個(gè)應(yīng)用可能需要各自擁有一套“獨(dú)立”的Python運(yùn)行環(huán)境。virtualenv就是用來(lái)為一個(gè)應(yīng)用創(chuàng)建一套“隔離”的Python運(yùn)行環(huán)境。

安裝命令:

pip install virtualenv


2.3 使用virtualenv

先在D盤(pán)建立d:\pythonVir 目錄。

然后激活:

cd d:\pythonVir
virtualenv env//等待初始化完成...
//激活:
env\Scripts\activate

激活之后的界面如下圖,注意在命令行輸入的左側(cè)有(env)標(biāo)記,這樣我們的后續(xù)操作都會(huì)在env中生效,不會(huì)影響整體的pyhton環(huán)境。

2.4 安裝VS2015

Superset中依賴(lài)的一些庫(kù)需要使用microsoft visual c++ 2010編譯。

根據(jù)說(shuō)明應(yīng)該是也可以安裝 Visual C++ 2015 Build Tools:  

http://landinghub.visualstudio.com/visual-cpp-build-tools



2.5 安裝sasl

這里是個(gè)大坑, 我之前直接安裝superset一直安裝不成功,報(bào)錯(cuò)(sasl.h 找不到)。

解決辦法是:通過(guò) http://www.lfd.uci.edu/~gohlke/pythonlibs/#sasl 下載對(duì)應(yīng)的版本

比如咱們安裝的python 3.6版本,系統(tǒng)是64位,就下載sasl-0.2.1-cp36-cp36m-win_amd64.whl。

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐

另外,安裝過(guò)程中出現(xiàn)Failed building wheel for xxx”的解決辦法如下:

出現(xiàn)原因:缺失相應(yīng)的whl文件。

解決辦法:下載并安裝對(duì)應(yīng)的whl文件。

例如,出現(xiàn)Failed building wheel for python_geohash”則下載相應(yīng)python版本的python_geohash文件。

 

我用的是Python3.6版本,則找到python_geohash-0.8.5-cp36-cp36m-win_amd64.whl文件進(jìn)行下載即可。

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐


    安裝方法:

pip install F:\python_geohash-0.8.5-cp36-cp36m-win32.whl


3.安裝Superset

1)前置環(huán)境準(zhǔn)備完畢后,開(kāi)始安裝superset.

pip install superset

執(zhí)行成功界面:

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐

2)創(chuàng)建管理員賬號(hào):

fabmanager create-admin --app superset

執(zhí)行過(guò)程界面如下:

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐

    3)初始化數(shù)據(jù)庫(kù) (windows下,先進(jìn)入到 Python安裝目錄(或者virtualEnv的虛擬目錄)下,lib\site-packages\superset\bin)

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐

    執(zhí)行命令:

python  superset db upgrade

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐

    4)加載例子(后續(xù)操作都需要在lib\site-packages\superset\bin)

python superset load_examples

    5)初始化角色和權(quán)限

python superset init

    6)啟動(dòng)服務(wù),端口 8088, 使用 -p 更改端口號(hào)。

python superset runserver -d

4. 配置數(shù)據(jù)源

Superset默認(rèn)使用sqllite。支持以下數(shù)據(jù)庫(kù):

MySQL

pip install mysqlclient

mysql://

Postgres

pip install psycopg2

postgresql+psycopg2://

Presto

pip install pyhive

presto://

Oracle

pip install cx_Oracle

oracle://

sqlite

 默認(rèn)有了

sqlite://

Redshift

pip install sqlalchemy-redshift

postgresql+psycopg2://

MSSQL

pip install pymssql

mssql://

Impala

pip install impyla

impala://

SparkSQL

pip install pyhive

jdbc+hive://

Greenplum

pip install psycopg2

postgresql+psycopg2://

Athena

pip install "PyAthenaJDBC>1.0.9"

awsathena+jdbc://

Vertica

pip install sqlalchemy-vertica-python

vertica+vertica_python://

ClickHouse

pip install sqlalchemy-clickhouse

clickhouse://

 

使用pip安裝好數(shù)據(jù)庫(kù)后,就可以在Web界面中,配置相關(guān)數(shù)據(jù)源了。

  數(shù)據(jù)庫(kù)的連接字符串格式參見(jiàn):

http://docs.sqlalchemy.org/en/rel_1_0/core/engines.html#database-urls


5. 登錄試用

登錄superset后,我們就可以配置自己本地?cái)?shù)據(jù)源了,進(jìn)行數(shù)據(jù)查詢(xún)以及展示。

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐


6. 嵌入后臺(tái)應(yīng)用

6.1  修改配置文件

修改superset中的config.py配置文件,將PUBLIC_ROLE_LIKE_GAMMA改為True

注釋意思:

授予公共角色與GAMMA角色相同的權(quán)限集。

如果想讓匿名用戶(hù)查看,可以設(shè)置這里,在儀表盤(pán)對(duì)特定數(shù)據(jù)集的授權(quán)顯示,也在這里設(shè)置。

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐

6.2  去掉X-Frame-Options限制

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐

避免iframe跨站訪(fǎng)問(wèn)問(wèn)題。

6.3  加入數(shù)據(jù)庫(kù)權(quán)限這里加入所有數(shù)據(jù)庫(kù)權(quán)限

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐

其中:

can explore on Superset為導(dǎo)出圖表

can explore json on Superset為導(dǎo)出圖表json

all database access on all_database_access訪(fǎng)問(wèn)所有數(shù)據(jù)庫(kù)權(quán)限,也可以設(shè)置單個(gè) 


6.4  iframe嵌入

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐

<iframe
  width="600"
  height="400"
  seamless
  frameBorder="0"
  scrolling="no"
src="http://127.0.0.1:8088/superset/explore/?form_data=%7B%22datasource%22%3A%223__table%22%2C%22viz_type%22%3A%22line%22%2C%22slice_id%22%3A63%2C%22granularity_sqla%22%3A%22ds%22%2C%22time_grain_sqla%22%3Anull%2C%22since%22%3A%22100+years+ago%22%2C%22until%22%3A%22now%22%2C%22metrics%22%3A%5B%7B%22aggregate%22%3A%22SUM%22%2C%22column%22%3A%7B%22column_name%22%3A%22num_california%22%2C%22expression%22%3A%22CASE+WHEN+state+%3D+%27CA%27+THEN+num+ELSE+0+END%22%7D%2C%22expressionType%22%3A%22SIMPLE%22%2C%22label%22%3A%22SUM%28num_california%29%22%7D%5D%2C%22adhoc_filters%22%3Anull%2C%22groupby%22%3A%5B%22name%22%5D%2C%22limit%22%3A%2210%22%2C%22timeseries_limit_metric%22%3A%7B%22aggregate%22%3A%22SUM%22%2C%22column%22%3A%7B%22column_name%22%3A%22num_california%22%2C%22expression%22%3A%22CASE+WHEN+state+%3D+%27CA%27+THEN+num+ELSE+0+END%22%7D%2C%22expressionType%22%3A%22SIMPLE%22%2C%22label%22%3A%22SUM%28num_california%29%22%7D%2C%22order_desc%22%3Atrue%2C%22contribution%22%3Afalse%2C%22row_limit%22%3A50000%2C%22color_scheme%22%3A%22bnbColors%22%2C%22show_brush%22%3A%22auto%22%2C%22show_legend%22%3Atrue%2C%22rich_tooltip%22%3Atrue%2C%22show_markers%22%3Afalse%2C%22line_interpolation%22%3A%22linear%22%2C%22x_axis_label%22%3A%22%22%2C%22bottom_margin%22%3A%22auto%22%2C%22x_ticks_layout%22%3A%22auto%22%2C%22x_axis_format%22%3A%22smart_date%22%2C%22x_axis_showminmax%22%3Afalse%2C%22y_axis_label%22%3A%22%22%2C%22left_margin%22%3A%22auto%22%2C%22y_axis_showminmax%22%3Afalse%2C%22y_log_scale%22%3Afalse%2C%22y_axis_format%22%3A%22.3s%22%2C%22y_axis_bounds%22%3A%5Bnull%2Cnull%5D%2C%22rolling_type%22%3A%22None%22%2C%22time_compare%22%3A%5B%5D%2C%22num_period_compare%22%3A%22%22%2C%22period_ratio_type%22%3A%22growth%22%2C%22resample_how%22%3Anull%2C%22resample_rule%22%3Anull%2C%22resample_fillmethod%22%3Anull%2C%22annotation_layers%22%3A%5B%5D%2C%22compare_lag%22%3A%2210%22%2C%22compare_suffix%22%3A%22o10Y%22%2C%22markup_type%22%3A%22markdown%22%2C%22metric%22%3A%22sum__num%22%2C%22where%22%3A%22%22%2C%22url_params%22%3A%7B%7D%7D&standalone=true&height=400"
>
</iframe>

    效果如下:

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐

7. 重定向Superset圖表URL

為什么需要重定向呢?這里主要是為了后臺(tái)應(yīng)用隱藏superset的圖表鏈接,防止被掃描到后,惡意使用;只要在后臺(tái)應(yīng)用重新寫(xiě)一個(gè)具有權(quán)限控制的請(qǐng)求鏈接,重新定向到superset的圖表鏈接,這樣就能防止數(shù)據(jù)泄露出去。

后臺(tái)代碼:

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐

    那么,對(duì)于鏈接地址:/chart/getDemoDashboardUrl,在后臺(tái)就可以進(jìn)行權(quán)限管理。

8. 動(dòng)態(tài)傳參交互實(shí)現(xiàn)

以上已經(jīng)完全可以把superset中的圖表嵌入到后臺(tái)應(yīng)用系統(tǒng)中了,但是怎么能夠?qū)崿F(xiàn)參數(shù)傳遞呢?現(xiàn)在,我在這里把實(shí)現(xiàn)過(guò)程整理出來(lái),跟著試驗(yàn)樣例看它怎么實(shí)現(xiàn)的。

研究一下superset圖表提供出去的鏈接地址,就可以發(fā)現(xiàn),已json作為參數(shù)傳遞的。如下:

form_data={"datasource":"3__table","viz_type":"line","slice_id":63,"granularity_sqla":"ds","time_grain_sqla":null,"since":"100 years ago","until":"now","metrics":[{"aggregate":"SUM","column":{"column_name":"num_california","expression":"CASE WHEN state = 'CA' THEN num ELSE 0 END"},"expressionType":"SIMPLE","label":"SUM(num_california)"}],"adhoc_filters":[{"expressionType":"SIMPLE","subject":"gender","operator":"==","comparator":"boy","clause":"WHERE","sqlExpression":null,"fromFormData":true,"filterOptionName":"filter_gtzm93u9ocq_9sy5vd5ocfg"},{"expressionType":"SIMPLE","subject":"name","operator":"LIKE","comparator":"Aaron","clause":"WHERE","sqlExpression":null,"fromFormData":true,"filterOptionName":"filter_6cgdixdoh4_5wrgyuorwoa"}],"groupby":["name"],"limit":"10","timeseries_limit_metric":{"aggregate":"SUM","column":{"column_name":"num_california","expression":"CASE WHEN state = 'CA' THEN num ELSE 0 END"},"expressionType":"SIMPLE","label":"SUM(num_california)"},"order_desc":true,"contribution":false,"row_limit":50000,"color_scheme":"bnbColors","show_brush":"auto","show_legend":true,"rich_tooltip":true,"show_markers":false,"line_interpolation":"linear","x_axis_label":"","bottom_margin":"auto","x_ticks_layout":"auto","x_axis_format":"smart_date","x_axis_showminmax":false,"y_axis_label":"","left_margin":"auto","y_axis_showminmax":false,"y_log_scale":false,"y_axis_format":".3s","y_axis_bounds":[null,null],"rolling_type":"None","time_compare":[],"num_period_compare":"","period_ratio_type":"growth","resample_how":null,"resample_rule":null,"resample_fillmethod":null,"annotation_layers":[],"compare_lag":"10","compare_suffix":"o10Y","markup_type":"markdown","metric":"sum__num","where":"","url_params":{}}

其中,標(biāo)注×××的就是過(guò)濾條件的參數(shù)配置,于是提取出來(lái)在代碼中做相應(yīng)的修改:

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐

修改后界面如下:

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐

輸入條件,姓名:Amy,性別選擇:girl,點(diǎn)擊查詢(xún)?nèi)缦拢?/span>

如何將Superset嵌入后臺(tái)系統(tǒng)之實(shí)踐

9. 結(jié)束語(yǔ)

以上實(shí)踐為預(yù)研superset可視化工具的過(guò)程整理,編寫(xiě)的樣例都很簡(jiǎn)陋。如果實(shí)際應(yīng)用到項(xiàng)目中去,按照上訴原理,重新設(shè)計(jì)一套可拓展,易使用的架構(gòu),將其打磨成可配置化的產(chǎn)品工具。這里先留下伏筆,暫不闡述,如果你有好的想法,歡迎留言交流。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI