restore

语法

restore(backupDir, dbPath, tableName, partition, [force=false], [outputTable])

参数

backupDir 是字符串,表示存放备份数据的目录。

dbPath 是字符串,表示已备份的分布式数据库的路径。

tableName 是字符串,表示已备份的表的名称。

partition 是字符串,表示要恢复的分区的相对路径。分区路径可以包含通配符("%"和"?"), "?"表示单个字符,"%"表示0,1或多个字符。

  • 若仅备份某个分区,输入分区的相对路径或者"%/"+”分区名称”。举例:要恢复"dfs://compoDB"下的分区”20170810/50_100”,输入"/compoDB/20170807/0_50"或者"%/20170807/0_50"。

    请注意:若使用 1.30.16/2.00.4 ~ 1.30.18/2.00.6 版本 server,对表级分区数据进行备份和恢复时,该参数必须指定路径到物理索引(可通过函数 listTables 获取),例如分区 "/compoDB/20170807/0_50" 下表的物理索引为8,则 partition 需指定为 "/compoDB/20170807/0_50/8"。

  • 若需要备份所有分区,直接输入"%"。

force 是布尔值,表示是否强制恢复。默认值为false,表示只有元数据与备份数据元数据不一致的分区,才会恢复。

outputTable 是分布式表,该表的结构必须与要恢复的表结构一致。如果没有指定outputTable,恢复后的数据会存放到原表;如果指定了outputTable,恢复后的数据会存放到该表中,而原数据表保持不变。

详情

恢复指定分区的数据。返回一个字符串向量,包含恢复的分区的路径。

例子

创建一个组合分区的数据库dfs://compoDB:

$ n=1000000
$ ID=rand(100, n)
$ dates=2017.08.07..2017.08.11
$ date=rand(dates, n)
$ x=rand(10.0, n)
$ t=table(ID, date, x);

$ dbDate = database(, VALUE, 2017.08.07..2017.08.11)
$ dbID=database(, RANGE, 0 50 100);
$ db = database("dfs://compoDB", COMPO, [dbDate, dbID]);
$ pt = db.createPartitionedTable(t, `pt, `date`ID)
$ pt.append!(t);

备份表pt的所有数据:

$ backup("/home/DolphinDB/backup",<select * from loadTable("dfs://compoDB","pt")>,true);
10

例1. 恢复所有数据到原表。

$ restore("/home/DolphinDB/backup","dfs://compoDB","pt","%",true);
["dfs://compoDB/20170807/0_50/6F","dfs://compoDB/20170807/50_100/6F","dfs://compoDB/20170808/0_50/6F","dfs://compoDB/20170808/50_100/6F","dfs://compoDB/20170809/0_50/6F","dfs://compoDB/20170809/50_100/6F","dfs://compoDB/20170810/0_50/6F","dfs://compoDB/20170810/50_100/6F","dfs://compoDB/20170811/0_50/6F","dfs://compoDB/20170811/50_100/6F"]

例2. 恢复日期为2017.08.10的数据。

$ restore("/home/DolphinDB/backup","dfs://compoDB","pt","%20170810%",true)
["dfs://compoDB/20170810/0_50/6F","dfs://compoDB/20170810/50_100/6F"]

例3. 在数据库dfs://compoDB中创建一个与表pt结构相同的表temp,把pt的数据恢复到表temp。

$ temp=db.createPartitionedTable(t, `pt, `date`ID);

$ restore("/home/DolphinDB/backup","dfs://compoDB","pt","%",true,temp);
["dfs://compoDB/20170807/0_50/6F","dfs://compoDB/20170807/50_100/6F","dfs://compoDB/20170808/0_50/6F","dfs://compoDB/20170808/50_100/6F","dfs://compoDB/20170809/0_50/6F","dfs://compoDB/20170809/50_100/6F","dfs://compoDB/20170810/0_50/6F","dfs://compoDB/20170810/50_100/6F","dfs://compoDB/20170811/0_50/6F","dfs://compoDB/20170811/50_100/6F"]

$ select count(*) from temp;

count

1000000