gpt4 book ai didi

hadoop - 删除配置单元分区的外部表但保留分区

转载 作者:可可西里 更新时间:2023-11-01 14:25:56 34 4
gpt4 key购买 nike

使用外部配置单元表时,有没有一种方法可以删除目录中的数据,但通过查询保留分区。请注意我不想删除表并重新创建它。我只想清空底层文件夹并重新开始一个过程。我的表很大,按年、月、日和小时分区,手动重新创建分区需要很多时间。

谢谢

最佳答案

truncate table ... 删除所有数据。
truncate table partition (...) 删除特定分区的数据。

保留目录结构。


首先应该将外部表转换为管理表,例如

alter table t set tblproperties('EXTERNAL'='FALSE');

完成后,我们可以将其转换回来

alter table t set tblproperties('EXTERNAL'='TRUE');

演示

create table t (i int) partitioned by (x char(1));
set hive.exec.dynamic.partition.mode=nonstrict;
insert into t partition (x) values (1,'A'),(2,'B'),(3,'C');
alter table t set tblproperties('EXTERNAL'='TRUE');

select * from t;

+-----+-----+
| t.i | t.x |
+-----+-----+
| 1 | A |
| 2 | B |
| 3 | C |
+-----+-----+

dfs -ls -R /user/hive/warehouse/t;

drwxrwxrwx   - cloudera supergroup          0 2017-03-28 11:40 /user/hive/warehouse/t/x=A
-rwxrwxrwx 1 cloudera supergroup 2 2017-03-28 11:40 /user/hive/warehouse/t/x=A/000000_0
drwxrwxrwx - cloudera supergroup 0 2017-03-28 11:40 /user/hive/warehouse/t/x=B
-rwxrwxrwx 1 cloudera supergroup 2 2017-03-28 11:40 /user/hive/warehouse/t/x=B/000000_0
drwxrwxrwx - cloudera supergroup 0 2017-03-28 11:40 /user/hive/warehouse/t/x=C
-rwxrwxrwx 1 cloudera supergroup 2 2017-03-28 11:40 /user/hive/warehouse/t/x=C/000000_0

truncate table t partition (x='B');

FAILED: SemanticException [Error 10146]: Cannot truncate non-managed table t.

alter table t set tblproperties('EXTERNAL'='FALSE');

truncate table t partition (x='B');

select * from t;

+-----+-----+
| t.i | t.x |
+-----+-----+
| 1 | A |
| 3 | C |
+-----+-----+

dfs -ls -R /user/hive/warehouse/t;

drwxrwxrwx   - cloudera supergroup          0 2017-03-28 11:40 /user/hive/warehouse/t/x=A
-rwxrwxrwx 1 cloudera supergroup 2 2017-03-28 11:40 /user/hive/warehouse/t/x=A/000000_0
drwxrwxrwx - cloudera supergroup 0 2017-03-28 11:42 /user/hive/warehouse/t/x=B
drwxrwxrwx - cloudera supergroup 0 2017-03-28 11:40 /user/hive/warehouse/t/x=C
-rwxrwxrwx 1 cloudera supergroup 2 2017-03-28 11:40 /user/hive/warehouse/t/x=C/000000_0

truncate table t;

+-----+-----+
| t.i | t.x |
+-----+-----+

dfs -ls -R /user/hive/warehouse/t;

drwxrwxrwx   - cloudera supergroup          0 2017-03-28 11:43 /user/hive/warehouse/t/x=A
drwxrwxrwx - cloudera supergroup 0 2017-03-28 11:43 /user/hive/warehouse/t/x=B
drwxrwxrwx - cloudera supergroup 0 2017-03-28 11:43 /user/hive/warehouse/t/x=C

alter table t set tblproperties('EXTERNAL'='TRUE');

关于hadoop - 删除配置单元分区的外部表但保留分区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43071301/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com