zoukankan      html  css  js  c++  java
  • Hive-拉链表

    一、问答介绍

    1.什么是拉链表?

        维护历史状态,以及最新状态数据的一种表,拉链表根据拉链粒度的不同,实际上相当于快照,只不过做了优化,去除了一部分不变的记录,通过拉链表可以很方便的还原出拉链时点的客户记录。记录一个事物从开始,一直到当前状态的所有变化的信息(生命周期)。核心字段为生效开始日期与生效结束日期(粒度)。

    2.为什么用拉链表(应用场景决定)?

     1)原数据量很大(查询费劲)

     2)表中部分字段会被更新(更新后又想看历史)

     3)需求中需要对某一时刻数据查询(业务粒度)

     4)更新频率不频繁且更新数据量不大(拉链表过大就没多大意义了)

     5)需要节省存储资源(节约成本)

    二、Hive使用拉链表

    1.案例场景:将mysql中的数据按每日的粒度增量(新建+修改)跟新到hive拉链表。

    2.需求:通过相关操作得到最新的拉链表。

    3.相关表:mysql原表,Hive拉链表,Hive数据变化表,Hive数据临时表

    4.相关技巧点(先思考,后面解释):

        1.如何获取mysql当日数据变动?(粒度为天)
        2.如何hive表跟新修改后的数据?(如何改变生效结束日期)
        3.拉链表如何跟新?(hive不能修改)

    5.获取mysql每日数据变化:获取到每日变化的数据后,将数据覆盖到hive数据变化表:初始化拉链表为mysql全量导入hive拉链表

        1.设计mysql表时加入数据创建时间及操作更新时间(最优)
        2.第三方监控工具如canal(繁琐)

    6.hive更改数据的生效结束时间:将新增数据获取到hive临时表

    7.将hive临时表覆盖hive拉链表,任务完成。

    8.hive临时表为该方案的核心技术点。

    若有疑问可评论中提出,后续补充到本文。

  • 相关阅读:
    一道C#基础题,看你能多长时间做出来?
    终于能在这里安家了
    你知道返回多少吗?(使用Math类)
    关于implicit和explicit关键词的用法
    关于基类与派生类的学习
    js控制输入框
    Oracle 动态SQL返回单条结果和结果集 转帖
    定时器:.NET Framework类库中的Timer类比较(转帖)
    UVA10020 Minimal coverage
    UVA1388 Graveyard
  • 原文地址:https://www.cnblogs.com/wanchen-chen/p/12934090.html
Copyright © 2011-2022 走看看