数据库sql去重操作 + 人大金仓案例

简介: 一般在增量导入数据后,表中会出现冗余的数据,因此对于表的去重操作主要分为两种:去重查询以及删除重复数据

背景:一般在增量导入数据后,表中会出现冗余的数据,因此对于表的去重操作主要分为两种:去重查询以及删除重复数据

1. 去重查询

1.1  distinct 关键字

selectdistinct<col1, col2, ...>from<table1>;

2. 删除重复数据

删除重复数据主要分为两种:部分去重和完全去重

2.1 部分去重

部分去重分为两个步骤:

2.1.1 找出重复数据

select<col1, col2, ...,count()>from<table1>groupby<col1, col2, ...>havingcount()>1;

2.1.2 删除临时数据

deletefrom<table1 a>where<col1, col2>in(select col1, col2, ...,count()from<table1>groupby col1, col2, ... 
havingcount()>1);

进阶:如果当数据量非常大的时候,上面的删除执行效率会非常低,甚至有可能导致数据库卡死,因此可以用临时表来减轻数据库io的压力

--创建临时表保存重复数据createtable tmp as(select<col1, col2, ...,count()>from<table1>groupby<col1, col2, ...>havingcount(*)>1);--删除原表中的重复数据deletefrom<table1 a>where(col1, col2, ...)in(select col1, col2, ...
from tmp);--删除临时表droptable tmp;

2.2 完全去重

当数据体量小的时候,可以考虑完全去重。

--创建临时表保存去重后的数据createtable tmp as(selectdistinct*from<table1>);--清空原表数据truncate table<table1>;--将临时表的数据插入到原表中insertinto<table1>(select*from tmp);--删除临时表droptable tmp;

3. 进阶用法

背景:如果数据10分钟导入一次,一小时导入一次,甚至一天导入一次,而且每次导入的数据都得进行去重,那么上述sql语句就会重复执行,我们如何实现其自动化?

答案是触发器,下面我写得一个应用触发器的事例,数据库用的是Kingbase(人大金仓V8),当然如果熟悉触发器的朋友也可以插入前检验,不过博主不擅长写referencing old old new new的前置触发,所以不在此举例。

CREATEOR REPLACE TRIGGER "clear_replica"--触发条件:当插入数据至LsvoFplnCmdcCoreItems表时会触发动作,也可以加其他触发条件比如 UPDATE, DELETE, 需用OR连接AFTER INSERTON LsvoFplnCmdcCoreItems
FOR EACH ROW
ASBEGIN--创建临时表保存重复数据CREATETABLE tmp AS(SELECT CompanyCode, BusinessTypeCode, SubBusinessTypeCode, SupplierCode, CurrencyCode, IsInit,  ExecAmt, PayDate, version
FROM LsvoFplnCmdcCoreItems
GROUPBY CompanyCode, BusinessTypeCode, SubBusinessTypeCode, SupplierCode, CurrencyCode, IsInit,  ExecAmt, PayDate, version 
HAVINGcount(*)>1);--删除原表中的重复数据deletefrom LsvoFplnCmdcCoreItems 
where(CompanyCode, BusinessTypeCode, SubBusinessTypeCode, SupplierCode, CurrencyCode, IsInit,  ExecAmt, PayDate, version)in(select CompanyCode, BusinessTypeCode, SubBusinessTypeCode, SupplierCode, CurrencyCode, IsInit,  ExecAmt, PayDate, version
from tmp);--删除临时表droptable tmp;END;
相关文章
|
4天前
|
SQL 存储 缓存
Flink SQL Deduplication 去重以及如何获取最新状态操作
Flink SQL Deduplication 是一种高效的数据去重功能,支持多种数据类型和灵活的配置选项。它通过哈希表、时间窗口和状态管理等技术实现去重,适用于流处理和批处理场景。本文介绍了其特性、原理、实际案例及源码分析,帮助读者更好地理解和应用这一功能。
53 14
|
3天前
|
SQL Oracle 数据库
使用访问指导(SQL Access Advisor)优化数据库业务负载
本文介绍了Oracle的SQL访问指导(SQL Access Advisor)的应用场景及其使用方法。访问指导通过分析给定的工作负载,提供索引、物化视图和分区等方面的优化建议,帮助DBA提升数据库性能。具体步骤包括创建访问指导任务、创建工作负载、连接工作负载至访问指导、设置任务参数、运行访问指导、查看和应用优化建议。访问指导不仅针对单条SQL语句,还能综合考虑多条SQL语句的优化效果,为DBA提供全面的决策支持。
22 11
|
13天前
|
关系型数据库 MySQL 数据库
数据库数据恢复—MYSQL数据库文件损坏的数据恢复案例
mysql数据库文件ibdata1、MYI、MYD损坏。 故障表现:1、数据库无法进行查询等操作;2、使用mysqlcheck和myisamchk无法修复数据库。
|
17天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
16天前
|
SQL 监控 安全
SQL Servers审核提高数据库安全性
SQL Server审核是一种追踪和审查SQL Server上所有活动的机制,旨在检测潜在威胁和漏洞,监控服务器设置的更改。审核日志记录安全问题和数据泄露的详细信息,帮助管理员追踪数据库中的特定活动,确保数据安全和合规性。SQL Server审核分为服务器级和数据库级,涵盖登录、配置变更和数据操作等事件。审核工具如EventLog Analyzer提供实时监控和即时告警,帮助快速响应安全事件。
|
26天前
|
SQL 关系型数据库 MySQL
体验使用DAS实现数据库SQL优化,完成任务可得羊羔绒加厚坐垫!
本实验介绍如何通过数据库自治服务DAS对RDS MySQL高可用实例进行SQL优化,包含购买RDS实例并创建数据库、数据导入、生成并优化慢SQL、执行优化后的SQL语句等实验步骤。完成任务,即可领取羊羔绒加厚坐垫,限量500个,先到先得。
144 12
|
23天前
|
SQL 存储 BI
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
gbase 8a 数据库 SQL合并类优化——不同数据统计周期合并为一条SQL语句
|
23天前
|
SQL 数据库
GBase8a 数据库集群v953扩容案例问题分享
GBase8a 数据库集群v953扩容案例问题分享
|
23天前
|
SQL 数据库
gbase 8a 数据库 SQL优化案例-关联顺序优化
gbase 8a 数据库 SQL优化案例-关联顺序优化
|
24天前
|
存储 SQL 数据库
Sybase数据恢复—Sybase数据库常见问题之数据库无法启动的恢复案例
Sybase数据库数据恢复环境: Sybase数据库版本:SQL Anywhere 8.0。 Sybase数据库故障&分析: Sybase数据库无法启动。 使用Sybase Central连接报错。 数据库数据恢复工程师经过检测,发现Sybase数据库出现故障的原因是:异常断电造成Sybase数据库无法回写正常数据,导致多个存储页数据不一致,系统表描述和存储表不一致,部分存储页底层数据完全杂乱。
下一篇
DataWorks