LinkisJDBC是怎么適配Tableau

這篇文章主要介紹“Linkis JDBC是怎么適配Tableau”,在日常操作中,相信很多人在Linkis JDBC是怎么適配Tableau問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”Linkis JDBC是怎么適配Tableau”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長期合作伙伴,公司提供的服務(wù)項(xiàng)目有:申請(qǐng)域名、網(wǎng)站空間、營銷軟件、網(wǎng)站建設(shè)、昌黎網(wǎng)站維護(hù)、網(wǎng)站推廣。

01

背景介紹

----為什么我們需要Linkis JDBC去兼容Tableau?

毫無疑問,Tableau在當(dāng)今商業(yè)化BI產(chǎn)品中有著廣泛的客戶群體,很多商業(yè)機(jī)構(gòu)使用Tableau進(jìn)行數(shù)據(jù)分析和構(gòu)建報(bào)表,支持Tableau的兼容方案可以使不懂java的數(shù)據(jù)分析人員依靠托拉拽的可視化方式向Linkis提交任務(wù)。無論對(duì)于用戶還是Linkis,實(shí)現(xiàn)Tableau兼容都是非常值得去做的一件事。

對(duì)于用戶來說,使用JDBC的開發(fā)人員必須掌握J(rèn)DBC的使用方法,這種限制增加了分析人員的學(xué)習(xí)成本,為了豐富用戶的使用場(chǎng)景,不僅僅依靠java api的方式去構(gòu)建代碼與Linkis互動(dòng),兼容可視化BI工具的想法應(yīng)運(yùn)而生,而Tableau正是這一想法的其中一個(gè)實(shí)現(xiàn)目標(biāo)。

對(duì)于Linkis來說,Linkis項(xiàng)目誕生之時(shí)便有“連接一切”的愿景,實(shí)現(xiàn)豐富的底層計(jì)算存儲(chǔ)組件的支持和滿足多樣的上層應(yīng)用接入,通過JDBC的方式連接Linkis拓展了自身的適用場(chǎng)景,將Linkis JDBC適配Tableau本身也是拓展用戶群體的一種體現(xiàn)。

----應(yīng)該如何去實(shí)現(xiàn)這一目標(biāo)?    
Tableau中提供了大量的數(shù)據(jù)源支持,而這些支持都是需要驅(qū)動(dòng)類來實(shí)現(xiàn)的,例如MySQL、Hive等數(shù)據(jù)庫的JDBC Driver,只需要數(shù)據(jù)源廠商定制滿足Tableau接口規(guī)范的模組文件就能在Tableau中制定可插拔的數(shù)據(jù)源連接器。
Linkis JDBC是怎么適配Tableau    
圖2-1 Tableau中已經(jīng)適配的數(shù)據(jù)源        

       

       
02          
       
—          
       
使用案例    

   
Tableau的適配方法在第三章中會(huì)詳細(xì)介紹,在介紹適配方法之前,我們先來一起體驗(yàn)一下適配后的Tableau如何通過JDBC輕松地聯(lián)動(dòng)Linkis。

   
(1)連接數(shù)據(jù)源    

   
在適配好了Tableau之后,我們啟動(dòng)Tableau,可以看到“連接”      ->“服務(wù)器”      ->“更多”的列表中已經(jīng)有了Linkis。
Linkis JDBC是怎么適配Tableau
圖2-1 服務(wù)器列表中已經(jīng)有了Linkis
點(diǎn)擊后彈出對(duì)話框需要填寫數(shù)據(jù)源的相關(guān)配置,包含服務(wù)器的主機(jī)IP、端口、數(shù)據(jù)庫、用戶名及密碼。這里的主機(jī)ip需要填寫部署Linkis的服務(wù)器ip,端口是gateway的服務(wù)端口,數(shù)據(jù)庫是Hive的數(shù)據(jù)庫,需要注意的是,用戶名是具有訪問Linkis權(quán)限的用戶,而不是數(shù)據(jù)庫的用戶,因?yàn)楸举|(zhì)上是用戶名和密碼需要經(jīng)過gateway服務(wù)進(jìn)行登錄和權(quán)限校驗(yàn)。
Linkis JDBC是怎么適配Tableau
圖2-2 通過Linkis JDBC連接到Linkis
填寫好相關(guān)數(shù)據(jù)點(diǎn)擊登錄即可。

(2)查看數(shù)據(jù)庫并提交Linkis任務(wù)

登錄后頁面會(huì)自動(dòng)跳轉(zhuǎn),左側(cè)一欄展示當(dāng)前數(shù)據(jù)庫所有的Hive表信息
Linkis JDBC是怎么適配Tableau
圖2-3 登錄后的使用界面
我們來試一下查詢表的具體數(shù)據(jù),這里使用的是testjohn1表,點(diǎn)擊表右側(cè)的按鈕即可快速查詢。
Linkis JDBC是怎么適配Tableau
圖2-4 查詢表數(shù)據(jù)按鈕
Linkis JDBC是怎么適配Tableau
圖2-5 查詢結(jié)果
從圖2-5可以看出,tableau已經(jīng)成功提交SQL任務(wù)到Linkis執(zhí)行,并將返回的結(jié)果集解析成表展示給用戶。我們從dss(DataSphere Studio)的管理臺(tái)可以查看到該任務(wù)的提交和執(zhí)行情況。在后續(xù)linkis1.0的版本中也將可以通過linkis的管理臺(tái)直接查看任務(wù)的提交和執(zhí)行情況。
Linkis JDBC是怎么適配Tableau
圖2-6 dss管理臺(tái)任務(wù)執(zhí)行情況
這里介紹了在Tableau使用Linkis JDBC提交任務(wù)到Linkis的具體案例,用戶可以實(shí)現(xiàn)零代碼編寫使用Linkis,下面將介紹Tableau兼容方案的具體實(shí)現(xiàn)方式,會(huì)較為詳細(xì)地介紹文件的作用和生成細(xì)節(jié)。


03    
—      
   
兼容Tableau的具體實(shí)現(xiàn)

為了實(shí)現(xiàn)將Linkis的JDBC驅(qū)動(dòng)加入到服務(wù)器列表中實(shí)現(xiàn)適配,我們需要自定義修改Tableau的適配文件,適配文件包含Manifest(.xml文件)、Tableau Custom Dialog file(.tcd文件)、Tableau ConnectionResolver file(.tcr文件)、Tableau Dialect file(.tdd)、connectionBuilder(.js文件)以及Connection Properties(.js文件)這六個(gè)文件[2],下面將逐一介紹。

(1)定義JDBC展示屬性的Manifest

Manifest文件的主要作用是用于定義連接器名字,用于在可用的數(shù)據(jù)源UI頁面展示給用戶,該文件對(duì)于每個(gè)客制化連接器來說是必選的,同樣地,在linkis的JDBC方案中,該文件也進(jìn)行了修改與適配。

<?xml version='1.0' encoding='utf-8' ?><connector-plugin class='linkis_jdbc' superclass='jdbc' plugin-version='1.0' name='Linkis (JDBC)' version='2020.1.0'>  <vendor-information>    <company name="Linkis"/>    <support-link url="https://github.com/WeBankFinTech/Linkis"/>  </vendor-information>  <connection-customization class="linkis_jdbc" enabled="true" version='2020.1.0'>    <vendor name="linkis"/>    <driver name="Linkis JDBC Driver"/>    <customizations>      <customization name="CAP_JDBC_METADATA_READ_PRIMARYKEYS" value="no"/>      <customization name="CAP_JDBC_METADATA_READ_FOREIGNKEYS" value="no"/>      <customization name="CAP_JDBC_QUERY_ASYNC" value="yes"/>      <customization name="CAP_JDBC_QUERY_CANCEL" value="yes"/>      <customization name="CAP_FAST_METADATA" value="yes"/>      <customization name="CAP_SELECT_INTO" value="no"/>      <customization name="CAP_SELECT_TOP_INTO" value="no"/>      <customization name="CAP_CREATE_TEMP_TABLES" value="no"/>      <customization name="CAP_QUERY_BOOLEXPR_TO_INTEXPR" value="no"/>      <customization name="CAP_QUERY_GROUP_BY_DEGREE" value="no"/>      <customization name="CAP_QUERY_SORT_BY_DEGREE" value="no"/>      <customization name="CAP_QUERY_SUBQUERIES" value="yes"/>      <customization name="CAP_QUERY_TOPSTYLE_LIMIT" value="yes"/>      <customization name="CAP_QUERY_WHERE_FALSE_METADATA" value="yes"/>      <customization name="CAP_QUERY_SUBQUERIES_WITH_TOP" value="yes"/>      <customization name="CAP_SUPPORTS_SPLIT_FROM_LEFT" value="yes"/>      <customization name="CAP_SUPPORTS_SPLIT_FROM_RIGHT" value="yes"/>      <customization name="CAP_SUPPORTS_UNION" value="yes"/>      <customization name="CAP_QUERY_ALLOW_PARTIAL_AGGREGATION" value="no"/>      <customization name="CAP_QUERY_HAVING_REQUIRES_GROUP_BY" value="yes"/>    <customization name='CAP_JDBC_SUPPRESS_ENUMERATE_DATABASES' value='yes' />    <customization name='CAP_JDBC_SUPPRESS_ENUMERATE_SCHEMAS' value='yes' />    <customization name='CAP_QUERY_TOP_N' value='no' />    </customizations>  </connection-customization>   <connection-dialog file='connection-dialog.tcd'/>  <connection-resolver file="connectionResolver.tdr"/>  <dialect file='dialect.tdd'/></connector-plugin>

其中class的標(biāo)簽值必須是唯一的,可以用于其他連接器中.xml文件的尋址、客制化定制以及Tableau工作簿中匹配連接器。
name值在Tableau 連接器窗格中顯示連接器名稱,還可以指定供應(yīng)商信息。
company name用于在Tableau 連接器窗格中的連接器名旁邊顯示,可以展示連接器的創(chuàng)建者,也就是connector name by company name,例如Linkis JDBC Driverby linkis。
customizationname主要用于定制Linkis中JDBC的功能。

(2)用于定制連接器對(duì)話框的tcd文件

Tableau CustomDialog file即tcd文件,該文件是可選的,主要用于定制連接器對(duì)話框的內(nèi)容。

   
   
   <connection-dialog class='linkis_jdbc'>
      <connection-config>
        <authentication-mode value='Basic' />
        <authentication-options>
          <option name="UsernameAndPassword" default="true" />
        </authentication-options>
        <db-name-prompt value="Database: " />
        <has-pre-connect-database value="true" />
        <port-prompt value="Port: " default="9001" />
        <show-ssl-checkbox value="true" />
      </connection-config>
    </connection-dialog>

(3)用于解析連接器的tcr文件

解析器tcr用于Tableau創(chuàng)建連接時(shí)尋找Connection文件,配置如下:

<?xml version='1.0' encoding='utf-8' ?><tdr class='linkis_jdbc'>  <connection-resolver>    <connection-builder>      <script file='connectionBuilder.js'/>    </connection-builder>    <connection-normalizer>      <required-attributes>        <setImpersonateAttributes/>        <attribute-list>          <attr>server</attr>          <attr>port</attr>          <attr>dbname</attr>          <attr>username</attr>          <attr>password</attr>          <attr>sslmode</attr>        </attribute-list>      </required-attributes>    </connection-normalizer>    <connection-properties>      <script file='connectionProperties.js'/>    </connection-properties>  </connection-resolver></tdr>

?


這里指定了connection-builder和connection-properties的文件名,以及連接器連接時(shí)的必要屬性,Tableau會(huì)將用戶填寫的這些數(shù)據(jù)信息組裝成URL字符串用于建立連接。

(4)定制SQL方言的tdd文件

SQL方言是指的不同數(shù)據(jù)庫之間的命令字不同,為了使Tableau兼容數(shù)據(jù)源,需要對(duì)數(shù)據(jù)源的方言進(jìn)行轉(zhuǎn)換,由于篇幅原因,這里只列出部分tdd文件的數(shù)據(jù):

<dialect name='HiveDialectSDK'         base='HiveDialect'         class='linkis_jdbc'         version='18.1'>  <function-map> <function group='numeric' name='LN' return-type='real'>      <formula>(CASE WHEN %1 &gt; 0 THEN LN(%1) ELSE CAST(NULL AS DOUBLE) END)</formula>      <argument type='real' />    </function>    <function group='numeric' name='LOG' return-type='real'>      <formula>(CASE WHEN %1 &gt; 0 THEN LOG10(%1) ELSE CAST(NULL AS DOUBLE) END)</formula>      <argument type='real' />    </function>    <function group='numeric' name='LOG' return-type='real'>      <formula>(CASE WHEN %1 &gt; 0 THEN LOG10(%1) / LOG10(%2) ELSE NULL END)</formula>      <argument type='real' />      <argument type='real' />    </function>    <function group='numeric' name='MAX' return-type='real'>      <formula>(CASE&#10;&#9;WHEN (%1 IS NULL) OR (%2 IS NULL) THEN NULL&#10;&#9;WHEN %1 &gt; %2 THEN %1&#10;&#9;ELSE %2 END)</formula>      <argument type='real' />      <argument type='real' />    </function>    <function group='numeric' name='MAX' return-type='int'>      <formula>(CASE&#10;&#9;WHEN (%1 IS NULL) OR (%2 IS NULL) THEN NULL&#10;&#9;WHEN %1 &gt; %2 THEN %1&#10;&#9;ELSE %2 END)</formula>      <argument type='int' />      <argument type='int' />    </function>  </function-map></dialect>
完整的SQL方言文檔可以參考
https://github.com/tableau/connector-plugin-sdk/blob/master/samples/plugins/postgres_jdbc/dialect.tdd

(5)連接器的構(gòu)造器connectionBuilder

Tableau使用連接構(gòu)造器(Linkis JDBC中的腳本名為connectionBuilder.js)創(chuàng)建JDBC連接URL的字符串,腳本映射定義連接配置方式的屬性,在這里數(shù)據(jù)庫地址、端口、以及數(shù)據(jù)庫名構(gòu)造成JDBC連接字符串傳給驅(qū)動(dòng)程序。
文件具體內(nèi)容如下:

(function dsbuilder(attr) {    var urlBuilder = "jdbc:linkis://" + attr[connectionHelper.attributeServer] + ":" + attr[connectionHelper.attributePort] + "/" + attr[connectionHelper.attributeDatabase];
   return [urlBuilder];})

?


(6)連接器的參數(shù)配置文件Connection Properties

該參數(shù)配置文件是可選的,僅僅當(dāng)數(shù)據(jù)源驅(qū)動(dòng)是JDBC時(shí)才需要(Linkis JDBC中的腳本名為connectionProperties.js),用于構(gòu)建URL最后的參數(shù)設(shè)置。

(function propertiesbuilder(attr) {    var props = {};    props["user"] = attr[connectionHelper.attributeUsername];    props["password"] = attr[connectionHelper.attributePassword];    if (attr[connectionHelper.attributeSSLMode] == "require") {        props["ssl"] = "true";        props["sslmode"] = "require";    }
   return props;})

?


(7)打包裝入Tableau完成適配

方法一:自定義連接器插件裝載路徑(已驗(yàn)證可行)
首先我們將前面六個(gè)文件裝入目錄linkis_jdbc目錄(該目錄名應(yīng)該和Mainfest中的class='linkis_jdbc'是一致的),該目錄位于C:\connectors,文件目錄層級(jí)如下圖所示:
Linkis JDBC是怎么適配Tableau
圖3-1 適配文件路徑

上述路徑和文件名是自定義的,不必和本文章完全一致,在啟動(dòng)時(shí)我們需要添加額外參數(shù)-DConnectPluginsPath=/Path定向加載適配文件。在CMD命令行中輸入

E:\tableau\bin\tableau.exe  -DConnectPluginsPath=C:\connectors

其中E:\tableau\bin\tableau.exe是Tableau的運(yùn)行路徑。也可以在Tableau快捷方式中指定運(yùn)行參數(shù),這樣就可以避免每次通過命令行啟動(dòng)。

Linkis JDBC是怎么適配Tableau

圖3-2 指定運(yùn)行參數(shù)

方法二:通過官方文檔構(gòu)建(嘗試過未成功,可能方法有誤)
該種方法是通過構(gòu)造.taco文件存入Tableau的數(shù)據(jù)源根目錄,實(shí)現(xiàn)具體方法可以參考[1] 。
我們通過第一種方法完成了適配,在適配好了Tableau之后,我們啟動(dòng)Tableau,可以看到“連接”->“服務(wù)器”->“更多”的列表中已經(jīng)有了Linkis JDBC。
Linkis JDBC是怎么適配Tableau
圖3-3 適配成功     

到此,關(guān)于“Linkis JDBC是怎么適配Tableau”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

當(dāng)前題目:LinkisJDBC是怎么適配Tableau
本文鏈接:http://muchs.cn/article0/gppioo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)、建站公司、App開發(fā)、云服務(wù)器、定制開發(fā)定制網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)