數據分析師如何應對數據庫取數後的離線分析

大多數公司都會專門爲數據分析單獨準備一個數據庫做日常分析,用來做數據查詢和人工分析後的結果存儲,日積月累,臨時表衆多,數據庫變得非常巨大,如果同時做多個查詢,經常需要等很久才能出結果,提升硬件性能又需額外昂貴的花費。

因爲缺乏好用工具的支持,數據分析人員的離線分析動作總是先由一個事先寫好的複雜查詢或經多步驟處理後臨時表導出的數據,之後在 Excel 中用 vlookup(),過濾器等來完成,當數據更新或範圍擴大後又要重新取數,重新在 Excel 中操作。如果能有一個桌面工具每次會實時讀取單表數據,既能完成上述複雜查詢和多步驟處理到臨時表的計算,又能取代在 Excel 中的計算動作,免除重複勞動,將會是很多數據分析人員的福音。

如果你會寫 SQL 或 VBA,非常在意獲取數據後能夠靈活的多次計算,而不是想用一個圖形界面工具完成有限的計算,又不想花費很多時間去學習 Python,集算器或許是一個不錯的選擇。

比如,數據庫裏有以下 3 張表:

SQL Query 1 result: (T1)

Col1 Col2 
A    1
B    2 

Query 2 result: (T2)

Col3 Col4 
1    #
2    * 

Query 3 result: (T3)

Col5   
1     
3 

需要對上面 T1,T2,T3 三張表,完成類似下面 SQL 的關聯操作:

 Select T1.col1,T2.col4 
        from T1,T2 
        where T1.col2=T2.col3 
        and T1.col2 in (Select T3.col5 from T3) 

結果是:

Col1  Col4
A    # 

如果數據量不大,直接內存計算,集算器 SPL 代碼如下:

T1=DB.query("select Col1,Col2 from T1")
T2=DB.query("select Col3,Col4 from T2")
T3=DB.query("select Col5 from T3")
Result=T1.join@i(Col2,T2:Col3,Col1,Col4).select(T3.(Col5).contain(Col2)).new(Col1,Col4)

T1,T2,T3 也可以分別來自不同的數據庫或者數據文件

如果數據量比較大,可以用集算器的遊標,和數據庫遊標類似,代碼如下:

CS1=DB.cursor("select Col1,Col2 from T1 orderby Col2")
CS2=DB.cursor("select Col3,Col4 from T2 orderby Col3")
S3=DB.query@i("select Col5 from T3")
Result=joinx(CS1,Col2;CS2,Col3).select(S3.contain(#1.Col2)).new(#1.Col1,#2.Col4).fetch()

如果想利用最終計算後的結果在 Excel 中做圖表,導出到 Excel 也很方便

file("Result.xlsx").xlsexport(Result)

集算器即裝即用,應對上述問題非常得心應手。集算器也支持先將大數據保存成本地文件,然後讀取這些類型已確定、已壓縮的數據做高效計算,這樣可以減輕數據庫的負載,也能讓本地計算效率更高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章