Hive - 检查分区 partition 是否存在

news2024/10/6 10:40:35

目录

一.引言

二.检查最新分区

三.检查任意分区

四.总结


一.引言

国庆期间任务因为某个 hive 表分区未成功创建,导致后续任务异常,为此也是苦逼的 6 点起床修复 bug。发生异常对应表的正常分区如下图所示,为 dt、hour 双分区:

为了保证后续不再出现该问题,这里增加了定时的检查机制,用于检测分区 partition 是否生成,未生成则报警并重新执行分区生成任务。根据场景不同,下面使用两种方法检测,示例中我们只检测对应 dt 的分区是否正常生成。

二.检查最新分区

latest_partition_exist() {

    local args=("$@")  # 将参数存储在本地数组中
    table_name=${args[0]}
    partition=${args[1]}

    latest_partition=`hive -e "show partitions ${table_name};" | tail -1 | cut -d '=' -f2 | cut -d '/' -f1`
    echo 最新分区 $latest_partition

    if [ $latest_partition == $partition ];then
        echo "Table $table_name 分区 $partition 存在"
    else
        echo "Table $table_name 分区 $partition 不存在"
        ... <重新生成分区的逻辑> ...
    fi
}

latest_partition_exist $table_name $partition

函数解释

show_partitions 展示所有分区,由于是检测最新分区,所以 tail -1 直接取最后的分区即可。这里由于是 dt、hour 双分区,所以第一层 cut 后得到的结果是 '20231006/hour',为了获取对应 dt 我们又增加了新的 '/' 划分。如果你的分区只有一层,保留一个 cut 即可。

函数使用

如上示例,如果我们要检测最新的分区是否是 dt='20231006',则:

#!/bin/bash

table_name='xxx'
partition='20231006'

latest_partition_exist $table_name $partition

如果不存在则在 ... 处增加对应的分区生成逻辑即可。 

三.检查任意分区

上面通过 tail -1 检查最后一个即当前表的最新分区,还有一些同学可能需要检测之前的分区,此时不同使用 tail 来定位,所以增加了一版任意分区检测的方法。

partition_exist() {
    local args=("$@")  # 将参数存储在本地数组中
    table_name=${args[0]}
    partition=${args[1]}
    # 在 Hive 中执行 SHOW PARTITIONS 命令,并将结果赋值给变量 result
    result=$(hive -e "SHOW PARTITIONS ${table_name};")

    # 检查 result 是否包含 partition
    if [[ $result == *"${partition}"* ]]; then
        echo "Table $table_name 分区 $partition 存在"
    else
        echo "Table $table_name 分区 $partition 不存在"
        ... <重新生成分区的逻辑> ...
    fi
}

函数解释

if [[ $result == *"${partition}"* ]]; then

这里将所有分区信息构成数组赋值给 result。这里的 == 是字符串比较操作符,*表示任意字符的通配符。也就是说,如果 $result 变量的值中任意位置包含 $partition 变量的值,条件就满足,就会执行 then 后面的代码块。

函数使用

如上示例,如果我们要检测最新的分区是否是 dt='20231006',则:

#!/bin/bash

table_name='xxx'
partition='20231006'

partition_exist $table_name $partition

如果不存在则在 ... 处增加对应的分区生成逻辑即可。 

四.总结

因为分区未生成的原因,影响了国庆的一个早晨懒觉,教训惨痛,对后续也产生了警醒,一定要给任务增加异常检查机制、失败重试机制,这样才能换来每早的安稳睡眠。最后上个中秋的月,纪念这愉快而又短暂的双节假期:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1076575.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++视觉处理---cv::Sobel()`算子

cv::Sobel()算子 cv::Sobel()是OpenCV库中的函数之一&#xff0c;用于计算图像的Sobel梯度。Sobel梯度是一种常用的图像处理技术&#xff0c;用于检测图像中的边缘和轮廓。 以下是cv::Sobel()函数的一般用法和参数&#xff1a; void cv::Sobel(cv::InputArray src, //…

C++ 获取文件创建时间、修改时间、大小等属性

简介 获取文件创建时间、修改时间、大小等属性 代码 #include <iostream> #include <string.h> #include <time.h>void main() {std::string filename "E:\\LiHai123.txt";struct _stat stat_buffer;int result _stat(filename.c_str(), &s…

2023年中国叉车租赁行业现状分析:设备价格昂贵,租赁市场需求增长[图]

叉车租赁行业是指专门提供叉车租赁服务的行业。叉车是一种用于搬运、装卸和堆垛物品的机械设备&#xff0c;广泛应用于仓储、物流、建筑、制造业等领域。由于购买叉车需要较高的成本投入&#xff0c;而且使用频率可能不高&#xff0c;许多企业和个人选择通过租赁叉车来满足短期…

AI智剪助力,批量处理视频无忧,创作不再难

随着人工智能技术的迅速发展&#xff0c;一个名为“AI智剪”的新兴领域正引发全球范围内的关注。作为人工智能与视频剪辑技术的结合&#xff0c;AI智剪为影像产业带来了前所未有的变革&#xff0c;不仅极大地提高了剪辑效率&#xff0c;还为创作者提供了无限的可能性。今天我们…

基于SpringBoot的大型商场应急预案管理系统

目录 前言 一、技术栈 二、系统功能介绍 员工信息管理 预案信息管理 预案类型统计 事件类型管理 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍…

爱尔眼科角膜塑形镜验配超百万,全力做好“角塑镜把关人”

你知道吗?过去的2022年&#xff0c;我国儿童青少年总体近视率为53.6%&#xff0c;其中6岁儿童为14.5%&#xff0c;小学生为36%&#xff0c;初中生为71.6%&#xff0c;高中生为81%①。儿童青少年眼健康问题俨然成为全社会关心的热点与痛点&#xff0c;牵动着每一个人的神经。 好…

算法通过村第十三关-术数|青铜笔记|数字与数学

文章目录 前言数字统计专题符号统计阶乘0的个数 溢出问题整数反转字符串转整数回文数 进制专题七进制数进制转换 总结 前言 提示&#xff1a;生活是正着来生活&#xff0c;倒着去理解。 --戴维迈尔斯《社会心理学》 数学是学生时代掉头发的学科&#xff0c;那算法是毕业后掉头发…

【JavaEE】文件操作

文章目录 前言什么是文件树型结构组织和目录文件路径文件类型文件权限Java中的文件操作File 类的常见属性File 类常见构造方法File 类常用方法 前言 文件是我们日常生活中使用非常广泛的&#xff0c;我们使用任何一个程序都离不开文件操作&#xff0c;这个文件不仅仅指平时可以…

【java学习】变量的分类:成员变量与局部变量(16)

变量的分类 1. 基本概念2. 成员变量3. 局部变量4. 成员变量(属性)和局部变量的区别 1. 基本概念 概念&#xff1a; 在方法体外&#xff0c;类体内声明的变量称为成员变量。在方法体内部声明的变量称为局部变量。 2. 成员变量 实例变量&#xff1a;在类实例化成对象才能使用 …

多线程 - 线程池

线程池 相关的背景知识 线程池存在的意义: 使用进程来实现并发编程,效率太低了,任务太重了,为了提高效率,此时就引入了线程,线程也叫做“轻量级进程”,创建线程比创建进程更高效;销毁线程比销毁进程更高效;调度线程比调度进程更高效…此时,使用多线程就可以在很多时候代替进程…

在美国如何申请批准销售儿童玩具?提交哪些相关文件?需要的认证是?

在美国如何申请批准销售儿童玩具&#xff1f;提交哪些相关文件&#xff1f;需要的认证是&#xff1f;ASTM F963-17 ​在美国销售玩具 重要&#xff1a; 如果您要在亚马逊商城销售商品&#xff0c;则必须遵守适用于这些商品和商品信息的所有联邦、州和地方法律以及亚马逊政策。…

dockerfile lnmp 搭建wordpress、docker-compose搭建wordpress

-----------------安装 Docker--------------------------- 目前 Docker 只能支持 64 位系统。systemctl stop firewalld.service setenforce 0#安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 --------------------------------------------------…

什么是信创测试?信创测试工具有哪些?

信创全称是“信息技术应用创新”&#xff0c;旨在实现信息技术自主可控&#xff0c;规避外部技术制裁和风险&#xff0c;其涉及产业链包括硬件、基础软件、应用软件、云服务、数据安全等领域。 信创测试是指对信创工程项目中的产品、系统等进行测试和验证&#xff0c;以确保其…

【B/S架构】医院不良事件报告系统源码

医院不良事件报告系统为医院内质量控制、患者安全关注、医疗安全不良事件方面的精细化的管理提供了平台&#xff0c;是等级医院评审的必备内容&#xff0c;评审要求医院直报系统要与卫生部“医疗安全(不良)事件报告系统”建立网络对接。 不良事件报告系统源码包括护理相关事件、…

写一个名为Rectangle的类表示矩形

如何使用Rectangle类计算矩形的面积 要求&#xff1a;其属性包括宽width、高height和颜色color&#xff0c;访问权限分别为private&#xff0c;width和height都是double型的&#xff0c;而color则是String类型的。要求该类提供计算面积的方法getArea()方法&#xff0c;以及修改…

Node.js 做 Web 后端的优势在哪?为什么是明智的选择?

当我们谈论构建强大的Web应用程序时&#xff0c;选择适当的后端技术至关重要。在如今的技术领域中&#xff0c;Node.js已经崭露头角&#xff0c;并且越来越多的开发者和企业选择将其作为首选的后端开发工具。但是&#xff0c;Node.js究竟有哪些优势&#xff0c;使得它成为众多开…

WMS仓储管理系统的盘点功能解析

随着电商行业的快速发展&#xff0c;仓储管理在企业的运营中扮演着越来越重要的角色。为了提高仓库的运营效率和管理水平&#xff0c;许多企业引入了WMS仓储管理系统。本文将对WMS仓储管理系统的盘点功能进行解析&#xff0c;探讨其在实际应用中的价值。 一、WMS仓储管理系统概…

【分享】影刀使用xpath捕获指定的元素

xpath捕获元素比较精准&#xff0c;前面也介绍了xpath的用法 现在捕获社区里帖子详情页的标题 //*[class‘discuss_detail_header___3LhnQ’]/h1 找到class是discuss_detail_header___3LhnQ的子元素h1 获取文章内容 //*[id‘w-e-textarea-1’] 找到id是w-e-textarea-1的元…

这短短 6 行代码你能数出几个bug?

前言&#xff1a;本文仅仅只是分享笔者一年前见到的诡异代码&#xff0c;大家可以看看乐子&#xff0c;随便数一数一共有多少个bug&#xff0c;这数bug多少还是要点水平的 在初学编程的时候&#xff0c;写的第一个代码大多都是 hello world&#xff0c;可是就算是 hello world…

如何使用CSS和JavaScript实施暗模式?

近年来&#xff0c;暗模式作为用户界面选项备受追捧。它提供了更暗的背景和更亮的文本&#xff0c;不仅可以减轻眼睛疲劳&#xff0c;还可以节省电池续航时间&#xff0c;尤其是在OLED屏幕上。 不妨了解如何结合使用CSS和JavaScript为网站和Web应用程序添加暗模式选项。 了解暗…