数据生命周期管理是项目中常见问题,一般解决方案为:根据数据表创建时间和使用时间,计算出数据表的使用频率,从而将数据表分类为冷、温、热数据,以便客户进行数据清理或数据迁移。
但当表数据量较多时,该类信息无法快速或者直接从集群元数据中获取。南大通用GBase 8a数据库可通过程序多维度地提取元数据中的信息,梳理出客户业务中常用、不常用的数据表,并经过加工整合归类分析,最终解决该类问题。
分析思路
GBase 8a数据库中audit_log表的table_list字段,表示每个SQL语句所使用到的表,所有表名存储在与SQL对应的每一行上,且用逗号分隔。如果需要时间和表名的明细数据,需要做单行转多行的操作,该操作似于group_concat函数的反操作。
审计日志如下图:
审计日志表内数据整理后,期望格式如下:
期望实现效果如下:
难点分析
需要将每行涉及的多表字符串记录转为多行数据。
1、原方案曾尝试把table_list字段整列数据分成单表、多表两类。对多表的数据导出库外,使用sed命令替换逗号为换行,再加载入库。但该方案涉及库内库外操作,不如本方案仅在库内实现方便。
2、设计灵感来源于python语言的字符串分隔函数split()实现逻辑。借鉴使用substring_index函数对串进行必要的分割。
3、参考了通过cross join自建笛卡尔积,实现一行变多行的操作逻辑,从根本上解决问题。
4、开创性地通过审计日志分析数据使用热度,为客户的数据生命周期管理提供可行的参考方案