数据分析师如何应对数据库取数后的离线分析

 

大多数公司都会专门为数据分析单独准备一个数据库做日常分析,用来做数据查询和人工分析后的结果存储,日积月累,临时表众多,数据库变得非常巨大,如果同时做多个查询,经常需要等很久才能出结果,提升硬件性能又需额外昂贵的花费。

因为缺乏好用工具的支持,数据分析人员的离线分析动作总是先由一个事先写好的复杂查询或经多步骤处理后临时表导出的数据,之后在 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)

集算器即装即用,应对上述问题非常得心应手。集算器也支持先将大数据保存成本地文件,然后读取这些类型已确定、已压缩的数据做高效计算,这样可以减轻数据库的负载,也能让本地计算效率更高。