輕量級(jí)BI工具Superset的搭建與使用

系統(tǒng)環(huán)境:Windows 10
Python:3.6.6
Superset:0.27.0

0 Superset 簡(jiǎn)介

??Superset 是一款由 Airbnb 開源的“現(xiàn)代化的企業(yè)級(jí) BI(商業(yè)智能) Web 應(yīng)用程序”,其通過創(chuàng)建和分享 dashboard,為數(shù)據(jù)分析提供了輕量級(jí)的數(shù)據(jù)查詢和可視化方案堕扶。
??Superset 的前端主要用到了 ReactNVD3/D3,而后端則基于 Python 的 Flask 框架和 Pandas库快、SQLAlchemy 等依賴庫(kù),主要提供了這幾方面的功能:

  • 集成數(shù)據(jù)查詢功能钥顽,支持多種數(shù)據(jù)庫(kù),包括 MySQL靠汁、PostgresSQL蜂大、Oracle、SQL Server蝶怔、SQLite奶浦、SparkSQL 等,并深度支持 Druid踢星。
  • 通過 NVD3/D3 預(yù)定義了多種可視化圖表澳叉,滿足大部分的數(shù)據(jù)展示功能。如果還有其他需求沐悦,也可以自開發(fā)更多的圖表類型成洗,或者嵌入其他的 JavaScript 圖表庫(kù)(如 HighCharts、ECharts)藏否。
  • 提供細(xì)粒度安全模型瓶殃,可以在功能層面和數(shù)據(jù)層面進(jìn)行訪問控制。支持多種鑒權(quán)方式(如數(shù)據(jù)庫(kù)副签、OpenID遥椿、LDAP基矮、OAuth、REMOTE_USER 等)冠场。

??Superset 的搭建與使用非常簡(jiǎn)單家浇,只需要一些 Python 基礎(chǔ),下面先從創(chuàng)建虛擬環(huán)境開始碴裙。

1 創(chuàng)建虛擬環(huán)境

??Superset 的依賴包較多钢悲,為了避免沖突,需要先搭建虛擬環(huán)境青团,再進(jìn)行安裝譬巫,這里推薦使用 Anaconda 自帶的 conda 工具創(chuàng)建虛擬環(huán)境:

conda create -n superset python=3.6

??創(chuàng)建虛擬環(huán)境成功后,啟動(dòng)虛擬環(huán)境:

activate superset

2 安裝

??使用豆瓣源安裝 Superset:

pip install superset -i https://pypi.douban.com/simple 

??這里遇到了一個(gè)坑督笆,某個(gè)依賴包沒有被正確的安裝芦昔,當(dāng)時(shí)隨手就解決了,沒有記錄下來娃肿。只大概記得報(bào)錯(cuò)信息提到 Microsoft Visual C++ 14.0 is required 咕缎,這是因?yàn)樵撘蕾嚢枰惭b C++ 進(jìn)行編譯。
??一般不用為此專門安裝 Microsoft Visual C++ 14.0料扰,而是去下載該依賴包的 whl 格式文件(需要對(duì)應(yīng)虛擬環(huán)境的 python 版本)凭豪,再進(jìn)入 whl 文件所在的路徑通過 pip install 安裝即可。如果在安裝過程中遇到其他問題晒杈,就把報(bào)錯(cuò)信息復(fù)制出來嫂伞,然后去問問神奇的 stackoverflow 吧!

3 初始化

??初始化的官方步驟如下:

# 創(chuàng)建管理員賬號(hào)
fabmanager create-admin --app superset 

# 初始化數(shù)據(jù)庫(kù)
superset db upgrade

# 載入案例數(shù)據(jù)
superset load_examples

# 初始化角色和權(quán)限
superset init

# 啟動(dòng)服務(wù)拯钻,端口號(hào) 8088帖努,使用 -p 更改端口號(hào)
superset runserver

??但在命令行中直接運(yùn)行 superset, 會(huì)提示“不是內(nèi)部或外部命令”粪般。要解決這個(gè)問題拼余,可以直接通過 cd 命令進(jìn)入 Superset 安裝目錄( ...\Anaconda3\envs\superset\Lib\site-packages\superset\bin )。然后運(yùn)行如下命令:

python superset db upgrade
python superset load_examples
python superset init
python superset runserver

??這里直接運(yùn)行 python superset runserver 會(huì)出錯(cuò)亩歹,原因是 Superset 使用 gunicorn 作為應(yīng)用程序服務(wù)器匙监,而 gunicorn 不支持 Windows。需要在命令行中添加 -d小作,使用 development web server 運(yùn)行亭姥。最終運(yùn)行命令為:

python superset runserver -d

??但是這種部署方式,官方并不建議在生產(chǎn)環(huán)境中使用躲惰。在 Superset 的 issues 922致份,有人提供了一種方法,使用 waitress础拨。首先安裝 waitress:

pip install waitress

??接著找到 superset/cil.py 的 debug_run() 函數(shù):

def debug_run(app, port, use_reloader):

    app.run(
        host='0.0.0.0',
        port=int(port),
        threaded=True,
        debug=True,
        use_reloader=use_reloader)

??將其改寫成:

def debug_run(app, port):
    from waitress import serve #使用 waitress 解決 gunicorn 不支持 windows 問題

    return serve(
        app,
        host='0.0.0.0',
        port=int(port))

??再次運(yùn)行 Superset:

python superset runserver -d -p 8079

??最后在瀏覽器輸入 http://localhost:8079 進(jìn)入登錄界面:

??輸入在 fabmanager create-admin --app superset 這步設(shè)置的賬號(hào)和密碼登錄氮块,進(jìn)入 Superset 首頁(yè)(右上角國(guó)旗處可設(shè)置語(yǔ)言):

??這里 Superset 已經(jīng)用之前加載的示例數(shù)據(jù)绍载,建立了 4 個(gè) dashboard,選擇其中一個(gè)進(jìn)行查看(即本文開始的那個(gè) dashboard):

4 數(shù)據(jù)源

??接下來滔蝉,將演示如何連接數(shù)據(jù)庫(kù)击儡,以及怎樣使用表和導(dǎo)入 CSV 到數(shù)據(jù)庫(kù)。Superset 還深度支持 Druid(一個(gè)高效的海量數(shù)據(jù)查詢系統(tǒng))蝠引,但這里不做介紹阳谍。

4.1 連接到數(shù)據(jù)庫(kù)

??從頂部導(dǎo)航菜單的 Source — Databases 進(jìn)入數(shù)據(jù)庫(kù)列表頁(yè):

??點(diǎn)擊在數(shù)據(jù)庫(kù)列表右上角的綠色加號(hào)按鈕:

??點(diǎn)擊按鈕后,將進(jìn)入添加數(shù)據(jù)庫(kù)的表單頁(yè)螃概,因?yàn)檫@只是一次簡(jiǎn)單的演示矫夯,只需要填寫兩項(xiàng):Database 和 SQLAlchemy URL,分別是數(shù)據(jù)庫(kù)名稱和 SQLAlchemy 的連接 URI (參閱為目標(biāo)數(shù)據(jù)庫(kù)創(chuàng)建連接 URI 的 SQLAlchemy 文檔)吊洼。

這里為了方便训貌,用的是本地的 SQLite 數(shù)據(jù)庫(kù)。也可以使用其他數(shù)據(jù)庫(kù)冒窍,如官方文檔推薦的 PostgreSQL 的一些示例數(shù)據(jù)集或官方文檔使用的示例天氣數(shù)據(jù)递沪。

??接著點(diǎn)擊 Test Connection 按鈕,測(cè)試是否能成功連接到數(shù)據(jù)庫(kù)综液。若成功連接款慨,則會(huì)看到下圖的彈出框:

??當(dāng)連接測(cè)試成功后,可在頁(yè)面底部看到該數(shù)據(jù)庫(kù)下的數(shù)據(jù)表谬莹,點(diǎn)擊 Save 按鈕檩奠,完成創(chuàng)建。

4.2 創(chuàng)建表

??現(xiàn)在已經(jīng)配置了數(shù)據(jù)庫(kù)附帽,接下來需要向 Superset 添加想要查詢的特定表笆凌。從 Sources — Tables 進(jìn)入到數(shù)據(jù)表列表頁(yè):

??點(diǎn)擊列表頁(yè)右上角的綠色加號(hào)按鈕:

??點(diǎn)擊按鈕后,將進(jìn)入添加數(shù)據(jù)表的表單頁(yè)士葫,在該頁(yè)面依次填寫目標(biāo)數(shù)據(jù)庫(kù)未桥、數(shù)據(jù)表名稱撒顿、數(shù)據(jù)庫(kù)模式(可選),再點(diǎn)擊 Save 按鈕开镣,即可完成創(chuàng)建欠啤。

??創(chuàng)建完成后荚藻,將重定向回到列表頁(yè),此時(shí)在頁(yè)面頂部會(huì)出現(xiàn)一條消息提示指示表已創(chuàng)建:

??在列表頁(yè)還可以對(duì)已添加的數(shù)據(jù)表進(jìn)行編輯:

??點(diǎn)擊編輯圖標(biāo)洁段,可進(jìn)入表的編輯頁(yè)应狱,對(duì)表的詳細(xì)信息、字段祠丝、指標(biāo)進(jìn)行配置疾呻,這里演示對(duì)表字段的配置(設(shè)置是否可對(duì)指定字段進(jìn)行分組或過濾):

4.3 上傳 CSV

??Superset 還可以導(dǎo)入 CSV 到數(shù)據(jù)庫(kù)中除嘹,從 Sources — Upload a CSV 進(jìn)入到導(dǎo)入 CSV 的表單頁(yè):

??依次填寫表名稱、導(dǎo)入 CSV 文件岸蜗、選擇要導(dǎo)入的數(shù)據(jù)庫(kù)尉咕,再點(diǎn)擊 Save 按鈕完成導(dǎo)入:

??創(chuàng)導(dǎo)入完成后,將重定向回到數(shù)據(jù)表列表頁(yè)璃岳,此時(shí)在頁(yè)面頂部會(huì)出現(xiàn)一條消息提示指示表已創(chuàng)建:

5 創(chuàng)建 dashboard

5.1 探索數(shù)據(jù)

??要開始探索數(shù)據(jù)年缎,只需在可用數(shù)據(jù)表列表中點(diǎn)擊剛剛創(chuàng)建的表名:

??點(diǎn)擊表名后進(jìn)入表的可視化頁(yè)面,默認(rèn)的可視化類型為表視圖:

??在 Datasouce & Chart Type 下方铃慷,依次可以進(jìn)行時(shí)間单芜、Group By、Not Group By 以及字段過濾等設(shè)置:

??在頁(yè)面左側(cè)完成相關(guān)設(shè)置后犁柜,點(diǎn)擊 Run Query 按鈕洲鸠,即可在右側(cè)的可視化視圖,查看數(shù)據(jù)的可視化展示:

5.2 創(chuàng)建圖表

??通過更改可視化類型和其他設(shè)置赁温,可以很靈活地對(duì)數(shù)據(jù)進(jìn)行探索性分析坛怪。若在探索的過程中發(fā)現(xiàn)某個(gè)有價(jià)值的點(diǎn),可以點(diǎn)擊左上角的 Save 按鈕股囊,在出現(xiàn)的彈出框中命名圖表并選擇是否將其添加到 dashboard袜匿,以將其保存為圖表:

??從頂部導(dǎo)航菜單的 Charts 進(jìn)入到圖表的列表頁(yè),找到剛剛創(chuàng)建的圖表:

??點(diǎn)擊圖表名稱進(jìn)入到剛才的可視化頁(yè)面稚疹,對(duì)已保存的圖表進(jìn)行再次編輯居灯。

5.3 創(chuàng)建 dashboard

??從頂部導(dǎo)航菜單的 Dashboards 進(jìn)入到 dashboard 的列表頁(yè),點(diǎn)擊右上角的綠色加號(hào)按鈕:

??點(diǎn)擊按鈕后内狗,將進(jìn)入添加 dashboard 的表單頁(yè)怪嫌,在該頁(yè)面依次填寫 dashboard 名稱和擁有者,再點(diǎn)擊 Save 按鈕柳沙,即可完成創(chuàng)建:

5.4 編輯 dashboard

??完成 dashboard 的創(chuàng)建后岩灭,將重定向到 dashboard 的列表頁(yè),找到剛創(chuàng)建的 dashboard:

??點(diǎn)擊 dashboard 的名稱赂鲤,進(jìn)入 dashboard噪径,此時(shí) dashboard 還未配置任何圖表,處于空值狀態(tài)数初,點(diǎn)擊右上角的 Edit dashboard 按鈕進(jìn)行編輯:

??進(jìn)入編輯狀態(tài)后找爱,可已導(dǎo)入圖表(僅限 dashboard 擁有者擁有的圖表)、標(biāo)簽頁(yè)泡孩、行车摄、列、標(biāo)題、Markdown 和分割線等組件:

??并可通過拖拽編輯 dashboard 的布局(在拖拽過程中吮播,Superset 還提供了輔助線和柵格進(jìn)行提示):

??Superset 還可以通過編輯 CSS 修改 dashboard 的樣式:

??在進(jìn)行編輯之后变屁,點(diǎn)擊 Save changes 按鈕,即可完成操作薄料。

6 SQL 查詢

??在使用 SQL 查詢前敞贡,需要進(jìn)行兩項(xiàng)設(shè)置:
??首先,從頂部導(dǎo)航菜單的 Sources — Databases 進(jìn)入數(shù)據(jù)庫(kù)的列表頁(yè)摄职,選中數(shù)據(jù)庫(kù)進(jìn)行編輯誊役,將 Expose in SQL Lab 和 Allow Run Sync 都勾選上,其余的不要勾選谷市。

??在勾選完上述兩項(xiàng)之后蛔垢,Windows 用戶還會(huì)出現(xiàn) “module" object has no attribute 'SIGALRM' 錯(cuò)誤,這又是由于 Windows 環(huán)境下依賴包不兼容導(dǎo)致的 —— Python 的 signal 包只作用于 Linux 和 Mac 迫悠,在 Windows 下不啟作用鹏漆。解決方法很簡(jiǎn)單粗暴,在 superset/utils.py 下找到相關(guān)代碼创泄,把 signal 所在行都注釋艺玲,然后再加上一個(gè) pass這塊代碼的功能是在超時(shí)后將查詢進(jìn)程殺掉,注釋后沒大影響)鞠抑。

    def __enter__(self):
        try:
            pass
            #signal.signal(signal.SIGALRM, self.handle_timeout)
            #signal.alarm(self.seconds)
        except ValueError as e:
            logging.warning("timeout can't be used in the current context")
            logging.exception(e)

    def __exit__(self, type, value, traceback):
        try:
            pass
            #signal.alarm(0)
        except ValueError as e:
            logging.warning("timeout can't be used in the current context")
            logging.exception(e)

??上面兩步做完后饭聚,即可在 SQL Lab — SQL Editor 進(jìn)行 SQL 查詢操作:

??可對(duì)查詢語(yǔ)句進(jìn)行執(zhí)行、保存搁拙、分享(復(fù)制)操作秒梳,還可以對(duì)查詢結(jié)果可以進(jìn)行可視化和導(dǎo)出為 CSV 文件。

7 安全性

??Superset 中的安全性由 Flask AppBuilder(FAB)處理(一個(gè)“簡(jiǎn)單快速的應(yīng)用程序開發(fā)框架箕速,構(gòu)建在Flask之上”)酪碘。FAB 提供身份驗(yàn)證、用戶管理盐茎、權(quán)限和角色兴垦,可參閱其安全文檔。角色由一組權(quán)限組成字柠,不同的用戶角色被賦予了不同的權(quán)限滑进,Superset 本身提供了一組基本角色:

  • Admin:擁有所有可能的權(quán)限,包括從其他用戶授予或撤消權(quán)限以及更改其他人的切片和 dashboard募谎。
  • Alpha:可以訪問所有數(shù)據(jù)源,但不能授予或撤消其他用戶的訪問權(quán)限阴汇。它們也僅限于改變它們擁有的對(duì)象数冬。可以添加和更改數(shù)據(jù)源。
  • Gamma:訪問受限拐纱,只能使用通過另一個(gè)互補(bǔ)角色獲得訪問權(quán)限的數(shù)據(jù)源铜异。他們只能查看由他們有權(quán)訪問的數(shù)據(jù)源制作的切片和 dashboard。無(wú)法更改或添加數(shù)據(jù)源秸架,但可以可以創(chuàng)建切片和 dashboard揍庄。
  • sql_lab:被授予對(duì) SQL Lab 的訪問權(quán)限。
  • public:可以通過在 superset\config.py 設(shè)置 PUBLIC_ROLE_LIKE_GAMMA = True东抹,授予該角色與 Gamma 角色相同的權(quán)限集蚂子。

在執(zhí)行 superset init 命令時(shí),所有這些基本角色將重新同步到初始值缭黔,因此不建議通過授予或撤消權(quán)限來更改這些基本角色食茎。

??這里不對(duì) Superset 的安全機(jī)制做過多展開,如果想了解更多馏谨,包括如何為用戶提供對(duì)特定數(shù)據(jù)集的訪問權(quán)限别渔,以及如何定制自己的角色,可以參閱官方的安全文檔惧互。

8 小結(jié)

??雖然 Superset 仍有著很多不足哎媚,例如:沒有提供圖表的下鉆功能、不支持多圖表間的復(fù)雜聯(lián)動(dòng)喊儡、處理大數(shù)據(jù)集效率較低拨与、權(quán)限管理和圖表管理的功能設(shè)計(jì)不友好等。但其作為一款輕量級(jí)的 BI 應(yīng)用管宵,對(duì)于個(gè)人開發(fā)者和中小型團(tuán)隊(duì)截珍,其不失為一個(gè)優(yōu)雅且高效的自助式數(shù)據(jù)分析解決方案。

Superset 的不足箩朴,一方面可以看后續(xù) Airbnb 會(huì)不會(huì)優(yōu)化岗喉,另一方面可以對(duì)其進(jìn)行二次開發(fā)。實(shí)際上炸庞,Superset 應(yīng)主要提供基于最終結(jié)果表的數(shù)據(jù)查詢和報(bào)表展示钱床,對(duì)于復(fù)雜的數(shù)據(jù)聯(lián)動(dòng),則放在 ETL 的過程中完成埠居。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末查牌,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子滥壕,更是在濱河造成了極大的恐慌纸颜,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绎橘,死亡現(xiàn)場(chǎng)離奇詭異胁孙,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門涮较,熙熙樓的掌柜王于貴愁眉苦臉地迎上來稠鼻,“玉大人,你說我怎么就攤上這事狂票『虺荩” “怎么了?”我有些...
    開封第一講書人閱讀 165,689評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵闺属,是天一觀的道長(zhǎng)慌盯。 經(jīng)常有香客問我,道長(zhǎng)屋剑,這世上最難降的妖魔是什么润匙? 我笑而不...
    開封第一講書人閱讀 58,925評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮唉匾,結(jié)果婚禮上孕讳,老公的妹妹穿的比我還像新娘。我一直安慰自己巍膘,他們只是感情好厂财,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,942評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著峡懈,像睡著了一般璃饱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肪康,一...
    開封第一講書人閱讀 51,727評(píng)論 1 305
  • 那天荚恶,我揣著相機(jī)與錄音,去河邊找鬼磷支。 笑死谒撼,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雾狈。 我是一名探鬼主播廓潜,決...
    沈念sama閱讀 40,447評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼善榛!你這毒婦竟也來了辩蛋?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,349評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤移盆,失蹤者是張志新(化名)和其女友劉穎悼院,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咒循,經(jīng)...
    沈念sama閱讀 45,820評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡据途,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,990評(píng)論 3 337
  • 正文 我和宋清朗相戀三年钮呀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片昨凡。...
    茶點(diǎn)故事閱讀 40,127評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蚁署,靈堂內(nèi)的尸體忽然破棺而出便脊,到底是詐尸還是另有隱情,我是刑警寧澤光戈,帶...
    沈念sama閱讀 35,812評(píng)論 5 346
  • 正文 年R本政府宣布哪痰,位于F島的核電站,受9級(jí)特大地震影響久妆,放射性物質(zhì)發(fā)生泄漏晌杰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,471評(píng)論 3 331
  • 文/蒙蒙 一筷弦、第九天 我趴在偏房一處隱蔽的房頂上張望肋演。 院中可真熱鬧,春花似錦烂琴、人聲如沸爹殊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)梗夸。三九已至,卻和暖如春号醉,著一層夾襖步出監(jiān)牢的瞬間反症,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工畔派, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留铅碍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,388評(píng)論 3 373
  • 正文 我出身青樓父虑,卻偏偏與公主長(zhǎng)得像该酗,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子士嚎,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,066評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 簡(jiǎn)介 曾用名Caravel, Panoramix, 是由Airbnb(知名在線房屋短租公司)開源的數(shù)據(jù)分析與可視化...
    大師兄愛上芭蕉扇閱讀 8,163評(píng)論 1 7
  • 1呜魄、通過CocoaPods安裝項(xiàng)目名稱項(xiàng)目信息 AFNetworking網(wǎng)絡(luò)請(qǐng)求組件 FMDB本地?cái)?shù)據(jù)庫(kù)組件 SD...
    陽(yáng)明先生_X自主閱讀 15,982評(píng)論 3 119
  • 一 、不是腦殘非主流才會(huì)整天感慨人生若只有初見 我生日快到了莱衩。我對(duì)著日歷一遍遍地?cái)?shù)著爵嗅。 還有十三天,我對(duì)晴芷說笨蚁。 ...
    九姑娘XBei閱讀 549評(píng)論 2 4
  • 此時(shí)身后的兩個(gè)男生在打王者榮耀睹晒,真的是一個(gè)很好的社交軟件趟庄,下午房間里的倆妹子也在玩,昨天看到了旁邊妹子游戲的推送伪很,...
    南來北往_小Anrt閱讀 415評(píng)論 0 0
  • 答:胃癌T2N0M0期屬于胃癌早中期戚啥,一般中醫(yī)藥便可治好,但為了安全起見锉试,最好先手術(shù)再中醫(yī)藥治療猫十,手術(shù)切除主病灶,...
    治療肺癌晚期肝癌的名老中醫(yī)閱讀 253評(píng)論 0 0