hive删除原外部表,新建新表,同步元数据

本文详细介绍使用Hive SQL进行表操作的方法,包括删除已存在的表、创建新表、设置分区和桶、指定SerDe及存储格式等。通过具体实例,帮助读者掌握Hive表的管理和数据同步技巧。

#删除已存在的表
drop table if exists user_data;

#新建表
create external table if not exists user_data(
user_id string,
name string,
age int
)PARTITIONED BY(ds string)
CLUSTERED BY (user_id) INTO 10 BUCKETS
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe' WITH SERDEPROPERTIES ('field.delim'='§')
STORED AS TEXTFILE TBLPROPERTIES ('serialization.encoding'='utf-8');

#同步旧表的分区数据
msck repair table po_weibo_comment_data;

 

 

Hive 中,外部表(External Table)的设计特点是仅存储元数据定义,而实际数据存储在外部存储系统中(如 HDFS)。因此,直接删除外部表的数据不会像管理内部(Managed Table)那样自动清除底层数据[^1]。 要删除 Hive 外部表中的数据,需采取以下方法之一或组合使用: ### 删除外部表元数据 如果仅需要移除的定义,而不删除底层数据,可以使用 `DROP TABLE` 语句: ```sql DROP TABLE IF EXISTS external_table_name; ``` 此操作仅删除 Hive 中的定义,始数据仍然保留在其存储位置[^1]。 ### 手动删除底层数据 由于外部表的数据不由 Hive 管理,因此需要手动从存储系统中删除数据。例如,如果数据存储在 HDFS 上,可以使用以下命令: ```bash hadoop fs -rm -r /path/to/external/table/data ``` ### 清空外部表数据(保留元数据) 若希望清空外部表的数据但仍保留其定义,可以采用以下方法: 1. **重命名外部表并重建**: - 首先重命名: ```sql ALTER TABLE external_table_name RENAME TO external_table_name_old; ``` - 然后创建一个空的外部表: ```sql CREATE EXTERNAL TABLE external_table_name ( column1 STRING, column2 INT ) LOCATION '/path/to/new/data/location/'; ``` 2. **使用分区**(如果适用): - 如果外部表是分区,可以删除特定分区数据: ```sql ALTER TABLE external_table_name DROP IF EXISTS PARTITION (partition_column='value'); ``` - 此操作会删除对应的元数据,但底层 HDFS 数据仍需手动清理[^1]。 ### 使用 Hive ACID 事务(需启用事务支持) 如果 Hive 环境支持 ACID 事务(Hive 0.14+),可以将外部表设置为事务,并使用 `DELETE` 语句: ```sql DELETE FROM TABLE external_table_name WHERE condition; ``` 此方法要求 Hive 和文件格式支持事务性操作,并且底层存储系统需兼容 ACID 语义。 ##
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卢子墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值