checkBackup

语法

checkBackup(backupDir, dbPath, [tableName], [partition])

参数

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

dbPath 字符串,表示数据库路径。

tableName 字符串标量或向量,表示表名。若不指定,表示指定数据库下的所有表。

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

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

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

详情

检查备份文件的的完整性和准确性。若所有备份文件均完整且准确,则返回一个空表;否则返回异常的备份文件信息,此时可通过在 backup 函数设置 force = true 开启强制备份以恢复受损的备份分区数据。

例子

dbName = "dfs://compoDB2"
n=1000
ID=rand("a"+string(1..10), n)
dates=2017.08.07..2017.08.11
date=rand(dates, n)
x=rand(10, n)
t=table(ID, date, x)
db1 = database(, VALUE, 2017.08.07..2017.08.11)
db2 = database(, HASH,[INT, 20])
if(existsDatabase(dbName)){
   dropDatabase(dbName)
}
db = database(dbName, COMPO,[ db1,db2])

// 创建2个表
pt1 = db.createPartitionedTable(t, `pt1, `date`x).append!(t)
pt2 = db.createPartitionedTable(t, `pt2, `date`x).append!(t)

// SQL 元代码方式备份 pt1
backup(backupDir=backupDir1, sqlObj=<select * from pt1>, parallel=true)
// 拷贝文件方式备份 pt2
backup(backupDir=backupDir2, dbName, parallel=true, tableName=`pt2)

// pt2 备份文件都正常,pt1 中一个 chunk 文件出现问题
checkBackup(backupDir=backupDir2, dbPath=dbName, tableName="pt2")  // 返回一个空表
checkBackup(backupDir=backupDir1, dbPath=dbName, tableName="pt1")  // 返回出错的 chunk 信息
dbName tableName chunkPath chunkID partitionPath
dfs://compoDB2 pt1 /compoDB2/20170807/Key2/9 4ae71414-8bfe-4283-b04c-b2e48e90be08 /20170807/Key2

上例中,通过调用 checkBackup 函数,可以发现在 pt1 中存在损坏的 chunk 文件。此时,设置 force = true 再次强制备份,以恢复受损文件。

backup(backupDir1, <select * from pt1>,force=true, parallel=true)
checkBackup(backupDir=backupDir1, dbPath=dbName, tableName="pt1")  // 返回一个空表