migrate
语法
migrate(backupDir, [backupDBPath], [backupTableName], [newDBPath=backupDBPath], [newTableName=backupTableName])
参数
backupDir 字符串,表示存放已备份数据的目录。
backupDBPath 字符串,表示已备份的数据库的名称。
backupTableName 字符串,表示已备份的表的名称。
newDBPath 字符串,表示新数据库的名称。如果没有指定,默认值为 backupDBPath。 若指定该参数,则需要确保备份数据与 newDBPath 的引擎类型(engine)一致,且 partitionScheme(VALUE 除外)也保持一致。 当采用 VALUE 分区时,须保证备份数据中的分区方案是待恢复数据库的分区方案的子集。
newTableName 字符串,表示新表的名称。如果没有指定,默认值为 backupTableName。
详情
恢复数据库中已备份的数据。返回的结果是一个表,包含了每个表恢复数据的结果。该函数必须要用户登录后才能执行。
migrate 函数有以下三种用法:
migrate(backupDir): 恢复该目录下所有数据库的备份数据。恢复后的数据库名称、表名称与原数据库、原表一致。
migrate(backupDir, backupDBPath): 恢复该目录下指定数据库的备份数据。恢复后的数据库名称、表名称与原数据库、原表一致。
migrate(backupDir, backupDBPath, backupTableName, [newDBPath], [newTableName]): 恢复该目录下指定数据库指定表的备份数据。如果没有指定 newDBPath 和 newTableName,恢复后的数据库名称、表名称与原数据库、原表一致。如果指定了 newDBPath 和 newTableName,恢复后的数据库名称为 newDBPath,表名为 newTableName。
例子
创建两个示例数据库,并将它们备份到相同的目录中:
$ backupDir="/home/DolphinDB/backup"
$ n = 1000000
$ t1 = table(rand(2012.12.01..2012.12.10, n) as date, rand(`AAPL`IBM`GOOG`MSFT, n) as sym, rand(1000.0,n) as price)
$ t2 = table(rand(2012.12.01..2012.12.10, n) as date, rand(`AAPL`IBM`GOOG`MSFT, n) as sym, rand(1000,n) as qty)
$ db1 = database("dfs://db1", VALUE, 2012.12.01..2012.12.10)
$ trades1 = db1.createPartitionedTable(t1, `trades1, `date).append!(t1)
$ trades2 = db1.createPartitionedTable(t2, `trades2, `date).append!(t2)
$ n = 1000000
$ t1 = table(rand(2012.12.01..2012.12.10, n) as date, rand(`AAPL`IBM`GOOG`MSFT, n) as sym, rand(1000.0,n) as price)
$ t2 = table(rand(2012.12.01..2012.12.10, n) as date, rand(`AAPL`IBM`GOOG`MSFT, n) as sym, rand(1000,n) as qty)
$ db1 = database("dfs://db2", VALUE, `AAPL`IBM`GOOG`MSFT)
$ quotes1 = db1.createPartitionedTable(t1, `quotes1, `sym).append!(t1)
$ quotes2 = db1.createPartitionedTable(t2, `quotes2, `sym).append!(t2)
$ backup(backupDir, <select * from trades1>, true)
$ backup(backupDir, <select * from trades2>, true)
$ backup(backupDir, <select * from quotes1>, true)
$ backup(backupDir, <select * from quotes2>, true)
删除原来的数据库:
$ dropDatabase("dfs://db1")
$ dropDatabase("dfs://db2")
例1. 恢复所有数据库的数据
$ migrate(backupDir);
dbName |
tableName |
success |
errorMsg |
---|---|---|---|
dfs://db1 |
trades1 |
1 |
|
dfs://db1 |
trades2 |
1 |
|
dfs://db2 |
quotes2 |
1 |
|
dfs://db2 |
quotes1 |
1 |
例2. 恢复数据库dfs://db1中所有表的数据
$ migrate(backupDir, "dfs://db1");
dbName |
tableName |
success |
errorMsg |
---|---|---|---|
dfs://db1 |
trades1 |
1 |
|
dfs://db1 |
trades2 |
1 |
例3. 恢复数据库dfs://db1中表trades1的数据
例3.1 不指定新数据库名称和表名称
$ migrate(backupDir, "dfs://db1", "trades1");
dbName |
tableName |
success |
errorMsg |
---|---|---|---|
dfs://db1 |
trades1 |
1 |
例3.2 指定新数据库名称和表名称
$ migrate(backupDir, "dfs://db1", "trades1", "dfs://db3", "trades");
dbName |
tableName |
success |
errorMsg |
---|---|---|---|
dfs://db1 |
trades1 |
1 |
$ exec count(*) from loadTable("dfs://db3", "trades")
1000000
相关函数:backup, backupDB, backupTable, restore, restoreDB, restoreTable