日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2025/3/15 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据按时间拆开分批处理示例 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

我現(xiàn)在的問題是有一個(gè)大的事實(shí)表,已經(jīng)有數(shù)十億條數(shù)據(jù),過來的臨時(shí)表需要merge進(jìn)去. 臨時(shí)表的大小也不確定,可能上十億也可能只有幾百幾千萬(wàn)而已.

如果直接讓這兩個(gè)表merge起來,則需要很大的內(nèi)存來進(jìn)行處理.所以我就想著把數(shù)據(jù)進(jìn)行按時(shí)間拆分的處理,然后merge進(jìn)去,

拆分的條件是如果臨時(shí)表的數(shù)據(jù)量大于三億條,我就按二億條左右一個(gè)批次進(jìn)行merge.

總體設(shè)計(jì)完的package是這樣的:

? ?

1.第一步,獲取總的行數(shù),然后分支下去進(jìn)行判斷.d大于三億則拆分,否則只執(zhí)行一次.

2.第二步,獲取拆分的數(shù)據(jù)信息,生成開始時(shí)間與結(jié)束時(shí)間列表.因?yàn)槲以L問的數(shù)據(jù)庫(kù)是vertica,語(yǔ)法與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

生成類似的結(jié)果集:

這一步我使用了一個(gè)Execute sql task對(duì)象,配置為返回Full Result Set,傳遞一個(gè)object類型的變量接收.

剛開始我的設(shè)計(jì)不是這樣的,我使用dataflowtask,然后里面一個(gè)ado.net source 去獲取數(shù)據(jù),傳遞給一個(gè)記錄集destination.但總是報(bào)如下的異常:

所以我就改用現(xiàn)在的設(shè)計(jì).

3.第三步就是使用一個(gè)Foreach look container,傳遞兩個(gè)變量去接收返回的startdateenddate.

接著就簡(jiǎn)單了,裝配tsql,傳遞 給一個(gè)Execute sql task 任務(wù).

轉(zhuǎn)載于:https://www.cnblogs.com/huaxiaoyao/p/3683245.html

總結(jié)

以上是生活随笔為你收集整理的数据按时间拆开分批处理示例的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。