当前位置: 首页 > news >正文

BI-SQL丨两表差异比较

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;

结果如下:

http://www.lryc.cn/news/101224.html

相关文章:

  • ZooKeeper 选举的过半机制防止脑裂
  • 【图论】树上差分(边差分)
  • RT1052的定时器
  • opencv python 训练自己的分类器
  • 详解Mybatis之分页插件【PageHelper】
  • 【基于矢量射线的衍射积分 (VRBDI)】基于矢量射线的衍射积分 (VRBDI) 和仿真工具(Matlab代码实现)
  • 基于jackson对bean的序列号和反序列化
  • 排队理论简介
  • 极速查找(3)-算法分析
  • http 常见的响应状态码 ?
  • 机器学习笔记之优化算法(四)线搜索方法(步长角度;非精确搜索)
  • Redis 哨兵 (sentinel)
  • 统计2021年10月每个退货率不大于0.5的商品各项指标
  • 【小波尺度谱】从分段离散小波变换计算小波尺度谱研究(Matlab代码实现)
  • UE5、CesiumForUnreal加载无高度地形
  • 关于Spring中的@Configuration中的proxyBeanMethods属性
  • dp1,ACM暑期培训
  • 大厂程序员的水平比非大厂高很多嘛?
  • Java开发工具MyEclipse发布v2023.1.2,今年第二个修复版!
  • 基于正交滤波器组的语音DPCM编解码算法matlab仿真
  • VS2022和QT混合编程打包发布程序
  • Filebeat学习笔记
  • 【实战】 九、深入React 状态管理与Redux机制(一) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(十六)
  • 第九十五回 如何使用dio的转换器
  • Python深度学习“四大名著”之一【赠书活动|第二期《Python机器学习:基于PyTorch和Scikit-Learn》】
  • RAID相关知识
  • DataStructure--Basic
  • Intellij IDEA 双击启动报错ClassNotFoundException: com.licel.b.z@
  • 使用 Logstash 及 enrich processor 实现数据丰富自动化
  • Django模板语法和请求