您好,登錄后才能下訂單哦!
這篇文章主要為大家分析了BIRT異構跨庫的動態關聯查詢該怎樣做的相關知識點,內容詳細易懂,操作細節合理,具有一定參考價值。如果感興趣的話,不妨跟著跟隨小編一起來看看,下面跟著小編一起深入學習“BIRT異構跨庫的動態關聯查詢該怎樣做”的知識吧。
BIRT自帶的Data Sources Join以及用ETL轉化為同庫等方案都難以解決此類問題。具體可以通過如下示例討論:
交易明細數據(trade表)存儲于生產系統的數據庫DB2中,另外一部分業務數據(network表、account表)存儲于業務系統的Mysql中,它們其中的關聯關系如下圖所示:
所謂“動態關聯”,是指用戶在前臺界面輸入參數,報表通過參數來決定trade和哪張表做關聯,并在報表中顯示關聯后的數據,實際運算中可能還要進行數據過濾和匯總。查詢流程如下圖所示:
比如查詢場景一:報表根據傳入參數,能動態地將trade中的outAccount字段和account中的accountNo字段關聯,最后查詢結果顯示trade中的所有字段以及account的name,gender,city等字段。
解決此類問題的常見方案與不足,分析如下:
1、BIRT Data Sources Join的問題在于要求表名和字段名是已知、確定的,但這類報表都是通過參數來動態關聯的,因此無法實現。
2、可以用ETL把生產庫的數據抽取到業務庫,這樣跨庫的問題就轉化為同庫了。這個方案思路簡單但實施起來細節上有很多難點。首先是實時查詢:為了實時查詢數據,需要在生產庫使用觸發器之類的功能來檢測數據的實時變化,并將數據推送到業務庫,但生產庫不能輕易改動,因此實時查詢就無法實現。非實時查詢也難以辦到,這是因為生產庫的數據極其龐大,不可能每次都全部取過來,只有用增量抽取的辦法,而判斷增量就需要在trade表中加入時間戳字段。同樣,生產庫是不允許有這種改動的,因此也無法實現。
3、從能力上講,BIRT JAVA bean data source是真正能解決報表問題,它比Data Sources Join更具靈活性,也不需要修改生產庫。但這個方案只有一個缺陷:代碼過于復雜,原因在于數據計算并非JAVA特長,若每次遇到跨庫問題都用硬編碼方式來實現,并不現實。
建議使用集算器,它是獨立的數據計算引擎,擁有不依賴于數據庫的計算能力,支持異構數據源的混合運算,比較適合進行動態關聯再計算,事實上,可以把集算器看作是語法更簡單的BIRT JAVA bean data source。比如實現上面的問題,集算器腳本只需6行:
A | |
1 | =DB2.query("select runningNo,networkNo,outAccount,amount from trade") |
2 | ="select"+crossJoinField+","+crossOtherFields+"from"+crossTable |
3 | =Mysql.query(A2) |
4 | =join(A1:trade,${tradeJoinField};A3:cross,${crossJoinField}) |
5 | =crossOtherFields.array().("cross."+~).string() |
6 | =A4.new(trade.runningNo,trade.networkNo,trade.outAccount,trade.amount,${A5}) |
其中 tradeJoinField,crossJoinField,crossOtherFields,crossTable 為輸入參數。最后將計算結果返回給BIRT的DataSet進行報表展現。從此示例來看,集算器的參數用法很靈活,非常適合這類動態關聯查詢。由于它是專門的計算語言,所以較于常規辦法,跨庫計算的代碼更加精煉易懂。
關于“BIRT異構跨庫的動態關聯查詢該怎樣做”就介紹到這了,更多相關內容可以搜索億速云以前的文章,希望能夠幫助大家答疑解惑,請多多支持億速云網站!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。