需求背景:
因xx需求要导出数据,研发给到一个A JOIN B JOIN C + dependent query 的复杂查询。直接查询的话,特别慢(可能小时级别都出不来结果)。分析了下这个查询中,如果在where条件中拼上个驱动表的索引列(例如主键列或者create_time列之类), 可以将join的数据集控制在一个很小的范围内。
这个方法有了后,我们可以用程序去跑,也可以用kettle去跑。
下面是用kettle 按天去跑的案例, 为了演示做了很多精简。
1、生成一个按天的序列(可以参考这个方法 http://blog.csdn.net/neweastsun/article/details/43866599)
2、将day传到查询sql中,得到某一个的数据集
3、将step2的数据集写到一个临时的表里面
4、重复执行step2、step3
5、最后将临时表的数据导出
job如下图:
注意的是,中文乱码的问题解决方法:
1、修改数据源的选项,加上字符集设置
2、修改kettle启动文件,以win环境下为例,修改 Spoon.bat ,增加如下: