checkBackup

New in version 1.30.20.

语法

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")  // 返回一个空表