hive建表语句 增加字段、分区基础操作

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

目录

hive建表

内部分区表

外部分区表

表结构复制:

hive表删除

hive表重命名

表修改操作

增加分区

修改分区

删除分区

新增表字段 


hive建表

IF NOT EXISTS : 表不存在才会创建

 分隔符:field.delim是表的两个列字段之间的文件中的字段分隔符.

               serialization.format是文件序列化时表中两个列字段之间的文件中的字段分隔符.

分区partition:创建表时可指定分区字段,多个分区字段之间可用“,”分割。

如:PARTITIONED BY ( 
  `hp_settle_dt` string,trans_label string)

内部分区表

CREATE TABLE IF NOT EXISTS `tbl_usr_bind_card_count`(
  `usr_id` string, 
  `trans_flow` string, 
  `trans_time` string, 
  `phone` string, 
  `cert_id` string, 
  `card_no` string)
PARTITIONED BY ( 
  `hp_settle_dt` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
WITH SERDEPROPERTIES ( 
  'field.delim'='\;', 
  'serialization.format'='\;') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  '/user/bdhysfas/data/tmp/tbl_usr_bind_card_count';

路径:创建内部表时可指定路径,若路径不存在建表时会自动创该路径。不指定路径时会存放默认路径。
 

外部分区表

CREATE EXTERNAL TABLE IF NOT EXISTS `tbl_usr_bind_card_count`(
  `usr_id` string, 
  `trans_flow` string, 
  `trans_time` string, 
  `phone` string, 
  `cert_id` string, 
  `card_no` string)
PARTITIONED BY ( 
  `hp_settle_dt` string)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' 
WITH SERDEPROPERTIES ( 
  'field.delim'='\;', 
  'serialization.format'='\;') 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  '/user/bdhysfas/data/tmp/tbl_usr_bind_card_count';

关键字EXTENAL告诉hive这张表是外部的。

路径:创建外部表时可指定路径,表创建时不会自动生成指定路径,所以要先创建路径再创建表。不指定路径时会存放默认路径。

因为表是外部的,所以hive并非认为完全拥有这份数据。因此删除表并不会删除掉这份数据,但是描述表的元数据信息会被删掉。

表结构复制:

CREATE EXTERNAL TABLE IF NOT EXISTS tbl_usr_bind_card_count1 
LIKE tbl_usr_bind_card_count
LOCATION '/user/bdhysfas/data/tmp/tbl_usr_bind_card_count1';

注:如果省略掉关键字EXTERNAL而且源表是外部表的话,那么生成的新表也将是外部表,如果源表是内部表,那么生成的表将是内部表。如果语句中包含EXTERNAL,即便源表是内部表,新创建的表也会是外部表。

hive表删除

DROP TABLE tbl_usr_bind_card_count;

hive表重命名

-- 将表tbl_usr_bind_card_count重命名为tbl_usr_bind_card_count2

ALTER TABLE tbl_usr_bind_card_count RENAME TO tbl_usr_bind_card_count2;

表修改操作

增加分区

-- 添加分区

ALTER TABLE tbl_usr_bind_card_count ADD IF NOT EXISTS

PARTITION(hp_settle_dt = 20220301);

-- 添加分区并指定路径

ALTER TABLE tbl_usr_bind_card_count ADD IF NOT EXISTS

PARTITION(hp_settle_dt = 20220301) LOCATION  '/user/bdhysfas/data/tmp/tbl_usr_bind_card_count/hp_settle_dt=20220301';

修改分区

ALTER TABLE tbl_usr_bind_card_count PARTITION(hp_settle_dt=20220301) 

SET LOCALTION  '/user/bdhysfas/data/tbl_usr_bind_card_count/hp_settle_dt=20220301';

删除分区

ALTER TABLE tbl_usr_bind_card_count  DROP PARTITION(hp_settle_dt=20220301);

新增表字段 

方案1:

ALTER TABLE tbl_oper_in_flow add columns(less_recovery double,remark1 string,remark2 string,remark3 string); 

对于旧的分区的可正常查询,新加的字段值为空。但是旧的分区的数据无法插入或更新,新的分区可正产插入和查询。

方案2:

ALTER TABLE  tbl_oper_in_flow add columns(less_recovery double,remark1 string,remark2 string,remark3 string CASCADE) ; 

可加工旧的分区的历史数据,使所以分区的数据可正常查询和插入,但可能加载时间过长。

方案3:

此方案只适用于外部分区表

删除原表,重新创建新表,执行原表数据路径。但分区信息需重新加载。文章来源地址https://www.toymoban.com/news/detail-460428.html

 

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

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

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

相关文章

  • Hive 分区表新增字段 cascade

    在以前上线的分区表中新加一个字段,并且要求添加到指定的位置列。 加 cascade 操作 创建测试表 插入测试数据 查看现有数据 官网添加列的语法 注意: Hive 1.1.0 中有 CASCADE|RESTRICT 子句。 ALTER TABLE ADD|REPLACE COLUMNS CASCADE 命令修改表元数据的列,并将相同的更改级联到所有分区

    2024年02月11日
    浏览(42)
  • ALTER TABLE 分区操作-动态增加一级,多级分区,动态删除分区

    alter 分区操作包括增加分区和删除分区操作,这种分区操作在Spark3.x之后被支持,spark2.4版本不支持,并且使用时,必须在spark配置中加入spark.sql.extensions属性,其值为:org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,在添加分区时还支持分区转换,语法如下: 添加分区语

    2024年02月16日
    浏览(32)
  • 【hive】—原有分区表新增加列(alter table xxx add columns (xxx string) cascade;)

    需求:需要在之前上线的分区报表中新增加一列。 1、创建分区测试表并插入测试数据 查看原有分区表test_1的表结构 2、新增加一列 grade,数据类型为strIng 查看添加列之后的数据结构 3、新增加列grade有数据后,插入新的分区B数据正常显示,原来A区grade列为NULL。 原因是: h

    2024年02月08日
    浏览(37)
  • ES映射操作 已创建的ES索引 增加映射字段(类似DB库增加给表增加字段)一样

    ES已存在的索引下添加映射 解释如下:给ticketing_order_info的索引,增加映射字段verificationCodeState,字段类型为integer 实现: PUT /ticketing_order_info/_mapping/ {     \\\"properties\\\": {         \\\"verificationCodeState\\\": {             \\\"type\\\": \\\"integer\\\"         }     } } PUT /ticketing_order_i

    2024年02月16日
    浏览(46)
  • 二百二十四、Kettle——曲线实现从Hive插入更新到ClickHouse(分区字段是month或year)

    对于以month、year为分区字段的数据,不是像day字段分区那样每天增量插入更新即可,而是要以部分字段查询、部分字段更新,但是ClickHouse数据库并不适合更新操作,直接使用Kettle的插入更新控件会导致问题,必须曲线实现这个功能 对于这类表,每天执行任务时scene_name、dev

    2024年02月21日
    浏览(28)
  • 理解case when then else end 的使用,基础概念,建表语句,用例讲解

    case :表示需要处理的字段 when :表示条件 then :表示当when执行为true时,再执行的语句 else :表示当所有的when执行为false时,再执行的语句 end:表示 case 语句结束的结尾 图形化表格 执行sql语句 结果 讲解:进行匹配的是名字name,首先匹配第一行,name是等于张三,所以返回

    2024年02月08日
    浏览(51)
  • sql建库,建表基础操作

    当涉及到SQL建库和建表操作时,以下是一个简单的示例: 1. 建库(创建数据库) sql复制代码 CREATE DATABASE mydatabase; 上述语句将创建一个名为 mydatabase 的数据库。 2. 选择数据库 在创建表之前,需要选择要在其中创建表的数据库。 sql复制代码 USE mydatabase; 上述语句将选择 mydat

    2024年02月21日
    浏览(27)
  • sql 语句 字段字符串操作

    substring_index() 函数 字符串截取 参考大神博客 replace() 字符串替换 ROUND() 函数 保留多少位小数 参考大神博客 locate() 函数 判断某个字段属性值是否包含某个字符串 concat() 函数 字段属性值连接 case when then else 参考大神博客

    2024年02月13日
    浏览(26)
  • SQL语句学习笔记(对库、表、字段、的操作)

    查看mysql的状态 status 启动、停止 mySQL服务 图像界面方法: dos窗口执行:services.msc 控制面板–管理工具–服务 命令行方法: 启动: net start mysql80 停止: net stop mysql80 添加环境变量: 在path编辑:添加路径:C:Program FilesMySQLMySQL Server 8.0bin cmd登录:mysql -h localhost -u root -p 输

    2024年02月02日
    浏览(25)
  • Hive基础知识(十六):Hive-SQL分区表使用与优化

    分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。 Hive 中的分区就是分目录 ,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过 WHERE 子句中的表达式选择查询所需要的指定的分区,这样的 查询效率会提高很多

    2024年01月18日
    浏览(33)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包