0秒實現100年資料的自動生成的詳細教程

2021-12-30 09:44:57 字數 2077 閱讀 1457

做測試或者生成資料倉儲中的日期維度時,我們需要生成某一時間段的連續日期。大部分時候我們會用迴圈插入的方式來實現,但看了《high performance t-sql using window functions》的朋友可能會有另一種方式。

先是建立表結構,簡單的兩個字段,一是日期,二是週幾

create table dbo.dimtime(currentday datetime, currentdayofweek int)首先來看迴圈的方式:

declare @inc int = 0

declare @datebegin datetime = '1980-01-01'

while @datebegin <='2080-01-01'

begin

insert into dbo.dimtime(currentday , currentdayofweek )

values(@datebegin,datepart(dw,@datebegin))

set @datebegin = dateadd(day,1,@datebegin)

end(耗時 10s, 本機配了 2g記憶體,i3 cpu, ssd 硬碟,windows server 2012)

接下來是《high performance t-sql using window functions》中提到的 tally table 方式:

declare @begin datetime = '2010-01-01'

,@end datetime = '2017-10-30'

declare @inc int;

select @inc = datediff(day, @begin, @end);

with l0

as (

select *

from (

values (1)

,(2)

,(3)

) as t(c)

),l1

as (

select a.c

,b.c as bc

from l0 as a

cross join l0 as b

),l2

as (

select a.c

,b.c as bc

from l1 as a

cross join l1 as b

),l3

as (

select a.c

,b.c as bc

from l2 as a

cross join l2 as b

),l4

as (

select a.c

,b.c as bc

from l3 as a

cross join l3 as b

),l5

as (

select a.c

,b.c as bc

from l4 as a

cross join l4 as b

)insert into dbo.dimtime(currentday , currentdayofweek )

select top (@inc) dateadd(day, rnk - 1, @begin) as curr_date, datepart(dw, dateadd(day, rnk - 1, @begin)) as curr_dw

from (

select row_number() over (

order by (

select null

)) as rnk

from l5

) morder by rnk(同樣硬體配置下, 0s 插入100年資料)

比較兩種方法,時間上 tally table 佔了優勢,將原理部分單獨出來做個函式,還可以自動生成一段連續的數字或者測試資料集,用來解決自增列序號間斷的排查。

下面是對 tally table 原理的詳細描述,請移步

tally table 數字輔助表

所以不妨記錄下來,以後碰到有機會或者場景的時候,能隨手用上。不止一次呼籲廣大朋友們,讀書再多,也需要動動筆頭(現在動動手指記錄電子檔即可),記錄才是可靠的。

2023年資料中心的轉變與發展

在未來一年中,傳統上謹慎的資料中心市場將會出現重大轉變,這將對企業cio希望採用的技術和產品產生影響。在某個層面上,對於2017年的資料中心來說,其業務將是正常的,工作負載虛擬化將會持續,傳統整合,以及對於永無止境的追求更大效能和容量。除此之外,然而,越來越多的企業接受公共雲作為數位化轉型的關鍵組成...

超融合 2023年資料中心的那些事

2018 年的資料中心新聞集中 在超融合基礎設施 hci,hyper converged infrastructure 雲 cloud 和 人工智慧 ai,artificial intelligence 上 這些開發可以幫助管理員擴充套件其用於軟體定義的資料中心管理 雲設定和共享資源分配的工具集。以...

2023年資料加密的六大趨勢

2020年是網路安全技術 變革 的一年,是應對新挑戰和概念落地的一年。但是在最為關鍵的資料安全領域,加密技術相對穩定。到2021年,加密技術有望迎來重大變革,以下我們列出2021年值得關注的六大加密趨勢。隨著越來越多的元件融合在一起,基於雲的加密和金鑰管理廣泛應用趨勢將加速。企業對雲計算的態度越來越...