厦门网站建设厦门,电子书网站用dz还是wordpress,青岛网络服务公司,怎样建立企业网站BOSS#xff1a;哎#xff0c;白茶#xff0c;我们最近新上了一个系统#xff0c;后续有一些数据要进行源切换#xff0c;这个能整么#xff1f; 白茶#xff1a;没问题#xff0c;可以整#xff01; BOSS#xff1a;哦#xff0c;对了#xff0c;差点忘记告诉你了… BOSS哎白茶我们最近新上了一个系统后续有一些数据要进行源切换这个能整么 白茶没问题可以整 BOSS哦对了差点忘记告诉你了新系统没有进行过数据校验所以切换之前需要你处理一下这个能整不 白茶#*%能 数仓在运维过程中难免会遇到数据源切换或者是方案调整的情况。 要知道对于数仓来说数据的准确性是非常重要的也是衡量数仓是否可用的标准之一。 那么当某些表数据源发生变动时我们该如何快速进行数据差异比较呢 面对这种情况我们可以使用EXCEPT和INTERSECT来解决这一问题。
概念介绍
EXCEPT是用来比较两个表之间的数据差返回的结果集为在第一个表中存在且在第二个表中不存在的数据INTERSECT是用来获取两个表之间的数据交集返回的结果集为两个表中相同的部分。
使用条件 1.被比较的两个表列数和列名顺序需要一致 2.被比较的两个表数据类型可以不一致但是需要兼容 3.被比较的两个表中不能存在不可被比较的数据类型。
使用实例
案例数据 利用如下SQL语句在数仓中构建案例数据。
CREATE TABLE [dbo].[BaiCha1]([LB_Name] [nvarchar](20) NULL,[LB_Value] [nvarchar](255) NULL
)
GO
;INSERT INTO[dbo].[BaiCha1]
VALUES
(A, 1)
GO
;CREATE TABLE [dbo].[BaiCha2]([LB_Name] [nvarchar](20) NULL,[LB_Value] [nvarchar](255) NULL
)
GO
;INSERT INTO[dbo].[BaiCha2]
VALUES
(A, 1),(B, 2)
GO
;CREATE TABLE [dbo].[BaiCha3]([LB_Name] [nvarchar](20) NULL,[LB_Value] [nvarchar](255) NULL
)
GO
;INSERT INTO[dbo].[BaiCha3]
VALUES
(A, 1),(B, 2)
GO
;结果如下
例子1 利用EXCEPT比较3张表之间的差异。
SELECT*
FROMBaiCha2EXCEPT
SELECT*
FROMBaiCha1
GO
;SELECT*
FROMBaiCha2EXCEPT
SELECT*
FROMBaiCha3
GO
;结果如下
例子2 利用INTERSECT比较3张表之间的差异。
SELECT*
FROMBaiCha2
INTERSECT
SELECT*
FROMBaiCha1
GO
;SELECT*
FROMBaiCha2
INTERSECT
SELECT*
FROMBaiCha3
GO
;结果如下
例子3 在实际应用中我们也可以换一种写法直接输出结果计数这种方法叫做减法归零。这里我们使用BaiCha1和BaiCha2进行举例。
SELECT COUNT(*) AS T1_NOT_T2_Count
FROM ( SELECT *FROM [dbo].[BaiCha1]EXCEPTSELECT *FROM [dbo].[BaiCha2]) AS T;SELECT COUNT(*) AS T2_NOT_T1_Count
FROM ( SELECT *FROM [dbo].[BaiCha2]EXCEPTSELECT *FROM [dbo].[BaiCha1]) AS T;结果如下