2014-11-14 74 views
-1

我有两个数据集(1.9亿行和1亿行)。我需要找到将两者合并在一起而不重复行的最有效方法。我可以通过TSQL命令或SSIS过程来做到这一点。有没有人有任何输入/经验来确定完成这个过程的最有效方法是什么?TSQL大数据集合并

两个表具有相同的格式:

CREATE TABLE [dbo].[Table01]( 
    [StudentId] [char](10) NOT NULL, 
    [CollegeId] [char](6) NOT NULL, 
    [TermId] [char](3) NOT NULL, 
    [CourseId] [char](12) NULL, 
    [Title] [char](68) NULL, 
    [SectionId] [char](6) NULL, 
    [UnitsEarned] [decimal](5, 2) NULL, 
    [Grade] [char](3) NULL, 
    [CreditFlag] [char](1) NULL, 
    [UnitsAttempted] [decimal](5, 2) NULL, 
    [TopCode] [char](6) NULL, 
    [TransferStatus] [char](1) NULL, 
    [UnitsMax] [decimal](5, 2) NULL, 
    [BSStatus] [char](1) NULL, 
    [SamCode] [char](1) NULL, 
    [ClassCode] [char](1) NULL, 
    [CollegeLevel] [char](1) NULL, 
    [NCRCategory] [char](1) NULL, 
    [CCLongTermId] [char](5) NULL, 
    [batch_id] [int] NULL 
) 

这些是需要是不同的,以消除重复的字段:

[StudentId] 
[CollegeId] 
[TermId] 
[CourseId] 

将运行这种方法具有8个内核的服务器, 32GB RAM和SQL Server 2012.

+0

重复数据删除的经典问题是,在数据冲突的情况下,您会做什么?学生,大学,学期和课程都匹配,但一个来源指定CreditFlag是Y,另一个是N.哪个获胜?它总是赢吗?跨越所有领域?如果价值是在非权威来源中提供的,但在权威中不存在,该怎么办?当我从事市场营销工作时,即使不是“好”来源,我们也可以采用任何方式与您联系,我们可能会使用它来占领您。 – billinkc

+0

我完全同意你的看法。定义保存的内容和内容非常重要。但是,此数据集用于指标和KPI。重复可能是有害的。所以,如果记录有四列满足,它会保持。否则,需要将其放入队列中进行审查。 – mlawless

回答

1

在两个表上的所有4列上创建复合聚集索引。使用标准标识字段主键聚簇索引创建目标表,但在这4列上使用复合非聚簇索引。使用派生表插入到table01的目标表中,该派生表还暴露了ROW_NUMBER()OVER(PARTITION BY StudentId,CollegeId,TermId,CourseId),并过滤除ROW_NUMBER为1的行以外的所有行。这将删除table01。然后对table02执行相同的操作,但也可以使用NOT EXISTS来检查目标表以确保行不存在。