使用Python&mysql完成数据拆分校验

背景:
公司迭代了一个需求,会将生产的数据根据指定的维度进行拆分,研发要求测试出一个数据验证脚本,去校验数据拆分的准确性。

原数据格式为:注意provider_no、channel_no字段的值,原数据格式为多对多。
在这里插入图片描述
产品需求为:根据operate_type、msg_type、target_type、provider_no、channel_no五个条件为维度,完成数据的拆分,使其对应字段的值有且只有一个(原本一个配置数据拆分之后,可能会有几十条配置)

脚本设计思路1:
正向思路:确定开发脚本的拆分方式=====> 将数据导出到Excel中,使用Python处理Excel完成数据拆分=====>将拆分后的数据写入Excel中=====>将开发拆分的数据导到Excel中,实现数据对比

笛卡尔集的实现:这个是在网上copy的。
在这里插入图片描述

重点来了!!!

  此处的思路就是想办法将原数据中需要处理的字段转换成一个个小列表,然后整条数据作为一个大列表。

在这里插入图片描述
拆分完成之后的数据为:
在这里插入图片描述

脚本设计思路2:
逆向思路:判断原数据能否根据指定的维度的数据保持唯一=========>将研发拆分的数据根据指定的维度重新聚合=======>将聚合之后的数据与原数据进行对比

判断数据是否以指定维度唯一:

SELECT
	t1.c1,
	COUNT( 1 ) 
FROM
	(
	SELECT
		CONCAT( provider_no, "-", channel_no, "-", operate_type, "-", target_type, "-", msg_type ) c1 
	FROM
		bu_intercity.msg_tlp_setting1 
	WHERE
		effective = '1' 
	GROUP BY
		c1 
	HAVING
		COUNT( c1 )> 1 
	) t1

这里在使用having过滤数据时,需要注意having的位置。不要写成如下sql:这样写导致筛选条件失效

		SELECT
			t1.c1 
		FROM
			(
			SELECT
				CONCAT( provider_no, "-", channel_no, "-", operate_type, "-", target_type, "-", msg_type ) c1 
			FROM
				bu_intercity.msg_tlp_setting1 
			WHERE
				effective = '1' 
			GROUP BY
				c1 
			) t1 
		HAVING
			COUNT( c1 )>1

在这里插入图片描述

将拆分数据聚合并判断聚合后的数据与原数据是否能够完全匹配

SELECT
	t1.c1 
FROM
	(
	SELECT
		CONCAT( b.provider_no, a.channel_no, a.operate_type, a.target_type, a.msg_type, a.effective ) c1 
	FROM
		message_route1 a
		INNER JOIN message_route_provider1 b ON a.setting_no = b.setting_no 
	) t1 
WHERE
	t1.c1 NOT IN ( SELECT CONCAT( provider_no, channel_no, operate_type, target_type, msg_type, effective ) FROM msg_tlp_setting1 )
   
SELECT
	c1 
FROM
	( SELECT CONCAT( provider_no, channel_no, operate_type, target_type, msg_type, effective ) c1 FROM msg_tlp_setting1 ) t2 
WHERE
	c1 NOT IN (
	SELECT
		CONCAT( b.provider_no, a.channel_no, a.operate_type, a.target_type, a.msg_type, a.effective ) 
	FROM
		message_route1 a
	INNER JOIN message_route_provider1 b ON a.setting_no = b.setting_no)



                                                                                                 ----------------------------------学海无涯
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值