-
按月分区
之前的模型设计师及架构师留下的表分区为STRING型的etl_time:20181222153000(年月日时分秒)
业务人员使用时经常用时间取数,导致需要截取etl_time,效率比直接查询分区字段原始值慢两倍。
思考: 若是重新分区,基于现在的业务场景及数据使用方便层面,我更倾向于年月-日-时
-
同样是按月分区,这样会在年月目录中存储单月30天的目录数据;
天目录下有时目录( 甚至可以天时一层目录,因为一天只保留一份当天全量数据)
后续: 若是需要批量修改底层表的分区字段及分区字段值
思路:
-
将类似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) ...