栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

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:

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

删除原表,重新创建新表,执行原表数据路径。但分区信息需重新加载。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/758603.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号