数据按时间拆开分批处理示例
我現在的問題是有一個大的事實表,已經有數十億條數據,過來的臨時表需要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,傳遞兩個變量去接收返回的startdate與enddate.
接著就簡單了,裝配tsql,傳遞 給一個Execute sql task 任務.
轉載于:https://www.cnblogs.com/huaxiaoyao/p/3683245.html
總結
以上是生活随笔為你收集整理的数据按时间拆开分批处理示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 初步学习pg_control文件之八
- 下一篇: pdftk的使用介绍