[SQL ] 資料表合併問題

看板Database作者 (王建民)時間14年前 (2009/10/22 15:51), 編輯推噓1(103)
留言4則, 2人參與, 最新討論串1/2 (看更多)
各位大大好,我先將專案目前的情況與遇到的難題簡述如下。 我使用的是Microsoft SQL 有一個資料表(Table.Data),每隔數日必須接收數億筆數據資料。 它的欄位可以下方表示。 =============================================== Table.Data 共三欄 欄位名 Col.DataID Col.Value1 Col.Value2 型態 int float float =============================================== 又Value1與Value2 的數據來源為不同儀器,因此資料集的初始狀態如下(示例) (實際上是14欄共14種儀器) ==================================== Table.Temp1(暫存表格) Col.DataID Col.Value1 Col.Value2 1 0.000001 NULL 2 0.000002 NULL ... ... ... (數億筆) ==================================== ==================================== Table.Temp2(暫存表格) Col.DataID Col.Value1 Col.Value2 1 NULL 0.999999 2 NULL 0.999998 ... ... ... (數億筆但筆數會與Temp1相同) ==================================== 前提是我已運用1.Comparision(壓縮方法) 2.資料表分割方法 3.建立索引 建立此表(Table.Data), 我打算不管裡面的數據資料成長得多大,都放在同一張表格裡, 以便於查詢與後續數據分析工作。 首先遇到的第一個難題,是如何在原本已有數十億筆資料的表格中, "非常有效率地"再插入數億筆資料? 我想到sqlbulkcopy方法,但bcp方法的限制為,"原先的表格必須是空的", 所以我想到一個解決方法: 就是先建立一個暫存表格存最新數據,再將舊表與暫存表格合併起來, 但是表格的合併問題讓我很苦惱, 我查了union與join兩種方法, union方法會讓數據集變成下面的長相 Col.DataID Col.Value1 Col.Value2 1 0.000001 NULL 1 NULL 0.999999 2 0.000002 NULL 2 NULL 0.999998 而full join方法會讓數據集 Col.DataID Col.Value1 Col.Value2 Col.DataID Col.Value1 Col.Value2 1 0.000001 NULL 1 NULL 0.999999 2 0.000002 NULL 2 NULL 0.999998 兩種都不是我要的 Col.DataID Col.Value1 Col.Value2 1 0.000001 0.999999 2 0.000002 0.999998 最終長相。 所以可否請教各位大大 1.用什麼TQL指令的結合,可以正確生成我要的最終表格樣貌? 2.回歸本問題的前點,我硬將數十億筆資料塞進一張表中, 會不會造成什麼無法預期的後果?(在我已經將該表效率最佳化的情況下) 3.回歸到本問題的初始狀態,是否有其它通行的解決方法, 可以解決"在數十億筆資料中再插入數億筆資料"的存取效率方法? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.61.67

10/22 16:04, , 1F
問題1已由爬文2137篇自行解決
10/22 16:04, 1F

10/22 16:50, , 2F
問題1... 你為甚麼不用 update 的方式?
10/22 16:50, 2F

10/22 16:51, , 3F
是說,我有點看不懂你的問題 Orz
10/22 16:51, 3F

10/22 17:33, , 4F
不用UPDATE是因為我的資料筆數太大 我用BCP方法插入資料
10/22 17:33, 4F
文章代碼(AID): #1Au0xte9 (Database)
文章代碼(AID): #1Au0xte9 (Database)