目录
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
删除原表,重新创建新表,执行原表数据路径。但分区信息需重新加载。文章来源地址https://www.toymoban.com/news/detail-460428.html
到了这里,关于hive建表语句 增加字段、分区基础操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!