Hive insert overwrite 问题

2023-10-26

微信公众号:苏言论
理论联系实际,畅言技术与生活。

1 测试的版本

Apache hive 1.1.0/2.3.1/3.1.0

2 insert overwrite使用说明

表类型 使用场景 hive操作逻辑
非分区表 insert overwrite table t select col from b 先删除现有数据表目录,再插入新的数据,不存在旧数据保留的情况
分区表 insert overwrite table t partition(part_name=’’) select col from b 先删除现有分区数据目录,再插入新的数据,不存在旧数据保留的情况
分区表 insert overwrite table t select col,part_name from b 只对新数据集中存在数据变更的分区进行覆盖,不涉及数据变更的分区和旧数据会被保留

3 示例

考虑下面的课程安排表数据结构和数据;

drop table class_course_schedule;
create table class_course_schedule(id int,course_name string,course_time date) partitioned by(city string);
insert into class_course_schedule values
(1,'语文','2020-02-01','guangzhou'),
(2,'语文','2020-02-02','guangzhou'),
(10,'语文','2020-02-03','guangzhou'),
(3,'政治','2020-02-01','hangzhou'),
(4,'体育','2020-02-02','hangzhou'),
(5,'英语','2020-02-03','hangzhou'),
(6,'音乐','2020-02-01','shanghai'),
(7,'物理','2020-02-02','shanghai'),
(8,'计算机','2020-02-03','shanghai'),
(9,'画图','2020-02-04','shanghai');

select * from class_course_schedule t;
+-------+----------------+----------------+------------+
| t.id  | t.course_name  | t.course_time  |   t.city   |
+-------+----------------+----------------+------------+
| 1     | 语文           | 2020-02-01     | guangzhou  |
| 2     | 语文           | 2020-02-02     | guangzhou  |
| 10    | 语文           | 2020-02-03     | guangzhou  |
| 3     | 政治           | 2020-02-01     | hangzhou   |
| 4     | 体育           | 2020-02-02     | hangzhou   |
| 5     | 英语           | 2020-02-03     | hangzhou   |
| 6     | 音乐           | 2020-02-01     | shanghai   |
| 7     | 物理           | 2020-02-02     | shanghai   |
| 8     | 计算机         | 2020-02-03     | shanghai   |
| 9     | 画图           | 2020-02-04     | shanghai   |
+-------+----------------+----------------+------------+
10 rows selected (1.459 seconds)

对表进行insert overwrite,比如;

insert overwrite table class_course_schedule select * from class_course_schedule where course_name!='语文';

由于city='guangzhou’只有course_name='语文’的数据记录,select返回的数据集中city='guangzhou’分区的数据没有变化,hive从返回的select数据集中删除整个city='guangzhou’分区的情况下进行过滤,所以旧分区(city=‘guangzhou’)没有被重写,数据被保留;

select * from class_course_schedule t;
+-------+----------------+----------------+------------+
| t.id  | t.course_name  | t.course_time  |   t.city   |
+-------+----------------+----------------+------------+
| 1     | 语文           | 2020-02-01     | guangzhou  |
| 2     | 语文           | 2020-02-02     | guangzhou  |
| 10    | 语文           | 2020-02-03     | guangzhou  |
| 3     | 政治           | 2020-02-01     | hangzhou   |
| 4     | 体育           | 2020-02-02     | hangzhou   |
| 5     | 英语           | 2020-02-03     | hangzhou   |
| 6     | 音乐           | 2020-02-01     | shanghai   |
| 7     | 物理           | 2020-02-02     | shanghai   |
| 8     | 计算机         | 2020-02-03     | shanghai   |
| 9     | 画图           | 2020-02-04     | shanghai   |
+-------+----------------+----------------+------------+
10 rows selected (1.459 seconds)

hive按设计工作,因为只需要覆盖所需分区的情况,对于增量分区负载来说是正常的,在这种情况下,无需触摸其它分区;如果覆盖无需更改的分区,则会导致非必要数据丢失,恢复起来可能会非常昂贵
再对表进行insert overwrite;

insert overwrite table class_course_schedule select * from class_course_schedule where course_name!='英语';

由于 course_name='英语’所在的分区city='hangzhou’中course_name非一致数据,select返回的数据集中city='guangzhou’分区的数据有变化,hive对其重写;

+-------+----------------+----------------+------------+
| t.id  | t.course_name  | t.course_time  |   t.city   |
+-------+----------------+----------------+------------+
| 1     | 语文           | 2020-02-01     | guangzhou  |
| 2     | 语文           | 2020-02-02     | guangzhou  |
| 10    | 语文           | 2020-02-03     | guangzhou  |
| 3     | 政治           | 2020-02-01     | hangzhou   |
| 4     | 体育           | 2020-02-02     | hangzhou   |
| 6     | 音乐           | 2020-02-01     | shanghai   |
| 7     | 物理           | 2020-02-02     | shanghai   |
| 8     | 计算机         | 2020-02-03     | shanghai   |
| 9     | 画图           | 2020-02-04     | shanghai   |
+-------+----------------+----------------+------------+
9 rows selected (0.562 seconds)

4 建议的操作

  1. 分区表指定具体分区,减少对不相关分区的影响;
insert overwrite table class_course_schedule partition(city='guangzhou') values
(12,'语文01','2020-02-12'),
(22,'语文02','2020-02-22'),
(19,'语文03','2020-02-19');

+-------+----------------+----------------+------------+
| t.id  | t.course_name  | t.course_time  |   t.city   |
+-------+----------------+----------------+------------+
| 12    | 语文01         | 2020-02-12     | guangzhou  |
| 22    | 语文02         | 2020-02-22     | guangzhou  |
| 19    | 语文03         | 2020-02-19     | guangzhou  |
| 3     | 政治           | 2020-02-01     | hangzhou   |
| 4     | 体育           | 2020-02-02     | hangzhou   |
| 6     | 音乐           | 2020-02-01     | shanghai   |
| 7     | 物理           | 2020-02-02     | shanghai   |
| 8     | 计算机         | 2020-02-03     | shanghai   |
| 9     | 画图           | 2020-02-04     | shanghai   |
+-------+----------------+----------------+------------+
9 rows selected (0.574 seconds)
  1. 如果仍然要删除分区,可以删除/重建表(可能需要为此再创建一个中间表),然后将分区加载到其中;或者计算需要单独删除的分区,然后执行ALTER TABLE DROP PARTITION删除分区。

5 参考链接

Inserting datain to HiveTables from queries

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hive insert overwrite 问题 的相关文章

随机推荐

  • phpcms V9 局域网访问问题

    按下列步骤操作修改域名 1 打开caches configs system php文件 然后批量替换里面的域名 如把http 127 0 0 1替换为您的新域名 如http 192 168 114 140 保存 2 登陆后台 找到 设置 站
  • anaconda安装tensorboard过慢

    不要从官网下载tensorboard conda activate your environment name 通过国内的豆瓣源下载 pip install i https pypi douban com simple tensorboar
  • React 之 解决页面多次重复渲染造成页面卡顿问题

    一 场景案例 描述 画面上存在多个卡片 卡片是动态渲染的 每个卡片有自己的相关操作 比如 点击卡片的菜单项 出现弹框 弹框中需要填入相关的信息 在输入信息的过程中会出现一个字一个字出来的卡顿效果 或者是点击卡片菜单项 弹框出现的时候比较卡顿
  • 编译原理:LL(1)、LR(0)、SLR(1)分析(大招)

    LL 1 含义 第一个L代表从左到右扫描输入序列 第二个L表示产生最左推导 1表示在确定分析器的每一步动作时向前看一个终结符 判断 第一步找到能够推出是空的非终结符 像在这个文法中 画勾的就是可以推出是空的非终结符 第二步 求first集合
  • 软件工程之总体设计

    总体设计是软件工程中的一个重要阶段 它关注整个系统的结构和组织 旨在将系统需求转化为可执行的软件解决方案 总体设计决定了系统的架构 模块划分 功能组织以及数据流和控制流等关键方面 可行性研究 具体方面 经济可行性 技术可行性 操作可行性 法
  • 2020 JAVA eclipse 中文汉化包 安装教程--傻瓜式操作

    下载的是 Eclipse IDE for Enterprise Java Developers includes Incubating components 这个版本 直接下载了 解压就可以使用 用的是官方的汉化包 下载 解压 复制 粘贴
  • 5个步骤实现软件质量的快速提升

    每个人都希望软件质量更高 速度更快 对现代软件开发团队的要求是巨大的 从竞争和市场压力的增加 功能和复杂性的增加 到对产品质量 安全性和可靠性的更高期望 敏捷开发方法常常受到追捧 因为它能更快地响应变化 更好地实现客户需求 但是 敏捷和De
  • ESXI虚拟机厚置备延迟置零转换为Thin Provision方法

    最近有博友提出一个需求 他们公司的服务器磁盘空间不足了 现在无法正常创建虚拟机 其实并没有使用到这么多空间 只是因为划了这么多空间给虚拟机 所以造成磁盘空间不足 那么是否有什么解决的方法了 详细了解发现虚拟机在配置磁盘的时候设置的是厚置备延
  • RC低通滤波器

    先来几个不错的资源链接 1 RC滤波器截止频率在线计算器 http www eechina com tools rc filter cutoff frequency html 2 详谈一阶RC低通滤波器如何过滤高频噪声 网上不错的一个帖子
  • Linux学习-43-挂载Linux系统外的文件mount和卸载文件系统umount命令用法

    10 10 mount命令详解 挂载Linux系统外的文件 所有的硬件设备必须挂载之后才能使用 新硬盘先格式化后创建分区 再对分区进行挂载 只不过 有些硬件设备 比如硬盘分区 在每次系统启动时会自动挂载 而有些 比如 U 盘 光盘 则需要手
  • 使用w,vmstat命令,top命令,sar命令,nload命令

    监控系统状态 w命令 uptime load average 0 00 0 01 0 05 上面这条显示的就是系统负载 后面有三段数字 root localhost w 21 33 04 up 41 min 1 user load aver
  • STS & 开发异常

    1 Failed to start component 情景 本地 tomcat 部署了两个项目 一个provider 一个 server 前台通过server访问 provider 在开发的时候 将tomcat部署的服务 Clean 或者
  • Android-模块化-项目实践和探索分享

    文章目录 前言 一 gradle统一配置 1 多模块项目的构建 2 根项目的构建配置 3 常用公用的构建配置 二 nexus与maven publish 1 安装nexus 2 仓库 3 maven publish 三 动态依赖 1 依赖的
  • 在IDEA中使用Maven将项目打包成jar包

    1 在pom xml文件中添加代码
  • [Python图像处理] 二十九.MoviePy视频编辑库实现抖音短视频剪切合并操作

    该系列文章是讲解Python OpenCV图像处理知识 前期主要讲解图像入门 OpenCV基础用法 中期讲解图像处理的各种算法 包括图像锐化算子 图像增强技术 图像分割等 后期结合深度学习研究图像识别 图像分类应用 希望文章对您有所帮助 如
  • 【质量】代码质量评价标准

    今天来思考下如何评价代码质量 业界公认比较认可的七大标准 可维护性 maintainability 可读性 readability 可扩展性 extensibility 灵活性 flexibility 简洁性 simplicity 可复用性
  • ReentrantReadWriteLock

    一ReentrantReadWriteLock 是Lock的另一种实现方式 我们知道ReentrantLock是一个排他锁 同一时间只允许一个线程访问 而ReentrantReadWriteLock允许多个读线程同时访问 但不允许写线程和读
  • RuntimeError: Address already in use

    Pytorch用多张GPU训练时 会报地址已被占用的错误 其实是端口号冲突了 因此解决方法要么kill原来的进程 要么修改端口号 在代码里重新配置 torch distributed init process group dist init
  • ajax异步加载jqgrid之动态创建

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 之前写过一篇过于ajax异步加载jqgrid的文章 那个只是一个特殊的情况 如果创建不同数据库表的jqgrid 必须分别写servlet dao层和连接池 很麻烦 今天我写
  • Hive insert overwrite 问题

    微信公众号 苏言论 理论联系实际 畅言技术与生活 文章目录 1 测试的版本 2 insert overwrite使用说明 3 示例 4 建议的操作 5 参考链接 1 测试的版本 Apache hive 1 1 0 2 3 1 3 1 0 2