hive在交易流水统计中的应用

117 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情

上文介绍到hive在交易流水统计中的应用,大致讲了一下设计方向以及设计思路,本文继续讲解其中的细节,包括设计哪些表来支撑这样一个需求,以及每张表中字段的含义和取值规则,下面进入正题。

首先我们需要有合同流水表,这个合同流水表纪录的是以合同为粒度的明细数据,包括正向数据和逆向数据,签订时间和退签时间,前面说过,签订合同的时间和金额都会按照多次签订依次纪录,那么退签时间呢?针对一个项目上的退签时间只会有一个,因为退签一次之后,这个项目就是废掉了,即不会再有第二次的退签,然而退签的金额需要通过将之前每一次的签约金额和重新签约的金额相加在一起,就是退签金额。纪录数据的时候要记为负数,这样可以在后续的汇总表中直接使用。

实际业务数据中探查发现这个签约作废时间可以有多次的更新,并且没有记录历史的快照数据,这样就麻烦了,如果按照实时统计的结果,势必会有数据的波动情况,如果不想要数据有波动,那么就需要指定唯一一次的作废是作为统计的,这里将第一次作废时间作为判定作废的最终时间,那么每一次实时统计到的都是第一次的时间,故数据不会发生变化,但是现在业务没有快照数据,并且作废时间会被覆盖掉,怎么解决呢?需要通过修改业务逻辑功能来实现,这里就冒出一种解决思路,那就是如果业务上有漏洞,就需要通过补掉业务上的漏洞来解决数据不正确的问题,而不是一味的通过提高sql的复杂性来解决问题,不然sql太复杂性能也较差,迭代起来也不方便。