holodesk表drop之后如何恢复

  其他常见问题
内容纲要

概要描述


本文主要介绍,holodesk表在做了 DROP 误删操作之后,如何恢复,仅供参考。

一般来说,holodesk表的自动清理策略,每1小时清理7天之前的回收站文件:
CLEAN_TRASH_TIME_PERIOD_S:数值类型,表示清理回收站定时任务触发周期,单位为秒,最小配置600,默认值3600s,也就是1小时;
TABLE_KEEP_IN_TRASH_TIME_S:数值类型,表示处于回收站中表的最小保留时间,单位为秒,最小配置600,默认值604800s,也就是7天;
5.x arogdb参数为TDDMS的:
shiva.master.scheduler.clean_trash_period_s 是每隔多久检测一次
shiva.master.scheduler.keep_trash_time_s 是回收站文件保留期限

注意:truncate 操作是不会进入回收站的

解决方案


测试环境:Argodb5.2.3 (quark 8.31.2 + tddms 2.3.4)

1.创建样例表,并插入一条数据

CREATE TABLE EMP_HOLO(
    EMPNO int,
    ENAME string,
    JOB string,
    MGR INT,
    HIREDATE DATE,
    SAL INT,
    COMM INT,
    DEPTNO INT
)CLUSTERED BY (empno) INTO 3 BUCKETS
STORED AS HOLODESK;

INSERT INTO EMP_HOLO VALUES (7369,'SMITH','CLERK',7902,tdh_todate('17-12-1980','dd-mm-yyyy'),800,NULL,20);

2. 将表DROP掉

DROP TABLE IF EXISTS EMP_HOLO;

3. 记录表的table id和table name

可以到 TDDMS Webserver – 库表 – Trash 页面,根据 Table Name搜到对应的表。
也可以通过curl命令获取

TABLE id : a62545e5f4b6475a8841c729d7dc6ee3
TABLE name : default.emp_holo_a80df0bb-ea03-495d-a5ac-a73d09ca8f5f

记下来,step4 会用到。

file

4. 挪出回收站 restore trash

有两种姿势可以将shiva表从trash中挪出:

shiva web 的recover table 按钮

file

curl命令
curl  -u shiva:shiva -X PUT "172.22.23.2:4567/trash?table_id=a62545e5f4b6475a8841c729d7dc6ee3&new_table_name=default.emp_holo_a80df0bb-ea03-495d-a5ac-a73d09ca8f5f"

file

执行上述任意一种操作后,仅在shiva中恢复了表,但是metastore中并不感知表已经恢复了,需要执行下面的sql语句来映射好meta信息。

5. 创建待恢复的表

--重建该表
CREATE TABLE EMP_HOLO(
       EMPNO int,
       ENAME string,
       JOB string,
       MGR INT,
       HIREDATE DATE,
       SAL INT,
       COMM INT,
       DEPTNO INT
)CLUSTERED BY (empno) INTO 3 BUCKETS
STORED AS HOLODESK;

如果表是分区表,需要在这一步手动逐个添加分区,ALTER TABLE t22 ADD PARTITION (p='p1');,数据分区详情可以在shiva界面上查看。

file

这一步是为了保证,在元数据中,创建出对应的分区。因为 add pattition 的过程分两步

  • 在 Metastore 中创建分区 Schema
    file
  • 在 TDDMS 中的表创建 Section(分区)

而执行第6步后,因为 Section 已存在,则无法再添加。

6. 通过tblproperties关联shiva表

将前面的Table name放置到下面的holodesk.tablename属性里面去

ALTER TABLE EMP_HOLO SET TBLPROPERTIES ('holodesk.tablename'='emp_holo_a80df0bb-ea03-495d-a5ac-a73d09ca8f5f' );

验证数据正常可查。

FAQ


1. 分区表,重建后,查询失败

问题原因:新建的空表,表名与原表不同,导致添加分区时,在元数据里拼接的 partition_name 与 原表的 partition_name 不同。

分区表恢复时,创建的空表,务必与原表名一致,以保证 pattitions_v 中显示的 location 里的 pattition_name 与原表一致

--简化复现sql:
DROP TABLE IF EXISTS t11;
CREATE TABLE t11(id INT ,name STRING )PARTITIONED BY (p STRING ) STORED AS HOLODESK;
INSERT INTO t11 VALUES (1,'a','p1');
DROP TABLE t11;
curl  -u shiva:shiva -X PUT "172.22.23.2:4567/trash?table_id=39b3ded5b530463f8858b2bfa96173d3&new_table_name=default.t11_b7a65124-71b9-4935-baf4-81abe7158c5e"

--这里想通过不一致的表名来恢复
DROP TABLE IF EXISTS t22;
CREATE TABLE t22(id INT ,name STRING )PARTITIONED BY (p STRING ) STORED AS HOLODESK;
ALTER TABLE t22 ADD PARTITION (p='p1');
ALTER TABLE t22 SET TBLPROPERTIES ('holodesk.tablename'='default.t11_b7a65124-71b9-4935-baf4-81abe7158c5e');
--查询报错
SELECT * FROM t22;

file

2. 增大shiva回收站保存周期为70天

TABLE_KEEP_IN_TRASH_TIME_S:数值类型,表示处于回收站中表的最小保留时间,单位为秒,最小配置600,默认值604800s,也就是7天。
如需保留更长时间,可通过如下接口配置:

[root@kv1~]# curl -u shiva:shiva  -XPUT "172.22.23.2:4567/config?config=TABLE_KEEP_IN_TRASH_TIME_S,6048000"
{"log_id": 1745344848645,"code": 0,"msg": "ok"}
[root@kv1~]# 
[root@kv1~]# curl -u shiva:shiva  -X GET "172.22.23.2:4567/config"
{"log_id": 1745344848650,"code": 0,"msg": "ok","config": {"configs": [{"value": "true"},{"key": "STORE_BALANCE_ENABLED","value": "true"},{"key": "STORE_MIGRATE_OUT_PERCENTAGE","value": "10"},{"key": "STORE_MIGRATE_IN_PERCENTAGE","value": "70"},{"key": "TABLE_KEEP_IN_TRASH_TIME_S","value": "6048000"},{"key": "STORE_DO_BALANCE_THRESHOLD","value": "20"}]}}

这篇文章对您有帮助吗?

平均评分 0 / 5. 次数: 0

尚无评价,您可以第一个评哦!

非常抱歉,这篇文章对您没有帮助.

烦请您告诉我们您的建议与意见,以便我们改进,谢谢您。