溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

大數(shù)據(jù)報表數(shù)據(jù)外置計算是怎樣的

發(fā)布時間:2022-01-15 15:26:01 來源:億速云 閱讀:112 作者:柒染 欄目:大數(shù)據(jù)

大數(shù)據(jù)報表數(shù)據(jù)外置計算是怎樣的,針對這個問題,這篇文章詳細介紹了相對應的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。

在報表應用中,針對歷史數(shù)據(jù)查詢的報表占比很大,這類報表的特點是:第一,數(shù)據(jù)變化小,查詢的歷史數(shù)據(jù)幾乎不會發(fā)生變化;第二,數(shù)據(jù)量大,而且還會隨時間不斷增加。如果這些歷史數(shù)據(jù)始終存放在數(shù)據(jù)庫中,由于大多數(shù)數(shù)據(jù)庫的 JDBC 性能都很低下(取數(shù)過程的數(shù)據(jù)對象轉換比從文件中讀取數(shù)據(jù)慢一個數(shù)量級),當涉及數(shù)據(jù)量較大或并發(fā)較多的時候,報表的性能會急劇下降。顯然,如果能將這些變化不大的歷史數(shù)據(jù)移出數(shù)據(jù)庫,采用文件系統(tǒng)存儲,就可以獲得比數(shù)據(jù)庫高得多的 IO 性能,從而提高報表的整體性能。

但是,報表并不能直接使用原始數(shù)據(jù),都需要運算(比如查詢匯總)之后再進行呈現(xiàn),而文件本身沒有計算能力,因此無法提供報表需要的結果。此外,使用文件存儲的數(shù)據(jù)量一般都很大,僅靠報表呈現(xiàn)端很難實現(xiàn)高效的計算。

對于潤乾報表來說,這種需求完全可以在內置集算引擎的幫助下做到,稱為庫外文件計算,或數(shù)據(jù)外置計算。所支持的文件類型包括:文本、Excel、JSON 格式文件等,還支持效率更高的二進制文件。

通過數(shù)據(jù)外置計算,將較大數(shù)據(jù)量的歷史數(shù)據(jù)從數(shù)據(jù)庫中剝離,除了可以滿足歷史查詢類報表的性能需求外,還可以實現(xiàn)混合數(shù)據(jù)源(文件 + 數(shù)據(jù)庫)的計算,進而實現(xiàn)大數(shù)據(jù)量的實時數(shù)據(jù)查詢,比如從文件系統(tǒng)中讀取往期大量的歷史數(shù)據(jù),從數(shù)據(jù)庫中讀取當期較小量的實時數(shù)據(jù)進行混合計算。由此,一方面可以避免數(shù)據(jù)庫的 IO 瓶頸,快速提升報表性能,增大數(shù)據(jù)查詢范圍;另一方面,將歷史數(shù)據(jù)移出,數(shù)據(jù)庫可以專注于保證業(yè)務系統(tǒng)數(shù)據(jù)的一致性,而不是耗費資源在大量的歷史查詢任務上,這也是一種數(shù)據(jù)庫優(yōu)化的手段。

下面用一個例子說明實現(xiàn)數(shù)據(jù)外置計算(結合集算器實現(xiàn))的步驟:

1、 將數(shù)據(jù)庫中歷史數(shù)據(jù)導出到文件

用戶可以自行選擇適當?shù)姆椒▽v史數(shù)據(jù)導出到文件,當然這個過程也可以使用集算器來做,比如將數(shù)據(jù)導出到文本。如果希望更高的性能,還可以使用比文本能快 2-5 倍的二進制文件格式。在集算器中使用以下代碼可將文本文件轉換成二進制格式。

file("E:/訂單明細.b").export@b(file(“E:/訂單明細.txt”.cursor())

2、 使用潤乾報表內置的集算引擎讀取數(shù)據(jù)文件

當數(shù)據(jù)外置后,潤乾報表可將文件作為數(shù)據(jù)源來設計報表,比如根據(jù)訂單明細按客戶統(tǒng)計訂單數(shù)量和訂單金額,由于原始訂單數(shù)據(jù)非常大,所以讀入文件時采用流式(文件游標)的方式逐步讀入。

腳本中使用的參數(shù)及其含義如下:

大數(shù)據(jù)報表數(shù)據(jù)外置計算是怎樣的

腳本:


A
1=file(“E:/ 訂單明細.txt”).cursor@t()
2=A1.select(貨主國家 ==county && 貨主地區(qū) ==area && 貨主城市 ==city && 訂購日期 >=begin && 訂購日期 <=end)
3=A2.groups(客戶 ID;count( 訂單 ID): 訂單數(shù)量,sum(訂單金額): 訂單總額 )
4return A3

代碼說明:

A1:通過文件游標采用流式處理的方式讀入大文本;

A2:按照指定的多個維度進行數(shù)據(jù)過濾,結果仍然是游標;

A3:根據(jù)選出的結果,按照客戶 ID 匯總訂單數(shù)量和訂單金額;

A4:為報表返回結果集。

前面提到,潤乾報表既可以針對單獨的文件(導出的歷史數(shù)據(jù))進行查詢計算,還可以進行文件 + 數(shù)據(jù)庫的混合運算,進行大數(shù)據(jù)量實時查詢。


A
1=file(“E:/ 訂單明細.txt”).cursor@t()
2=A1.select(訂購日期 >=begin && 訂購日期 <=end)
3=A2.groups(客戶 ID;count( 訂單 ID): 訂單數(shù)量,sum(訂單金額): 訂單金額 )
4=connect(“cmos”)
5=A4.cursor(“select 客戶 ID,count( 訂單 ID) 訂單數(shù)量,sum(訂單金額) 訂單金額 from 訂單明細 where 貨主國家 =? and 貨主地區(qū) =? and 貨主城市 =? and 訂購日期 >? and 訂購日期 <? group by 客戶 ID”,county,area,city,begin,end)
6=[A3,A5.fetch()].conj()
7>A4.close()
8=A6.groups(客戶 ID;sum( 訂單數(shù)量): 訂單總量,sum(訂單金額): 訂單總額 )
9return A7

代碼說明:

A1-A3:與上一個腳本一樣,匯總歷史數(shù)據(jù);

A5:根據(jù)指定參數(shù)執(zhí)行 sql,匯總當期數(shù)據(jù);

A6:將兩部分匯總數(shù)據(jù)合并(縱向拼接);

A8:根據(jù)合并后的歷史和當期匯總數(shù)據(jù)再次匯總,得到各客戶的訂單數(shù)量和訂單金額。

3 在潤乾報表中調用集算腳本,編輯報表表達式完成報表制作

數(shù)據(jù)集配置如下:

大數(shù)據(jù)報表數(shù)據(jù)外置計算是怎樣的

報表配置如下:

大數(shù)據(jù)報表數(shù)據(jù)外置計算是怎樣的

關于大數(shù)據(jù)報表數(shù)據(jù)外置計算是怎樣的問題的解答就分享到這里了,希望以上內容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關注億速云行業(yè)資訊頻道了解更多相關知識。

向AI問一下細節(jié)

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

AI