1
0

[HUDI-3125] spark-sql write timestamp directly (#4471)

This commit is contained in:
Yann Byron
2022-01-09 15:43:25 +08:00
committed by GitHub
parent 0d8ca8da4e
commit 36790709f7
5 changed files with 188 additions and 7 deletions

View File

@@ -330,6 +330,33 @@ class TestCreateTable extends TestHoodieSqlBase {
}
}
test("Test Create Table As Select when 'spark.sql.datetime.java8API.enabled' enables") {
try {
// enable spark.sql.datetime.java8API.enabled
// and use java.time.Instant to replace java.sql.Timestamp to represent TimestampType.
spark.conf.set("spark.sql.datetime.java8API.enabled", value = true)
val tableName = generateTableName
spark.sql(
s"""
|create table $tableName
|using hudi
|partitioned by(dt)
|options(type = 'cow', primaryKey = 'id')
|as
|select 1 as id, 'a1' as name, 10 as price, cast('2021-05-07 00:00:00' as timestamp) as dt
|""".stripMargin
)
checkAnswer(s"select id, name, price, cast(dt as string) from $tableName")(
Seq(1, "a1", 10, "2021-05-07 00:00:00")
)
} finally {
spark.conf.set("spark.sql.datetime.java8API.enabled", value = false)
}
}
test("Test Create Table From Exist Hoodie Table") {
withTempDir { tmp =>
Seq("2021-08-02", "2021/08/02").foreach { partitionValue =>

View File

@@ -370,6 +370,38 @@ class TestInsertTable extends TestHoodieSqlBase {
spark.sql("set hoodie.sql.insert.mode = upsert")
}
test("Test Insert timestamp when 'spark.sql.datetime.java8API.enabled' enables") {
try {
// enable spark.sql.datetime.java8API.enabled
// and use java.time.Instant to replace java.sql.Timestamp to represent TimestampType.
spark.conf.set("spark.sql.datetime.java8API.enabled", value = true)
val tableName = generateTableName
spark.sql(
s"""
|create table $tableName (
| id int,
| name string,
| price double,
| dt timestamp
|)
|using hudi
|partitioned by(dt)
|options(type = 'cow', primaryKey = 'id')
|""".stripMargin
)
spark.sql(s"insert into $tableName values (1, 'a1', 10, cast('2021-05-07 00:00:00' as timestamp))")
checkAnswer(s"select id, name, price, cast(dt as string) from $tableName")(
Seq(1, "a1", 10, "2021-05-07 00:00:00")
)
} finally {
spark.conf.set("spark.sql.datetime.java8API.enabled", value = false)
}
}
test("Test bulk insert") {
spark.sql("set hoodie.sql.insert.mode = non-strict")
withTempDir { tmp =>