• 数据按时间拆开分批处理示例


    我现在的问题是有一个大的事实表,已经有数十亿条数据,过来的临时表需要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
  • 相关阅读:
    Hive初识(一)
    图解HTTP总结(8)——确认访问用户身份的认证
    Android 7.0 照相 FileUriExposedException
    activity跳转的一些坑
    gopath配置
    android项目中记录
    一些趣味性总结(JAVA)
    http的response遇到illegalstateexception解决办法
    django demo
    Error:Execution failed for task ':app:transformClassesWithDexForDebug'解决方法
  • 原文地址:https://www.cnblogs.com/huaxiaoyao/p/3683245.html
Copyright © 2020-2023  润新知