zoukankan      html  css  js  c++  java
  • 数据按时间拆开分批处理示例

    我现在的问题是有一个大的事实表,已经有数十亿条数据,过来的临时表需要merge进去. 临时表的大小也不确定,可能上十亿也可能只有几百几千万而已.

    如果直接让这两个表merge起来,则需要很大的内存来进行处理.所以我就想着把数据进行按时间拆分的处理,然后merge进去,

    拆分的条件是如果临时表的数据量大于三亿条,我就按二亿条左右一个批次进行merge.

    总体设计完的package是这样的:

       

    1.第一步,获取总的行数,然后分支下去进行判断.d大于三亿则拆分,否则只执行一次.

    2.第二步,获取拆分的数据信息,生成开始时间与结束时间列表.因为我访问的数据库是vertica,语法与tsql略有差异.

    我的示例vsql如下:

    select

    min(yearmonthday)::varchar as startdate,

    timestampadd(day,1,max(yearmonthday))::varchar as enddate

    FROM

    (

    select

    sum(count(*)) over(order by run_strt_ts::timestamp::char(10)) as totalcount,

    floor(sum(count(*)) over(order by run_strt_ts::timestamp::char(10))/200000000) as lvl,

    run_strt_ts::timestamp::char(10)::timestamp as yearmonthday

    from schemaname.tablename

    group by run_strt_ts::timestamp::char(10)

    ) AS A

    group by lvl order by lvl

    生成类似的结果集:

    这一步我使用了一个Execute sql task对象,配置为返回Full Result Set,传递一个object类型的变量接收.

    刚开始我的设计不是这样的,我使用dataflowtask,然后里面一个ado.net source 去获取数据,传递给一个记录集destination.但总是报如下的异常:

    所以我就改用现在的设计.

    3.第三步就是使用一个Foreach look container,传递两个变量去接收返回的startdateenddate.

    接着就简单了,装配tsql,传递 给一个Execute sql task 任务.

    Looking for a job working at Home about MSBI
  • 相关阅读:
    接口框架项目示例
    接口框架开发流程总结
    requests库的简单使用
    使用flask创建简单的接口
    session和token
    解决log函数生成重复log的问题
    自定义封装logging参考
    织梦dedecms做的网站首页标题篡改跳转赌博网站解决方案
    织梦网站安全查杀
    织梦重置密码的方法和织梦网站后台登陆账号修改方法
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/3683245.html
Copyright © 2011-2022 走看看