最近在运行Informatica全量抽取时候,系统报了很多莫名的错误,日志也没有显示警告信息。按有限的日志信息查询,可能的原因一般是磁盘空间不够,内存不够,或者是数据量量太大,缓存爆了。
经排查,是加载的数据量过大,导致了数据加载的失败。
只好通过限制每次的加载数量,分批多次进行跑数据了。
业务系统使用的是Mysql数据库,因此在ODS层抽数时候,使用LIMIT语句限制数量。
LIMIT后面可以跟一个或者两个整数常量,如果跟两个整数的话,第一个整数用于指定第一个返回结果的偏移量,第二整数用于指定返回结果的条目数。但值得注意的是第一个结果的偏移量是0(而不是1),所以如果您只关心结果的第一个,那么可用如下语句实现。
select * from table limit 0,1;
如果LIMIT只跟着一个整数n的话,表示只搜索前n个记录。所以limit n 等价于 limit 0,n。
如果是两个整数,类推。
select * from table limit 7,-1; //搜索记录行 8到最后一行
select * from table limit 7; //搜索前7行记录
select * from table limit 0,7; //跟上一条命令等价,搜索前7行记录
因此最后决定通过用Bluk方式,一次加载500w
select * from table limit 0,5000000; //搜索记录行 1-5000000
select * from table limit 5000000,10000000; //搜索记录行 5000001-10000000
......