1
0

[HUDI-3499] Add Call Procedure for show rollbacks (#5848)

* Add Call Procedure for show rollbacks

* fix

* add ut for show_rollback_detail and exception handle

Co-authored-by: superche <superche@tencent.com>
This commit is contained in:
superche
2022-06-15 16:50:15 +08:00
committed by GitHub
parent 0811bb38fb
commit 7b946cf351
3 changed files with 254 additions and 0 deletions

View File

@@ -171,4 +171,109 @@ class TestCallProcedure extends HoodieSparkSqlTestBase {
}
}
}
test("Test Call show_rollbacks Procedure") {
withTempDir { tmp =>
val tableName = generateTableName
// create table
spark.sql(
s"""
|create table $tableName (
| id int,
| name string,
| price double,
| ts long
|) using hudi
| location '${tmp.getCanonicalPath}/$tableName'
| tblproperties (
| primaryKey = 'id',
| preCombineField = 'ts'
| )
""".stripMargin)
// insert data to table
spark.sql(s"insert into $tableName select 1, 'a1', 10, 1000")
spark.sql(s"insert into $tableName select 2, 'a2', 20, 1500")
spark.sql(s"insert into $tableName select 3, 'a3', 30, 2000")
// 3 commits are left before rollback
var commits = spark.sql(s"""call show_commits(table => '$tableName', limit => 10)""").collect()
assertResult(3){commits.length}
// Call rollback_to_instant Procedure with Named Arguments
var instant_time = commits(0).get(0).toString
checkAnswer(s"""call rollback_to_instant(table => '$tableName', instant_time => '$instant_time')""")(Seq(true))
// Call rollback_to_instant Procedure with Positional Arguments
instant_time = commits(1).get(0).toString
checkAnswer(s"""call rollback_to_instant('$tableName', '$instant_time')""")(Seq(true))
// 1 commits are left after rollback
commits = spark.sql(s"""call show_commits(table => '$tableName', limit => 10)""").collect()
assertResult(1){commits.length}
// collect rollbacks for table
val rollbacks = spark.sql(s"""call show_rollbacks(table => '$tableName', limit => 10)""").collect()
assertResult(2) {rollbacks.length}
}
}
test("Test Call show_rollback_detail Procedure") {
withTempDir { tmp =>
val tableName = generateTableName
// create table
spark.sql(
s"""
|create table $tableName (
| id int,
| name string,
| price double,
| ts long
|) using hudi
| location '${tmp.getCanonicalPath}/$tableName'
| tblproperties (
| primaryKey = 'id',
| preCombineField = 'ts'
| )
""".stripMargin)
// insert data to table
spark.sql(s"insert into $tableName select 1, 'a1', 10, 1000")
spark.sql(s"insert into $tableName select 2, 'a2', 20, 1500")
spark.sql(s"insert into $tableName select 3, 'a3', 30, 2000")
// 3 commits are left before rollback
var commits = spark.sql(s"""call show_commits(table => '$tableName', limit => 10)""").collect()
assertResult(3) {
commits.length
}
// Call rollback_to_instant Procedure with Named Arguments
var instant_time = commits(0).get(0).toString
checkAnswer(s"""call rollback_to_instant(table => '$tableName', instant_time => '$instant_time')""")(Seq(true))
// Call rollback_to_instant Procedure with Positional Arguments
instant_time = commits(1).get(0).toString
checkAnswer(s"""call rollback_to_instant('$tableName', '$instant_time')""")(Seq(true))
// 1 commits are left after rollback
commits = spark.sql(s"""call show_commits(table => '$tableName', limit => 10)""").collect()
assertResult(1) {
commits.length
}
// collect rollbacks for table
val rollbacks = spark.sql(s"""call show_rollbacks(table => '$tableName', limit => 10)""").collect()
assertResult(2) {
rollbacks.length
}
// Check required fields
checkExceptionContain(s"""call show_rollback_detail(table => '$tableName')""")(
s"Argument: instant_time is required")
// collect rollback's info for table
instant_time = rollbacks(1).get(0).toString
val rollback = spark.sql(s"""call show_rollback_detail(table => '$tableName', instant_time => '$instant_time')""").collect()
assertResult(1) {
rollback.length
}
}
}
}