首页 > 其他分享 >生命周期管理工具

生命周期管理工具

时间:2023-04-27 20:23:47浏览次数:39  
标签:生命周期 管理工具 hive TBL table dt data ID

生命周期管理工具

当数仓中表过于多的时候,生命周期管理就成了比较大的问题。
在表里面自己去手动删除分区,表过多的时候,修改就成了很大的问题。
这时候就可以做一个脚本:每天定时去删除过期的数据,不仅仅能处理这个问题,还可以减少成本

方案

hive 提供了可以自定义表属性的空间TBLPROPERTIES,我们可以在其中插入自己需要的生命周期
可以在建表语句里面直接写,也可以后来使用ALTER TABLE 进行更改

CREATE TABLE table_name(col1 string,col2 int)PARTITIONED BY (dt string)
TBLPROPERTIES ('lifecycle'='129','transient_lastDdlTime'='1682577175')

ALTER TABLE table set tblproperties ('life_cycle'='30'); 

hive元数据介绍

SDS表样例
分区存储表,里面记录了存储ID和loacation,其他列为了方便查看结果已经删掉
select * from SDS   limit 10        ;
+-------+----------------------------------------------+
| SD_ID | LOCATION                                     |
+-------+----------------------------------------------+
|    81 | file:/opt/hive/hive/data/table_1             |
|    82 | file:/opt/hive/hive/data/table_1/dt=20220101 |
|    83 | file:/opt/hive/hive/data/table_1/dt=20220102 |
|    84 | file:/opt/hive/hive/data/table_1/dt=20220103 |
|    85 | file:/opt/hive/hive/data/table_1/dt=20220104 |
|    86 | file:/opt/hive/hive/data/table_1/dt=20220105 |
|    87 | file:/opt/hive/hive/data/table_1/dt=20220106 |
|    88 | file:/opt/hive/hive/data/table_1/dt=20220107 |
|    89 | file:/opt/hive/hive/data/table_1/dt=20220108 |
|    90 | file:/opt/hive/hive/data/table_1/dt=20220109 |
+-------+----------------------------------------------+
PARTITIONS表样例
分区存储表,里面记录了分区ID和分区名称和表ID和存储ID,其他列为了方便查看结果已经删掉
select * from PARTITIONS      where TBL_ID=56             ;
+---------+-------------+-------+--------+
| PART_ID | PART_NAME   | SD_ID | TBL_ID |
+---------+-------------+-------+--------+
|       1 | dt=20230401 |     6 |      1 |
|       2 | dt=20230401 |     7 |      2 |
|       3 | dt=20230401 |     8 |      3 |
|       4 | dt=20230402 |     9 |      1 |
|       5 | dt=20230402 |    10 |      2 |
|       6 | dt=20230402 |    11 |      3 |
|       7 | dt=20230403 |    12 |      1 |
|       8 | dt=20230403 |    13 |      2 |
|       9 | dt=20230403 |    14 |      3 |
|      10 | dt=20230404 |    15 |      1 |
|      11 | dt=20230404 |    16 |      2 |
|      12 | dt=20230404 |    17 |      3 |
+---------+-------------+-------+--------+
TABLE_PARAMS表样例
HIVE表参数表,表ID和自定义参数名称和自定义参数值,其他列为了方便查看结果已经删掉
select * from  TABLE_PARAMS       limit 10        ;
+--------+-----------------------+-------------+
| TBL_ID | PARAM_KEY             | PARAM_VALUE |
+--------+-----------------------+-------------+
|      1 | lifecycle             | 30          |
|      2 | lifecycle             | 30          |
|      3 | lifecycle             | 30          |
|      4 | lifecycle             | 30          |
+--------+-----------------------+-------------+
TBLS表样例
HIVE表描述表,表ID和数据库ID和表名称,其他列为了方便查看结果已经删掉
select * from TBLS limit 10;
+--------+------+----------+
| TBL_ID |DB_ID | TBL_NAME |
+--------+------+----------+
|      6 |    1 | table_1  |
|     11 |    1 | table_2  |
|     16 |    1 | table_3  |
|     21 |    1 | table_4  |
|     26 |    1 | table_5  |
|     31 |    1 | table_6  |
|     36 |    1 | table_7  |
|     41 |    1 | table_8  |
|     46 |    1 | table_9  |
|     51 |    1 | table_10 |
+--------+------+----------+

最终脚本

#!/bin/bash
IFS=$'\n'
mysql -u'root' -p'123456' -D'hive' -N -e"select DB_ID from TBLS group by DB_ID" > /root/db.csv
for dbindex in `cat /root/db.csv `
do
    echo "db '$dbindex' start"
    mysql -u'root' -p'123456' -D'hive' -N -e"select CONCAT('alter table ',TBL_NAME,' drop partition (',b.PART_NAME,');') from (select TBL_ID,TBL_NAME from TBLS where DB_ID in ($dbindex))a inner join (select TBL_ID,CONCAT('dt=',REPLACE(DATE_SUB(CURDATE(), INTERVAL CAST(PARAM_VALUE AS SIGNED) DAY),'-','')) as PART_NAME from TABLE_PARAMS where PARAM_KEY='lifecycle')b on a.TBL_ID=b.TBL_ID inner join (select PART_NAME,SD_ID,TBL_ID from PARTITIONS )c on b.TBL_ID=c.TBL_ID and b.PART_NAME>=c.PART_NAME  inner join (select SD_ID,LOCATION from SDS)d on c.SD_ID=d.SD_ID group by b.PART_NAME,TBL_NAME" > /root/retult.csv
    sed -i  's/=/</g' /root/retult.csv
    awk '{printf "%s%s", (NR%100==1 && NR!=1?RS:""), $0} END {print ""}' retult.csv > data.csv
    for tableindex in `head /root/data.csv `
    do
        hive -e $tableindex
    done
    echo "db '$dbindex' end"
done

上面的解决方案缺陷如下:
1.hive使用的是mysql。一般情况下不是这样的比如AWS的云hive使用的glue元数据,阿里云使用的是RDS,解析方式可能不太一样
2.最终drop分区使用的是hive。其实可以升级成为spark。
需要注意的点:
1.如果hive中有特别大的表(分区特别多),那就每次处理的是单独处理一下
2.服务器是需要开启回收站的,以便于误删的数据能恢复过来
3.真正上线脚本的时候需要三步走:表->库->整个脚本上线

标签:生命周期,管理工具,hive,TBL,table,dt,data,ID
From: https://www.cnblogs.com/wuxiaolong4/p/17360108.html

相关文章

  • Etcd 可视化管理工具,GUI 客户端。
    EtcdAssistant——Etcd可视化管理工具,GUI客户端。下载地址:http://www.redisant.cn/etcd主要功能:支持多标签页,同时连接到多个集群以漂亮的格式显示JSON、XML、MessagePack、十六进制等数据格式浏览、创建、编辑、删除键导出和导出数据键的展示支持多种视图:树状视图或列......
  • Activity生命周期
    正如您将要在以下课程中要学习的,有Activity会在图1所示不同状态之间过渡的几种情况。但是,这些状态中只有三种可以是静态。也就是说,Activity只能在三种状态之一下存在很长时间。Resumed:在这种状态下,Activity处于前台,且用户可以与其交互。(有时也称为“运行”状态。)Paused:在这种......
  • Android-Service的生命周期
    原文地址blog.csdn.net与Activity类似,Service也有自己的生命周期函数,在不同的时刻,系统会调用对应的Service生命周期函数,不过与Activity声明周期相比,Service的声明周期更加简单,我们通过官方给出的一张图片来体会一下:Service作为Android四大组件之一,应用非常广泛。和Activit......
  • django生命周期和路由层
    django生命周期https://www.yuque.com/liyangqit/cbndkh/evyps8django路由层1.路由匹配 django2.X及以上path第一个参数写什么就匹配什么 django1.X第一个参数是正则表达式 无论什么版本django都自带加斜杠后缀的功能也可以取消 配置文件中APPEND_SLASH=False#默......
  • Angular系列 -> 生命周期钩子
    简介:Angular指令的生命周期,是用来记录指令从创建、应用及销毁的过程。Angular提供了一系列与指令生命周期相关的钩子,便于我们监控指令生命周期的变化,并执行相关的操作。生命周期介绍: ngOnChanges:当数据绑定输入属性的值发生变化时;@input属性(输入属性)发生变化时;ngO......
  • 微信小程序:uni-app页面Page和组件Component生命周期执行的先后顺序
    目录H5微信小程序测试代码文档页面生命周期https://uniapp.dcloud.net.cn/tutorial/page.html#lifecycle组件生命周期https://uniapp.dcloud.net.cn/tutorial/page.html#componentlifecycle经测试,得出结论:H5和微信小程序的生命周期函数调用顺序不一致H5pagebeforeCreatepag......
  • react 生命周期钩子函数
    1、挂载:construct、getDerivedStateFromProps、render、componentDidMounted2、更新:getDerivedStateFromProps、componentWillUpdate、render、getSnapshotBeforeUpdate、componentDidUpdated3、卸载:componentWillUnmounted4、请求放在componentDidMount里react生命周期图:h......
  • 全平台数据(数据库)管理工具 DataCap 管理 Rainbond 上的所有数据库
    DataCap是用于数据转换、集成和可视化的集成软件,支持多种数据源、文件类型、大数据相关数据库、关系数据库、NoSQL数据库等。通过该DataCap可以实现对多个数据源的管理,对数据源下的数据进行各种操作转换,制作数据图表,监控数据源等功能。在Rainbond上部署DataCap前提安装Ra......
  • #正版软件推荐 |Todo 清单高级账户待办事项与时间管理工具
    这款待办事项与时间管理应用让你成为时间的主宰。它融合IvyLee时间管理法和Pomodoro番茄工作法,搭配强大的数据复盘系统,为你的学习、工作和生活带来翻天覆地的变化。该应用已上线Android、Windows、Mac和华为鸿蒙平台,并将逐步支持iPhone、iPad、AppleWatch等更多设备。众所周知,时......
  • vue2源码-十一、Vue的生命周期
    Vue的生命周期钩子函数是如何实现?内部利用一个发布订阅模式,将用户写的钩子维护成一个数组,后续依次调用hooks。主要靠的是mergerOptions方法有哪些?引用自https://vue3js.cn/interview/vue/lifecycle.html#%E4%BA%8C%E3%80%81%E7%94%9F%E5%91%BD%E5%91%A8%E6%9C%9F%E6%9C%......