美文网首页
范围分区-思考

范围分区-思考

作者: OverLight | 来源:发表于2019-11-22 11:14 被阅读0次
    • 按月分区
      之前的模型设计师及架构师留下的表分区为STRING型的etl_time:20181222153000(年月日时分秒)


      image.png

    业务人员使用时经常用时间取数,导致需要截取etl_time,效率比直接查询分区字段原始值慢两倍。


    image.png

    思考: 若是重新分区,基于现在的业务场景及数据使用方便层面,我更倾向于年月-日-时

    • 同样是按月分区,这样会在年月目录中存储单月30天的目录数据;


      image.png
    • 天目录下有时目录( 甚至可以天时一层目录,因为一天只保留一份当天全量数据)

    后续: 若是需要批量修改底层表的分区字段及分区字段值
    思路:

    • 将类似etl_time:20181222153000的字段分两列: etl_date: 20181222 etl_time: 153000(根据使用场景决定time存储时分秒)

      -- 检查数据是否备份至临时表,此步骤决定是否执行下一步
      CREATE TABLE 临时表 AS orc AS SELECT * FROM 原表;  
      - 这期间耗时会根据表量、数据量决定
      - DROP TABLE 原表;  -- 检查数据已备份至临时表,再执行此步骤
      CREATE TABLE 新表 (业务字段,分列字段,分区字段);   —- 分区字段参考etl_date
      INSERT INTO 新表 (业务字段,分列字段,分区字段)  -- 检查数据是否完整
      select
      业务字段
      ,SUBSTRING(20181222153000,1,8)
      ,SUBSTRING(20181222153000,9,6)
      FROM 临时表;
      -- 备份历史数据-插数据还是挺快的,秒级几十万条(单条数据约为0.005KB)
      ...
      

    相关文章

      网友评论

          本文标题:范围分区-思考

          本文链接:https://www.haomeiwen.com/subject/zmmfwctx.html