
# 关闭Kudu table软删除特性
#### 操作场景
本章节介绍如何关闭Kudu的soft delete特性，即通过DELETE操作删除表后立即删除数据，而不是在后台存留一段时间后再彻底删除。
Kudu默认开启soft delete特性。当通过DELETE操作删除表时，数据并不会立即从Kudu中彻底删除，这些数据会在后台存留一段时间（默认为6小时），之后才会被彻底删除。通过这一特性，可以在误操作的情况下恢复表和数据，从而提供了一定程度的数据保护。
如下图所示，test表处于Soft_deleted状态。
![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002591627476.png "点击放大")
处于Soft_deleted状态的表，可通过如下命令找回，其中table_id为上图的蓝色字符串。
```
kudu table recall <kudumaster_addresses> <table_id>
```
如果在Impala中创建/删除Kudu表，则在软删除特性开启的状态下，通过Impala删除Kudu后无法立即重建同名的表，出现如下提示：
```
ERROR: ImpalaRuntimeException: Error creating Kudu table 'impala::xx.xx' CAUSED BY: ImpalaRuntimeException: Table 'impala::xx.xx' already exists in Kudu.
```
这表示Kudu表还处于软删除保留期内，并未完全删除。此时可以有如下选择：
- 创建其他名称的表。
- 在保留期之后再创建同名表（默认6小时）。
- 参考本章节操作关闭软删除特性，快速恢复。
 
#### 约束与限制
本章节仅适用于MRS 3.6.0-LTS及之后版本。
#### 关闭软删除
如果您需要立即删除表及其数据，可通过以下方式处理：
**方式一：Kudu全局生效**
1. 登录FusionInsight Manager系统。 
   详细操作请参考[访问集群Manager](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_2124.html)。
   
   
2. 选择"集群 \> 服务 \> Kudu \> 配置"，单击"全部配置"，搜索参数"default_deleted_table_reserve_seconds"，修改参数值为"0"。
3. 修改参数配置后，单击"保存"，根据界面提示操作后，等待配置保存成功。
4. 在Kudu服务概览页面，选择"更多 \> 重启服务/滚动重启服务"，验证管理员密码后，等待服务重启成功。 
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/warning_3.0-zh-cn.png)
   组件重启期间将无法对外提供服务，可能会影响集群的上层业务正常运行，请在业务空闲期或确认操作无影响后再执行本操作。
   
   
**方式二：Impala全局生效**
1. 登录FusionInsight Manager系统。 
   详细操作请参考[访问集群Manager](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_2124.html)。
   
   
2. 选择"集群 \> 服务 \> Impala \> 配置"，单击"全部配置"，搜索参数"default_query_options"，在值中新增",KUDU_TABLE_RESERVE_SECONDS=0"。
3. 修改参数配置后，单击"保存"，根据界面提示操作后，等待配置保存成功。
4. 在Impala实例页面，勾选所有状态为配置过期的Impalad实例，验证管理员密码后，重启实例。 
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/warning_3.0-zh-cn.png)
   组件实例重启期间将无法对外提供服务，可能会影响集群的上层业务正常运行，请在业务空闲期或确认操作无影响后再执行本操作。
   
   
**方式三：单表生效**
- 以Kudu命令行为例，指定-reserve_seconds=0即可立即删除表。
  ```
  kudu table delete <kudumaster_addresses> <table_name> -reserve_seconds=0
  ```
  
- 以Kudu Java SDK为例，在KuduClient.deleteTable()接口中指定删除时间为0立即删除表。
  ```
  KuduClient.deleteTable(<tableName>, <reserveSeconds>);
  ```
  
- 如果需要删除从Impala创建的Kudu表，比如通过Impala-shell删表，则可以配置如下query option立即删除表：
  ```
  set KUDU_TABLE_RESERVE_SECONDS=0;
  drop table <impala_table_name>;
  ```
  
 
