当前位置: 首页 > article >正文

hive迁移补数脚本细粒度 表名-分区唯一键

假设我通过对数脚本发现,这些表对不上。

假设检测出来是这样的(这些表存在于源端,但不存在目标端)

我们需要从源端迁移过去。

diff.txt

ads_xx1    dt=20250219
ads_xx2    dt=20250217
ads_xx2    dt=20250218
ads_xx2    dt=20250219
ads_xx3    dt=20250217
ads_xx4    dt=20250217
bak_xx1    dt=20250109
bak_xx1    dt=20250110
bak_xx1    dt=20250111
bak_xx1    dt=20250112
bak_xx1    dt=20250113
dim_e    dt=20250131
dim_j    dt=20250216
dim_j    dt=20250217
dim_m_df    dt=20250216
dim_m_df    dt=20250217
dim_m_df    dt=20250218
tmp_np
tmp_an    dt=20250217
tmp_an    dt=20250218
tmp_dhc_allcon_20250131
tmp_hj    dt=20250216
tmp_hj    dt=20250217
tmp_hj_2    dt=20250216
tmp_hj_2    dt=20250217

~                                                    

脚本

#!/bin/bash
#场景:数据在同一库下,并且hive是内部表(前缀的hdfs地址是相同的)echo "" > rs.txt#1.读取每一行,获取到表名和分区名#定义map
declare -A table_map
while IFS=' ' read -r table_name fenqu_name
do#table_name为空的情况if [[ -z "${table_name// }" ]]; thenecho "变量为空或只有空格,跳过操作"continueelse#1.如果map中存在此表,并且分区不为空,则加入数组中if [[ -v table_map["$table_name"] ]]; thenecho "$table_name exists in the map!"value_arr="${table_map[$table_name]}"IFS=' ' read -r -a new_arr <<< "${table_map["$table_name"]}"#判断分区为空吗if [ ${#new_arr[@]} -eq 0 ]; thenecho "Array is empty!,不操作"elseecho "Array is not empty!加入数组,放到map"new_arr+=("$fenqu_name")table_map["$table_name"]="$(IFS=' '; echo "${new_arr[*]}")"fielse#2.如果map中不存在此表,则创建数组,分区不可能存在又缺分区又缺表的存在(跑的时候筛出来,分批跑),则放进去。echo "$table_name does not exist in the map!"value_arr=()value_arr+=("$fenqu_name")table_map["$table_name"]="$(IFS=' '; echo "${value_arr[*]}")"fifidone < "$1"
echo "-----------"
#测试一下数组中的元素
#for table_name in "${!table_map[@]}"; do
#    echo "$table_name: ${table_map[$table_name]}"
#done#2.遍历map3.遍历map
#删除每一个map里对应的分区
for table_name in "${!table_map[@]}"; dofenqu_arr_str=${table_map[$table_name]}echo "$table_name: $fenqu_arr_str"#如果没有分区,则删除表if [[ -z "$fenqu_arr_str" || "$fenqu_arr_str" =~ ^[[:space:]]*$ ]]; thenecho "hdfs dfs -rm -r hdfs://xx.xx.xx.104:4007/apps/hive/warehouse/bigdata.db/$table_name"eval "hdfs dfs -rm -r hdfs://xx.xx.xx.104:4007/apps/hive/warehouse/bigdata.db/$table_name"# 在这里执行相应的操作elseIFS=' ' read -r -a value_array <<< "$fenqu_arr_str"# 遍历数组for fenqu_name in "${value_array[@]}"; do# 输出每个 dtecho "hdfs dfs -rm -r hdfs://xx.xx.xx.104:4007/apps/hive/warehouse/bigdata.db/$table_name/$fenqu_name"eval "hdfs dfs -rm -r hdfs://xx.xx.xx.104:4007/apps/hive/warehouse/bigdata.db/$table_name/$fenqu_name"donefi  done#3.distcp任务
for table_name in "${!table_map[@]}"; dofenqu_arr_str=${table_map[$table_name]}echo "$table_name: $fenqu_arr_str"distcp_str="hadoop distcp -skipcrccheck -i -strategy dynamic -bandwidth 30 -m 20"source_path=hdfs://xx.xx.xx.7:8020/apps/hive/warehouse/bigdata.db/$table_nametarget_path=hdfs://xx.xx.xx.104:4007/apps/hive/warehouse/bigdata.db/$table_name#如果没有分区,则distcp表if [[ -z "$fenqu_arr_str" || "$fenqu_arr_str" =~ ^[[:space:]]*$ ]]; thendistcp_str="$distcp_str $source_path $target_path"echo "$distcp_str"eval "$distcp_str"elseIFS=' ' read -r -a value_array <<< "$fenqu_arr_str"# 遍历数组for fenqu_name in "${value_array[@]}"; do# 拼接distcp_str="$distcp_str $source_path/$fenqu_name"done#执行distcp_str="$distcp_str $target_path"echo "$distcp_str"eval "$distcp_str"fiecho "$table_name 完成" >> rs.txt
doneBEELINE_CMD="beeline -u 'jdbc:hive2://xx.xx.xx.104:7001/cfc;principal=hadoop/xx.xx.xx.104@TBDS-09T7KXLE'"
#4.修复分区
for table_name in "${!table_map[@]}"; do# 执行MSCK REPAIR TABLE命令echo "Repairing partitions for table: $table_name"$BEELINE_CMD -e "MSCK REPAIR TABLE $table_name;"if [ $? -eq 0 ]; thenecho "Successfully repaired partitions for table: $table_name"elseecho "Failed to repair partitions for table: $table_name"fi
done

使用

nohup sh bushu.sh diff.txt &

相关文章:

hive迁移补数脚本细粒度 表名-分区唯一键

假设我通过对数脚本发现&#xff0c;这些表对不上。 假设检测出来是这样的&#xff08;这些表存在于源端&#xff0c;但不存在目标端&#xff09; 我们需要从源端迁移过去。 diff.txt ads_xx1 dt20250219 ads_xx2 dt20250217 ads_xx2 dt20250218 ads_xx2 dt20250…...

SpringSecurity基于配置方法控制访问权限:MVC匹配器、Ant匹配器

Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。在 Spring Security 中&#xff0c;可以通过配置方法来控制访问权限。认证是实现授权的前提和基础&#xff0c;在执行授权操作前需要明确目标用户&#xff0c;只有明确目标用户才能明确它所具备的角色和权…...

Ubuntu22.04 - gflags的安装和使用

目录 gflags 介绍gflags 安装gflags 使用 gflags 介绍 gflags 是Google 开发的一个开源库&#xff0c;用于 C应用程序中命令行参数的声明、定义和解析。gflags 库提供了一种简单的方式来添加、解析和文档化命令行标志(flags),使得程序可以根据不同的运行时配置进行调整。 它具…...

java | MyBatis-plus映射和golang映射对比

文章目录 Java实体类和数据库的映射1.默认驼峰命名规则2.自定义字段映射3.关闭驼峰命名规则4.JSON序列化映射 Golang1. 结构体与表的映射2. 字段与列的映射3. 关联关系映射4. 其他映射相关标签 这篇也是做数据库映射方面的对比&#xff1a; Java 实体类和数据库的映射 1.默认…...

使用 Redis 实现 RBAC 权限管理

1. 什么是 RBAC&#xff1f; RBAC&#xff08;Role-Based Access Control&#xff0c;基于角色的访问控制&#xff09;是一种常见的权限管理模型&#xff0c;它通过用户&#xff08;User&#xff09;、角色&#xff08;Role&#xff09;、权限&#xff08;Permission&#xff…...

正则表达式–断言

原文地址&#xff1a;正则表达式–断言 – 无敌牛 欢迎参观我的个人博客&#xff1a;正则表达式特殊字符 – 无敌牛 断言assertions 1、(?...)&#xff1a;正向预查&#xff08;positive lookahead&#xff09;&#xff0c;表示某个字符串后面应该跟着什么。但这个字符串本身…...

Python常见面试题的详解14

1. 从变量 A 中匹配 JSON 字符串 在处理文本数据时&#xff0c;有时需要从变量里找出其中的 JSON 字符串。JSON 字符串一般以 { 或 [ 开头&#xff0c;以 } 或 ] 结尾&#xff0c;但简单的正则匹配可能不够严谨&#xff0c;所以还需用 json 模块进行验证。 要点 利用正则表达…...

电脑想安装 Windows 11 需要开启 TPM 2.0 怎么办?

尽管 TPM 2.0 已经内置在许多新电脑中&#xff0c;但很多人并不知道如何激活这一功能&#xff0c;甚至完全忽略了它的存在。其实&#xff0c;只需简单的几步操作&#xff0c;你就能开启这项强大的安全特性&#xff0c;为你的数字生活增添一层坚固的防护屏障。无论你是普通用户还…...

QT之改变鼠标样式

QT改变鼠标图片 资源路径如下 代码实现 QPixmap customCursorPixmap(":/images/mouse.png");QCursor customCursor(customCursorPixmap);QWidget::setCursor(customCursor); // 可以设置为整个窗口或特定控件QWidget::setCursor(); // 设置为透明光标&#xff0c…...

Node IO操作

文章目录 Node IO操作概述流的基本类型可读流读取模式可读流状态创建可读流使用可读流暂停和恢复绑定可写流 可写流创建可写流使用可写流关闭流缓冲数据 可读可写流转换流 Node IO操作 概述 在 Node.js 中&#xff0c;I/O&#xff08;输入/输出&#xff09;操作是异步的&…...

零基础进阶人工智能——发展史、核心技术、前沿应用与未来展望

引言&#xff1a;从科幻走向现实&#xff0c;人工智能不再遥远 人工智能&#xff08;AI&#xff09;&#xff0c;曾经是科幻小说和电影中遥不可及的未来科技&#xff0c;如今已悄然渗透到我们生活的方方面面。从智能家居的语音助手&#xff0c;到医疗诊断的辅助系统&#xff0…...

ue----git局域网内部署裸仓库,别的机器进行访问

最近由于经常迁移项目到另一台机器上进行部署更新一点就要整个迁移 弄得麻烦了 就在网上学了一下这个方式 首先我们在想要建立裸仓库的电脑上找到一个文件夹放置我们的裸仓库 在此点击鼠标右键选择 open git bash here 输入命令 创裸仓库 git init --bare gitTestName.git…...

三、tsp学习笔记——屏幕移植

泰山派-6寸猫屏转接板 - 立创开源硬件平台 泰山派樱猫的教程&#xff0c;屏资料链接: https://pan.baidu.com/s/1pNAKH33r7LtZG6EwHJ-HNA?pwdnsde 提取码: nsde &#xff08;不要浪费时间下载&#xff0c;没有用&#xff0c;下载gitee上的&#xff09; leefei/tspi-disp-6…...

vue3-05reactive定义对象类型的响应式数据(不能进行基本类型数据的响应式)

1.前言 reactive定义对象类型的响应式数据(不能进行基本类型数据的响应式) 2.实践 2.1语法 const 代理对象 reactive(源对象) 接收一个对象(或数组)&#xff0c;返回一个代理对象 (Proxy的实例对象&#xff0c;简称proxy对象) <script> import { reactive } from &qu…...

PaddlePaddle的OCR模型转onnx-转rknn模型_笔记4

一、PaddlePaddle的OCR模型转onnx 1、首先建立一个新的虚拟环境 conda create -n ppocr python3.10 -y conda activate ppocr 2、进入paddlepaddle官网输入以下指令安装paddlepaddle GPU版本 &#xff08;我的cuda版本是11.8,根据你电脑装合适版本&#xff09; pip instal…...

DeepSeek与ChatGPT的对比分析

一 概述 1 DeepSeek DeepSeek是杭州深度求索&#xff08;DeepSeek&#xff09;官方推出的AI助手&#xff0c;免费体验与全球领先AI模型的互动交流。总参数达到6710亿的DeepSeek-V3大模型&#xff0c;多项性能指标对齐海外顶尖模型&#xff0c;用更快的速度、更加全面强…...

OpenAI Swarm 多智能体框架介绍

目录 一、什么是 Swarm &#xff1f; 二、Swarn 使用方法 2.1 安装依赖 2.2 实例 本篇文章主要介绍下 OpenAI Swarm 多智能体框架。 一、什么是 Swarm &#xff1f; Swarm 是 OpenAI 开源的一款多智能体框架&#xff0c;但 OpenAI 对 Swarm 的定位是教育性、实验性的框架&…...

华大MCU HC32F005端口GPIO控制失效问题

1. 问题来源&#xff1a;RS485通信时&#xff0c;且数据量大、持续运行一段时间后&#xff0c;发现RS485使能引脚没有得到释放&#xff0c;导致总线锁死&#xff0c;无法通信&#xff0c;影响到整个总线的设备。 2. 问题分析&#xff1a;1&#xff09;经过测试和跟踪&#xff…...

Android今日头条的屏幕适配方案

今日头条的屏幕适配方案是一种基于动态调整设备密度&#xff08;density&#xff09;的适配方法&#xff0c;其核心原理是通过修改系统默认的屏幕密度参数&#xff0c;使得不同分辨率和尺寸的设备能够按照设计图的尺寸比例显示界面元素。以下是其核心原理与实现细节的总结&…...

抓包工具是什么?

抓包工具是一种用于捕获和分析网络数据包的软件或硬件设备。它可以帮助用户监控网络通信过程&#xff0c;查看网络中传输的数据内容、协议类型、源地址、目的地址等信息。以下是关于抓包工具的一些详细解释&#xff1a; 1. 主要功能 捕获数据包&#xff1a;抓包工具能够实时捕…...

微信小程序消息推送解密

package com.test.main.b2b;import org.apache.commons.codec.binary.Base64;import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.util.Arrays;/*** author * version 1.0* description: 解谜微信小…...

【大模型系列篇】DeepSeek-R1如何通过强化学习有效提升大型语言模型的推理能力?

如何通过强化学习&#xff08;RL&#xff09;有效提升大型语言模型&#xff08;LLM&#xff09;的推理能力&#xff1f; 《DeepSeek-R1: Incentivizing Reasoning Capability in LLMs via Reinforcement Learning》由DeepSeek-AI团队撰写&#xff0c;主要介绍了他们开发的第一代…...

企业存储系统

一、概述 数字经济 人类通过大数据&#xff08;数字化的知识与信息&#xff09;的识别—选择—过滤—存储—使用&#xff0c;引导、实现资源的快速优化配置与再生&#xff0c;实现经济高质量发展的经济形态。 产业互联网推动发展 企业开始进行数字化转型&#xff0c;将传统…...

数据结构系列一:初识集合框架+复杂度

前言 数据结构——是相互之间存在一种或多种特定关系的数据元素的集合。数据结构是计算机专业的基础课程&#xff0c;但也是一门不太容易学好的课&#xff0c;它当中有很多费脑子的东西&#xff0c;之后在学习时&#xff0c;你若碰到了困惑或不解的地方 都是很正常的反应&…...

【AI】GitHub Copilot

GitHub Copilot 是一款由 GitHub 和 OpenAI 合作开发的 AI 编程助手&#xff0c;它可以在多种开发工具中使用。以下是 GitHub Copilot 支持的主要开发工具和平台&#xff1a; 1. Visual Studio Code (VS Code) 官方支持&#xff1a;GitHub Copilot 在 VS Code 中拥有最完整的集…...

Linux系统编程学习 NO.14——缓冲区的概念、模拟实现Cstdio库

用户缓冲区 先介绍一下关于用户缓冲区的周边知识。 fread和fwrite的返回值 谈一谈fread和fwrite的返回值&#xff0c;如果写入/读取文件成功&#xff0c;fread或fwrite的返回值指的是实际写入/读取的内存块数量(实际的nmemb的大小)。假如fwrite写入的size是5字节&#xff0c;…...

Linux性能监控工具汇总

文章目录 前言一、性能监控工具介绍1.概念介绍2.常用组合方式3.对比 二、sar工具1.sar安装2.sar工具参数3.sar工具使用示例3.1.每两秒采集一次cpu使用情况&#xff0c;总计采集2次,然后输出CPU使用情况的统计信息3.2.磁盘IO使用情况统计3.3.内存使用情况统计3.4.网卡流量使用情…...

某手sig3-ios算法 Chomper黑盒调用

Chomper-iOS界的Unidbg 最近在学习中发现一个Chomper框架&#xff0c;Chomper 是一个模拟执行iOS可执行文件的框架&#xff0c;类似于安卓端大名鼎鼎的Unidbg。 这篇文章使用Chomper模拟执行某手的sig3算法&#xff0c;初步熟悉该框架。这里只熟悉模拟执行步骤以及一些常见的…...

MySQL版本选择与安装

MySQL版本选择与安装 MySQL 5.5 优点: 稳定性&#xff1a;5.5版本是长期支持&#xff08;LTS&#xff09;版本&#xff0c;因此它非常稳定&#xff0c;被广泛部署在生产环境中。 兼容性&#xff1a;与旧版本的MySQL和各种应用程序有很好的兼容性。 缺点: 过时&#xff1a;…...

【飞行器原理学习】——1. 机翼及机翼参数

飞行器原理学习——1.机翼 一、 概述 飞机的各种机翼是飞机的控制面 通过铰链、钢索、液压等方式连接在机身上 操纵面运动时&#xff0c;会改变机翼的弧度和形状&#xff0c;使流经的空气发生偏转&#xff0c;从而影响空气动力的大小。使飞机围绕着3轴运动 二、机翼的操纵面…...