微信群与一位PG朋友讨论分区表更新问题,分享下本人之前的解决思路。
应用场景:
公交卡刷卡乘客的消费数据明细入库问题
比如我们按乘客乘车时间,按月份进行分区,表名如card_trade201912
问题:
数据总会有延迟上传或重传或错传的情况
那后台需要对分区表进行插入或修改操作。
单纯的插入数据到基表,可以根据乘车时间定位到分区表,这个没什么问题
修改或者混合操作,对基表做join操作性能会差一些,这是因为修改可能会涉及多个子分区表
我的解决思路:
1.对源数据按分区字段(这里是乘车时间)分组
分组后每个组对应了一个具体的子分区如(card_trade201912)
2.按组处理
可以直接insert into card_trade201912 on conflict do update
或者先perform查询,根据分区键查询
判断是要做insert还是update
这样不管源数据跨多少个子分区,单次分组操作开销基本是线性的。
上面对源数据也可以分批处理,比如每次处理1W条。
经过这样改进原来需要半个小时或者更长时间的任务基本分钟级就能处理完成。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




