如何实现批量备份数据库中的所有表,而不是一个一个backup

请先 登录 后评论

最佳答案 2022-01-13 17:31

可使用如下脚本实现批量备份。

backupDir="E:/Tools/DB_backup"
def batchBackup(backupDir){
 for(db in getDFSDatabases()){
  tableList = getTables(database(db));
  for(table in tableList){
   backup(backupDir, <select * from loadTable(db,table)>,true); 
  }
 }
}
batchBackup(backupDir);



完整验证脚本如下

login(`admin,`123456)
backupDir="E:/Tools/DB_backup"

n = 10
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 = 10
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")

select * from loadTable("dfs://db1",`trades1);
// 批量还原
migrate(backupDir);

backupDir="E:/Tools/DB_backup"
def batchBackup(backupDir){
 for(db in getDFSDatabases()){
  tableList = getTables(database(db));
  for(table in tableList){
   backup(backupDir, <select * from loadTable(db,table)>,false); 
  }
 }
}

// 批量备份
batchBackup(backupDir);
select * from loadTable("dfs://db1",`trades1);
请先 登录 后评论

其它 0 个回答

  • 1 关注
  • 1 收藏,949 浏览
  • Order Wang 提出于 2022-01-10 14:18

相似问题