Hive 分区表新增字段 cascade

这篇具有很好参考价值的文章主要介绍了Hive 分区表新增字段 cascade。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

在以前上线的分区表中新加一个字段,并且要求添加到指定的位置列。

模拟测试

加 cascade 操作

  • 创建测试表
create table if not exists sqltest.table_add_column_test(
  org_col1 string comment '原始数据1',
  org_col2 string comment '原始数据2'
)
comment '增加分区表字段的测试表'
partitioned by (dt string comment '分区日期')
;
  • 插入测试数据
insert into table sqltest.table_add_column_test partition(dt='20230313') values ('org_col1_0313','org_col2_0313');
insert into table sqltest.table_add_column_test partition(dt='20230314') values ('org_col1_0314','org_col2_0314');
  • 查看现有数据
 select * from table_add_column_test;
+---------------------------------+---------------------------------+---------------------------+--+
| table_add_column_test.org_col1  | table_add_column_test.org_col2  | table_add_column_test.dt  |
+---------------------------------+---------------------------------+---------------------------+--+
| org_col1_0313                   | org_col2_0313                   | 20230313                  |
| org_col1_0314                   | org_col2_0314                   | 20230314                  |
+---------------------------------+---------------------------------+---------------------------+--+
  • 官网添加列的语法
ALTER TABLE table_name 
  [PARTITION partition_spec]                 -- (Note: Hive 0.14.0 and later)
  ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
  [CASCADE|RESTRICT]                         -- (Note: Hive 1.1.0 and later)

注意: Hive 1.1.0 中有 CASCADE|RESTRICT 子句。ALTER TABLE ADD|REPLACE COLUMNS CASCADE命令修改表元数据的列,并将相同的更改级联到所有分区元数据。RESTRICT 是默认值,即不修改元数据。

  • 增加一列,指定增加到原始的两列中间
    先添加一列(注意: 必须添加 cascade 关键字,不然不会刷新旧分区数据,关键字 cascade 能修改元数据)
alter table sqltest.table_add_column_test add columns (added_column string comment '新添加的列') cascade;

查看数据

+---------------------------------+---------------------------------+-------------------------------------+---------------------------+--+
| table_add_column_test.org_col1  | table_add_column_test.org_col2  | table_add_column_test.added_column  | table_add_column_test.dt  |
+---------------------------------+---------------------------------+-------------------------------------+---------------------------+--+
| org_col1_0313                   | org_col2_0313                   | NULL                                | 20230313                  |
| org_col1_0314                   | org_col2_0314                   | NULL                                | 20230314                  |
+---------------------------------+---------------------------------+-------------------------------------+---------------------------+--+

再对列进行排序(注意: 必须添加 cascade 关键字,不然不会刷新旧分区数据,关键字 cascade 能修改元数据)

alter table sqltest.table_add_column_test change column added_column added_column string after org_col1 cascade;

再查看数据(注意: 虽然列名顺序变了,但 HDFS 文件内容并没有变化,所以结果第二列还是有数据,第三列没数据)

+---------------------------------+-------------------------------------+---------------------------------+---------------------------+--+
| table_add_column_test.org_col1  | table_add_column_test.added_column  | table_add_column_test.org_col2  | table_add_column_test.dt  |
+---------------------------------+-------------------------------------+---------------------------------+---------------------------+--+
| org_col1_0313                   | org_col2_0313                       | NULL                            | 20230313                  |
| org_col1_0314                   | org_col2_0314                       | NULL                            | 20230314                  |
+---------------------------------+-------------------------------------+---------------------------------+---------------------------+--+
  • 重刷旧分区数据(将以前第二列放到第三列位置,现第二列为新数据)
insert overwrite table sqltest.table_add_column_test partition(dt='20230313') select org_col1, 'added_col_0313', added_column from sqltest.table_add_column_test where dt = '20230313';
insert overwrite table sqltest.table_add_column_test partition(dt='20230314') select org_col1, 'added_col_0314', added_column from sqltest.table_add_column_test where dt = '20230314';

查看数据(旧分区数据有更新)

+---------------------------------+-------------------------------------+---------------------------------+---------------------------+--+
| table_add_column_test.org_col1  | table_add_column_test.added_column  | table_add_column_test.org_col2  | table_add_column_test.dt  |
+---------------------------------+-------------------------------------+---------------------------------+---------------------------+--+
| org_col1_0313                   | added_col_0313                      | org_col2_0313                   | 20230313                  |
| org_col1_0314                   | added_col_0314                      | org_col2_0314                   | 20230314                  |
+---------------------------------+-------------------------------------+---------------------------------+---------------------------+--+

不加 cascade 操作(针对已有分区数据,不包括新增分区)

  • 删除表
drop table if exists sqltest.table_add_column_test;
  • 创建测试表
create table if not exists sqltest.table_add_column_test(
  org_col1 string comment '原始数据1',
  org_col2 string comment '原始数据2'
)
comment '增加分区表字段的测试表'
partitioned by (dt string comment '分区日期')
;
  • 插入测试数据
insert into table sqltest.table_add_column_test partition(dt='20230313') values ('org_col1_0313','org_col2_0313');
insert into table sqltest.table_add_column_test partition(dt='20230314') values ('org_col1_0314','org_col2_0314');
  • 添加列(不加关键字 cascade)
alter table sqltest.table_add_column_test add columns (added_column string comment '新添加的列');

alter table sqltest.table_add_column_test change column added_column added_column string after org_col1;

查看数据文章来源地址https://www.toymoban.com/news/detail-508833.html

+---------------------------------+-------------------------------------+---------------------------------+---------------------------+--+
| table_add_column_test.org_col1  | table_add_column_test.added_column  | table_add_column_test.org_col2  | table_add_column_test.dt  |
+---------------------------------+-------------------------------------+---------------------------------+---------------------------+--+
| org_col1_0313                   | org_col2_0313                       | NULL                            | 20230313                  |
| org_col1_0314                   | org_col2_0314                       | NULL                            | 20230314                  |
+---------------------------------+-------------------------------------+---------------------------------+---------------------------+--+
  • 重刷旧分区数据
insert overwrite table sqltest.table_add_column_test partition(dt='20230313') select org_col1, 'added_col_0313', added_column from sqltest.table_add_column_test where dt = '20230313';
insert overwrite table sqltest.table_add_column_test partition(dt='20230314') select org_col1, 'added_col_0314', added_column from sqltest.table_add_column_test where dt = '20230314';
  • 查看数据(旧分区没有变化)
+---------------------------------+-------------------------------------+---------------------------------+---------------------------+--+
| table_add_column_test.org_col1  | table_add_column_test.added_column  | table_add_column_test.org_col2  | table_add_column_test.dt  |
+---------------------------------+-------------------------------------+---------------------------------+---------------------------+--+
| org_col1_0313                   | added_col_0313                      | NULL                            | 20230313                  |
| org_col1_0314                   | added_col_0314                      | NULL                            | 20230314                  |
+---------------------------------+-------------------------------------+---------------------------------+---------------------------+--+

到了这里,关于Hive 分区表新增字段 cascade的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Hive 分区表 (Partitioned Tables) 『 创建分区表 | CRUD分区 | 修复分区 | 数据导入(静态分区、动态分区) | 查询数据/表结构』

    条件:假如现有一个角色表 t_all_hero ,该表中有6个清洗干净的互不干扰的数据文件:射手、坦克、战士、法师、刺客、辅助 要求:查找出名字为射手且生命值大于6000的角色人数 惯性解决方法:按照MySQL思维很容易想到 问:如何提高效率?这样虽然能够解决问题,但是由于要

    2024年02月04日
    浏览(58)
  • Hive分区表修改(增删)列

    环境:CDH6.3.0,Hive 2.1.1-cdh6.3.0 基础数据分区表test1,包含a,b,c,d共4列加分区列p_day,向其中插入两行数据 表中数据及parquet文件信息如下: test2表直接使用test1表的文件: 修复分区并查询数据 删除test2表的a列,看起来只有通过replace columns实现,但是运行报错,根据官方文档,只

    2023年04月26日
    浏览(65)
  • Hive 分区表和分桶表

    在《Hive 建表语句解析》文章中,建表的时候我们可以使用 PARTITIONED BY 子句和 CLUSTERED BY 子句来创建分区表和分桶表,为什么要创建分区表和分桶表呢?分区表和分桶表有什么区别呢? 1. 为什么分区 在Hive 查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作。有时

    2023年04月23日
    浏览(33)
  • Hive ---- 分区表和分桶表

    Hive中的分区就是把一张大表的数据按照业务需要分散的存储到多个目录,每个目录就称为该表的一个分区。在查询时通过where子句中的表达式选择查询所需要的分区,这样的查询效率会提高很多。 1. 创建分区表 2. 分区表读写数据 1)写数据 (1)load 数据准备 在/opt/module/hiv

    2024年02月10日
    浏览(46)
  • Hive创建分区表并插入数据

    业务中经常会遇到这种需求:数据每天全量更新,但是要求月底将数据单独保存一份以供后期查询某月节点的信息。这时就要考虑用到Hive的分区表实现,即按照月份创建分区表,相当于新的月份数据保存在新表,进而实现保存了历史数据。 分区表的创建本质是在HDFS创建了一

    2024年02月07日
    浏览(34)
  • 二次开发DataX以支持HIVE分区表

            最近在一个大数据的项目开发中使用到了数据同步工具DataX,但在使用过程中发现了DataX对HIve分区表的支持不太友好。         具体体现在将数据库中的数据同步到HIVE分区表时,写入目录为HIVE表分区为dt=XXXX,如果不提前创建该分区,会报目录不存在的错误,如

    2024年02月16日
    浏览(34)
  • 【Hive大数据】Hive分区表与分桶表使用详解

    目录 一、分区概念产生背景 二、分区表特点 三、分区表类型 3.1 单分区 3.2 多分区

    2024年02月03日
    浏览(33)
  • hive分区表之insert overwrite 注意事项

    hive version 3.1.3 以往我们插入分区 需要 insert ovewrite table  p_table partition(period_id=‘202212’)  select id name from xxxx;  或者是 insert overwrite table  select  id,name,period_id from table where period_id=202212 前者是指定分区,后者是动态分区。没啥好说的。 但是今天遇到一个问题,如果我查询的数

    2024年02月13日
    浏览(43)
  • HIVE表数据快速构造(分区表、orc、text)

    引言 当需要在hive数仓中去创建测试表并构造测试数据时,通常需要在安装了hive客户端的服务器环境下,通过执行命令的方式建表。通过在HDFS上上传和加载数据文件的方式来加载数据到hive表中。其中操作算不得多复杂,但比较依赖对环境和命令的熟悉,并且操作不够可视化

    2024年02月16日
    浏览(31)
  • 【DolphinScheduler】datax读取hive分区表时,空分区、分区无数据任务报错问题解决

    最近在使用海豚调度DolphinScheduler的Datax组件时,遇到这么一个问题:之前给客户使用海豚做的离线数仓的分层搭建,一直都运行好好的,过了个元旦,这几天突然在数仓做任务时报错,具体报错信息如下: com.alibaba.datax.common.exception.DataXException: Code:[HdfsReader-08], Description:[您尝

    2024年01月16日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包