作者evernever (Never)
看板Database
标题Re: [SQL ] 资料表合并问题
时间Thu Oct 22 20:45:40 2009
试试看...
Select t1.DataID, IsNull(t1.Value1,t2.Value1), IsNull(t1.Value2, t2.Value2)
From Temp1 t1
Join Temp2 t2 on t1.DataID = t2.DataID
※ 引述《Eleganse (王建民)》之铭言:
: 各位大大好,我先将专案目前的情况与遇到的难题简述如下。
: 我使用的是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: 203.158.41.245