From 52617d392be7149f91daae047dc69f7b7ecc269d Mon Sep 17 00:00:00 2001 From: Socrates Date: Fri, 22 Nov 2024 14:37:43 +0800 Subject: [PATCH] [enhance](regression-test) fix hudi incremental query bug and add hudi p2 cases (#44003) ### What problem does this PR solve? Problem Summary: fix hudi incremental query bug and add hudi p2 cases --- .../hudi/source/COWIncrementalRelation.java | 10 +- regression-test/conf/regression-conf.groovy | 3 + .../hudi/test_hudi_incremental.out | 349 ++++++++++++++++++ .../hudi/test_hudi_schema_evolution.out | 33 ++ .../hudi/test_hudi_snapshot.out | Bin 0 -> 348526 bytes .../hudi/test_hudi_timestamp.out | 6 + .../hudi/test_hudi_timetravel.out | 236 ++++++------ .../hudi/test_hudi_catalog.groovy | 39 ++ .../hudi/test_hudi_incremental.groovy | 111 ++++++ .../hudi/test_hudi_schema_evolution.groovy | 48 +++ .../hudi/test_hudi_snapshot.groovy | 91 +++++ .../hudi/test_hudi_timestamp.groovy | 62 ++++ .../hudi/test_hudi_timetravel.groovy | 138 ++++--- 13 files changed, 929 insertions(+), 197 deletions(-) create mode 100644 regression-test/data/external_table_p2/hudi/test_hudi_incremental.out create mode 100644 regression-test/data/external_table_p2/hudi/test_hudi_schema_evolution.out create mode 100644 regression-test/data/external_table_p2/hudi/test_hudi_snapshot.out create mode 100644 regression-test/data/external_table_p2/hudi/test_hudi_timestamp.out create mode 100644 regression-test/suites/external_table_p2/hudi/test_hudi_catalog.groovy create mode 100644 regression-test/suites/external_table_p2/hudi/test_hudi_incremental.groovy create mode 100644 regression-test/suites/external_table_p2/hudi/test_hudi_schema_evolution.groovy create mode 100644 regression-test/suites/external_table_p2/hudi/test_hudi_snapshot.groovy create mode 100644 regression-test/suites/external_table_p2/hudi/test_hudi_timestamp.groovy diff --git a/fe/fe-core/src/main/java/org/apache/doris/datasource/hudi/source/COWIncrementalRelation.java b/fe/fe-core/src/main/java/org/apache/doris/datasource/hudi/source/COWIncrementalRelation.java index 5e76996bb120ee..7981a0b4f261ff 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/datasource/hudi/source/COWIncrementalRelation.java +++ b/fe/fe-core/src/main/java/org/apache/doris/datasource/hudi/source/COWIncrementalRelation.java @@ -79,7 +79,7 @@ public COWIncrementalRelation(Map optParams, Configuration confi if (!metaClient.getTableConfig().populateMetaFields()) { throw new HoodieException("Incremental queries are not supported when meta fields are disabled"); } - HoodieInstant lastInstant = commitTimeline.lastInstant().get(); + String startInstantTime = optParams.get("hoodie.datasource.read.begin.instanttime"); if (startInstantTime == null) { throw new HoodieException("Specify the begin instant time to pull from using " @@ -89,16 +89,18 @@ public COWIncrementalRelation(Map optParams, Configuration confi startInstantTime = "000"; } String endInstantTime = optParams.getOrDefault("hoodie.datasource.read.end.instanttime", - lastInstant.getTimestamp()); + hollowCommitHandling == HollowCommitHandling.USE_TRANSITION_TIME + ? commitTimeline.lastInstant().get().getStateTransitionTime() + : commitTimeline.lastInstant().get().getTimestamp()); startInstantArchived = commitTimeline.isBeforeTimelineStarts(startInstantTime); endInstantArchived = commitTimeline.isBeforeTimelineStarts(endInstantTime); HoodieTimeline commitsTimelineToReturn; if (hollowCommitHandling == HollowCommitHandling.USE_TRANSITION_TIME) { commitsTimelineToReturn = commitTimeline.findInstantsInRangeByStateTransitionTime(startInstantTime, - lastInstant.getStateTransitionTime()); + endInstantTime); } else { - commitsTimelineToReturn = commitTimeline.findInstantsInRange(startInstantTime, lastInstant.getTimestamp()); + commitsTimelineToReturn = commitTimeline.findInstantsInRange(startInstantTime, endInstantTime); } List commitsToReturn = commitsTimelineToReturn.getInstants(); diff --git a/regression-test/conf/regression-conf.groovy b/regression-test/conf/regression-conf.groovy index 936cf510aaafd6..87f56ae5e75567 100644 --- a/regression-test/conf/regression-conf.groovy +++ b/regression-test/conf/regression-conf.groovy @@ -203,6 +203,9 @@ extEsPort = 9200 extEsUser = "*******" extEsPassword = "***********" +enableExternalHudiTest = false +hudiEmrCatalog = "***********" + enableObjStorageTest=false enableMaxComputeTest=false aliYunAk="***********" diff --git a/regression-test/data/external_table_p2/hudi/test_hudi_incremental.out b/regression-test/data/external_table_p2/hudi/test_hudi_incremental.out new file mode 100644 index 00000000000000..b1bdad85013bfc --- /dev/null +++ b/regression-test/data/external_table_p2/hudi/test_hudi_incremental.out @@ -0,0 +1,349 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !incremental_1_end -- +9000 + +-- !incremental_earliest_1 -- +1000 + +-- !incremental_2_end -- +8000 + +-- !incremental_earliest_2 -- +2000 + +-- !incremental_1_2 -- +1000 + +-- !incremental_3_end -- +7000 + +-- !incremental_earliest_3 -- +3000 + +-- !incremental_2_3 -- +1000 + +-- !incremental_4_end -- +6000 + +-- !incremental_earliest_4 -- +4000 + +-- !incremental_3_4 -- +1000 + +-- !incremental_5_end -- +5000 + +-- !incremental_earliest_5 -- +5000 + +-- !incremental_4_5 -- +1000 + +-- !incremental_6_end -- +4000 + +-- !incremental_earliest_6 -- +6000 + +-- !incremental_5_6 -- +1000 + +-- !incremental_7_end -- +3000 + +-- !incremental_earliest_7 -- +7000 + +-- !incremental_6_7 -- +1000 + +-- !incremental_8_end -- +2000 + +-- !incremental_earliest_8 -- +8000 + +-- !incremental_7_8 -- +1000 + +-- !incremental_9_end -- +1000 + +-- !incremental_earliest_9 -- +9000 + +-- !incremental_8_9 -- +1000 + +-- !incremental_10_end -- +0 + +-- !incremental_earliest_10 -- +10000 + +-- !incremental_9_10 -- +1000 + +-- !incremental_1_end -- +9000 + +-- !incremental_earliest_1 -- +1000 + +-- !incremental_2_end -- +8000 + +-- !incremental_earliest_2 -- +2000 + +-- !incremental_1_2 -- +1000 + +-- !incremental_3_end -- +7000 + +-- !incremental_earliest_3 -- +3000 + +-- !incremental_2_3 -- +1000 + +-- !incremental_4_end -- +6000 + +-- !incremental_earliest_4 -- +4000 + +-- !incremental_3_4 -- +1000 + +-- !incremental_5_end -- +5000 + +-- !incremental_earliest_5 -- +5000 + +-- !incremental_4_5 -- +1000 + +-- !incremental_6_end -- +4000 + +-- !incremental_earliest_6 -- +6000 + +-- !incremental_5_6 -- +1000 + +-- !incremental_7_end -- +3000 + +-- !incremental_earliest_7 -- +7000 + +-- !incremental_6_7 -- +1000 + +-- !incremental_8_end -- +2000 + +-- !incremental_earliest_8 -- +8000 + +-- !incremental_7_8 -- +1000 + +-- !incremental_9_end -- +1000 + +-- !incremental_earliest_9 -- +9000 + +-- !incremental_8_9 -- +1000 + +-- !incremental_10_end -- +0 + +-- !incremental_earliest_10 -- +10000 + +-- !incremental_9_10 -- +1000 + +-- !incremental_1_end -- +9000 + +-- !incremental_earliest_1 -- +1000 + +-- !incremental_2_end -- +8000 + +-- !incremental_earliest_2 -- +2000 + +-- !incremental_1_2 -- +1000 + +-- !incremental_3_end -- +7000 + +-- !incremental_earliest_3 -- +3000 + +-- !incremental_2_3 -- +1000 + +-- !incremental_4_end -- +6000 + +-- !incremental_earliest_4 -- +4000 + +-- !incremental_3_4 -- +1000 + +-- !incremental_5_end -- +5000 + +-- !incremental_earliest_5 -- +5000 + +-- !incremental_4_5 -- +1000 + +-- !incremental_6_end -- +4000 + +-- !incremental_earliest_6 -- +6000 + +-- !incremental_5_6 -- +1000 + +-- !incremental_7_end -- +3000 + +-- !incremental_earliest_7 -- +7000 + +-- !incremental_6_7 -- +1000 + +-- !incremental_8_end -- +2000 + +-- !incremental_earliest_8 -- +8000 + +-- !incremental_7_8 -- +1000 + +-- !incremental_9_end -- +1000 + +-- !incremental_earliest_9 -- +9000 + +-- !incremental_8_9 -- +1000 + +-- !incremental_10_end -- +0 + +-- !incremental_earliest_10 -- +10000 + +-- !incremental_9_10 -- +1000 + +-- !incremental_1_end -- +9000 + +-- !incremental_earliest_1 -- +1000 + +-- !incremental_2_end -- +8000 + +-- !incremental_earliest_2 -- +2000 + +-- !incremental_1_2 -- +1000 + +-- !incremental_3_end -- +7000 + +-- !incremental_earliest_3 -- +3000 + +-- !incremental_2_3 -- +1000 + +-- !incremental_4_end -- +6000 + +-- !incremental_earliest_4 -- +4000 + +-- !incremental_3_4 -- +1000 + +-- !incremental_5_end -- +5000 + +-- !incremental_earliest_5 -- +5000 + +-- !incremental_4_5 -- +1000 + +-- !incremental_6_end -- +4000 + +-- !incremental_earliest_6 -- +6000 + +-- !incremental_5_6 -- +1000 + +-- !incremental_7_end -- +3000 + +-- !incremental_earliest_7 -- +7000 + +-- !incremental_6_7 -- +1000 + +-- !incremental_8_end -- +2000 + +-- !incremental_earliest_8 -- +8000 + +-- !incremental_7_8 -- +1000 + +-- !incremental_9_end -- +1000 + +-- !incremental_earliest_9 -- +9000 + +-- !incremental_8_9 -- +1000 + +-- !incremental_10_end -- +0 + +-- !incremental_earliest_10 -- +10000 + +-- !incremental_9_10 -- +1000 + diff --git a/regression-test/data/external_table_p2/hudi/test_hudi_schema_evolution.out b/regression-test/data/external_table_p2/hudi/test_hudi_schema_evolution.out new file mode 100644 index 00000000000000..12dd0cf086d3f0 --- /dev/null +++ b/regression-test/data/external_table_p2/hudi/test_hudi_schema_evolution.out @@ -0,0 +1,33 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !adding_simple_columns_table -- +20241118012126237 20241118012126237_0_1 1 5166112a-90d8-4ba8-8646-337fbeb2a375-0_0-35-121_20241118012132306.parquet 1 Alice \N +20241118012126237 20241118012126237_0_0 2 5166112a-90d8-4ba8-8646-337fbeb2a375-0_0-35-121_20241118012132306.parquet 2 Bob \N +20241118012126237 20241118012126237_0_2 3 5166112a-90d8-4ba8-8646-337fbeb2a375-0_0-35-121_20241118012132306.parquet 3 Cathy \N +20241118012132306 20241118012132306_0_3 4 5166112a-90d8-4ba8-8646-337fbeb2a375-0_0-35-121_20241118012132306.parquet 4 David 25 +20241118012132306 20241118012132306_0_4 5 5166112a-90d8-4ba8-8646-337fbeb2a375-0_0-35-121_20241118012132306.parquet 5 Eva 30 +20241118012132306 20241118012132306_0_5 6 5166112a-90d8-4ba8-8646-337fbeb2a375-0_0-35-121_20241118012132306.parquet 6 Frank 28 + +-- !altering_simple_columns_table -- +20241118012136512 20241118012136512_0_0 1 203f0f43-ae9d-4c17-8d5d-834f0dbc62c9-0_0-78-246_20241118012138287.parquet 1 Alice 25.0 +20241118012136512 20241118012136512_0_2 2 203f0f43-ae9d-4c17-8d5d-834f0dbc62c9-0_0-78-246_20241118012138287.parquet 2 Bob 30.0 +20241118012136512 20241118012136512_0_1 3 203f0f43-ae9d-4c17-8d5d-834f0dbc62c9-0_0-78-246_20241118012138287.parquet 3 Cathy 28.0 +20241118012138287 20241118012138287_0_3 4 203f0f43-ae9d-4c17-8d5d-834f0dbc62c9-0_0-78-246_20241118012138287.parquet 4 David 26.0 +20241118012138287 20241118012138287_0_4 5 203f0f43-ae9d-4c17-8d5d-834f0dbc62c9-0_0-78-246_20241118012138287.parquet 5 Eva 31.5 +20241118012138287 20241118012138287_0_5 6 203f0f43-ae9d-4c17-8d5d-834f0dbc62c9-0_0-78-246_20241118012138287.parquet 6 Frank 29.2 + +-- !adding_complex_columns_table -- +20241118012144831 20241118012144831_0_1 1 3c038df9-a652-4878-9b8a-221ae443448e-0_0-165-497_20241118012146150.parquet 1 Alice {"age":25, "address":"Guangzhou", "email":null} +20241118012144831 20241118012144831_0_0 2 3c038df9-a652-4878-9b8a-221ae443448e-0_0-165-497_20241118012146150.parquet 2 Bob {"age":30, "address":"Shanghai", "email":null} +20241118012144831 20241118012144831_0_2 3 3c038df9-a652-4878-9b8a-221ae443448e-0_0-165-497_20241118012146150.parquet 3 Cathy {"age":28, "address":"Beijing", "email":null} +20241118012146150 20241118012146150_0_3 4 3c038df9-a652-4878-9b8a-221ae443448e-0_0-165-497_20241118012146150.parquet 4 David {"age":25, "address":"Shenzhen", "email":"david@example.com"} +20241118012146150 20241118012146150_0_4 5 3c038df9-a652-4878-9b8a-221ae443448e-0_0-165-497_20241118012146150.parquet 5 Eva {"age":30, "address":"Chengdu", "email":"eva@example.com"} +20241118012146150 20241118012146150_0_5 6 3c038df9-a652-4878-9b8a-221ae443448e-0_0-165-497_20241118012146150.parquet 6 Frank {"age":28, "address":"Wuhan", "email":"frank@example.com"} + +-- !altering_complex_columns_table -- +20241118012147879 20241118012147879_0_0 1 185d101f-a484-45ce-b236-03ccd33c521b-0_0-208-622_20241118012149007.parquet 1 Alice {"age":25, "address":"Guangzhou"} +20241118012147879 20241118012147879_0_2 2 185d101f-a484-45ce-b236-03ccd33c521b-0_0-208-622_20241118012149007.parquet 2 Bob {"age":30, "address":"Shanghai"} +20241118012147879 20241118012147879_0_1 3 185d101f-a484-45ce-b236-03ccd33c521b-0_0-208-622_20241118012149007.parquet 3 Cathy {"age":28, "address":"Beijing"} +20241118012149007 20241118012149007_0_3 4 185d101f-a484-45ce-b236-03ccd33c521b-0_0-208-622_20241118012149007.parquet 4 David {"age":26, "address":"Shenzhen"} +20241118012149007 20241118012149007_0_4 5 185d101f-a484-45ce-b236-03ccd33c521b-0_0-208-622_20241118012149007.parquet 5 Eva {"age":31.5, "address":"Chengdu"} +20241118012149007 20241118012149007_0_5 6 185d101f-a484-45ce-b236-03ccd33c521b-0_0-208-622_20241118012149007.parquet 6 Frank {"age":29.2, "address":"Wuhan"} + diff --git a/regression-test/data/external_table_p2/hudi/test_hudi_snapshot.out b/regression-test/data/external_table_p2/hudi/test_hudi_snapshot.out new file mode 100644 index 0000000000000000000000000000000000000000..efad67ffbfa8c407fa42d0dd28f569f492bd1d12 GIT binary patch literal 348526 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ⅆ)~- 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%0DbcX3NnT#OV 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 TYy!lDGL{dSu>4K*;Sc|RJ0qld literal 0 HcmV?d00001 diff --git a/regression-test/data/external_table_p2/hudi/test_hudi_timestamp.out b/regression-test/data/external_table_p2/hudi/test_hudi_timestamp.out new file mode 100644 index 00000000000000..dc47ff86d90a8d --- /dev/null +++ b/regression-test/data/external_table_p2/hudi/test_hudi_timestamp.out @@ -0,0 +1,6 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !timestamp -- +20241115015956800 20241115015956800_0_2 1 eec4913a-0d5f-4b8b-a0f5-934e252c2e45-0_0-7-14_20241115015956800.parquet 1 Alice 2024-10-25T08:00 +20241115015956800 20241115015956800_0_0 2 eec4913a-0d5f-4b8b-a0f5-934e252c2e45-0_0-7-14_20241115015956800.parquet 2 Bob 2024-10-25T09:30:00 +20241115015956800 20241115015956800_0_1 3 eec4913a-0d5f-4b8b-a0f5-934e252c2e45-0_0-7-14_20241115015956800.parquet 3 Charlie 2024-10-25T11:00:00 + diff --git a/regression-test/data/external_table_p2/hudi/test_hudi_timetravel.out b/regression-test/data/external_table_p2/hudi/test_hudi_timetravel.out index 38b6ff7846f49a..a9b5d23595a8e3 100644 --- a/regression-test/data/external_table_p2/hudi/test_hudi_timetravel.out +++ b/regression-test/data/external_table_p2/hudi/test_hudi_timetravel.out @@ -1,125 +1,121 @@ -- This file is automatically generated. You should know what you did if you want to edit this --- !q00 -- -20240724195843565 20240724195843565_0_0 20240724195843565_0_0 PAR1=para/par2=para 7a788b37-9ef0-409a-bc42-6793e35fcad5-0_0-129-127_20240724195848377.parquet 1 a b para para -20240724195845718 20240724195845718_0_0 20240724195845718_0_0 PAR1=para/par2=parb fef19b36-4a18-4d8c-b204-1ed448f7de51-0_0-152-155_20240724195850799.parquet 2 a b para parb -20240724195848377 20240724195848377_0_1 20240724195848377_0_0 PAR1=para/par2=para 7a788b37-9ef0-409a-bc42-6793e35fcad5-0_0-129-127_20240724195848377.parquet 3 a b para para -20240724195850799 20240724195850799_0_1 20240724195850799_0_0 PAR1=para/par2=parb fef19b36-4a18-4d8c-b204-1ed448f7de51-0_0-152-155_20240724195850799.parquet 4 a b para parb +-- !timetravel1 -- +1000 --- !q01 -- +-- !timetravel2 -- +2000 --- !q02 -- +-- !timetravel3 -- +3000 --- !q01 -- -20240724195843565 20240724195843565_0_0 20240724195843565_0_0 PAR1=para/par2=para 7a788b37-9ef0-409a-bc42-6793e35fcad5-0_0-129-127_20240724195848377.parquet 1 a b para para -20240724195845718 20240724195845718_0_0 20240724195845718_0_0 PAR1=para/par2=parb fef19b36-4a18-4d8c-b204-1ed448f7de51-0_0-152-155_20240724195850799.parquet 2 a b para parb -20240724195848377 20240724195848377_0_1 20240724195848377_0_0 PAR1=para/par2=para 7a788b37-9ef0-409a-bc42-6793e35fcad5-0_0-129-127_20240724195848377.parquet 3 a b para para -20240724195850799 20240724195850799_0_1 20240724195850799_0_0 PAR1=para/par2=parb fef19b36-4a18-4d8c-b204-1ed448f7de51-0_0-152-155_20240724195850799.parquet 4 a b para parb - --- !q02 -- -20240724195843565 20240724195843565_0_0 20240724195843565_0_0 PAR1=para/par2=para 7a788b37-9ef0-409a-bc42-6793e35fcad5-0_0-129-127_20240724195848377.parquet 1 a b para para -20240724195845718 20240724195845718_0_0 20240724195845718_0_0 PAR1=para/par2=parb fef19b36-4a18-4d8c-b204-1ed448f7de51-0_0-152-155_20240724195850799.parquet 2 a b para parb -20240724195848377 20240724195848377_0_1 20240724195848377_0_0 PAR1=para/par2=para 7a788b37-9ef0-409a-bc42-6793e35fcad5-0_0-129-127_20240724195848377.parquet 3 a b para para -20240724195850799 20240724195850799_0_1 20240724195850799_0_0 PAR1=para/par2=parb fef19b36-4a18-4d8c-b204-1ed448f7de51-0_0-152-155_20240724195850799.parquet 4 a b para parb - --- !q03 -- - --- !q04 -- - --- !q05 -- -1 a b para para - --- !q06 -- -1 a b para para - --- !q07 -- -1 a b para para -2 a b para parb - --- !q08 -- -1 a b para para -2 a b para parb - --- !q09 -- -1 a b para para -2 a b para parb -3 a b para para - --- !q10 -- -1 a b para para -2 a b para parb -3 a b para para - --- !q11 -- -1 a b para para -2 a b para parb -3 a b para para -4 a b para parb - --- !q12 -- -1 a b para para -2 a b para parb -3 a b para para -4 a b para parb - --- !q50 -- -20240724195853736 20240724195853736_0_0 Id:1 PAR1=para/par2=para c5a8ebb7-f929-43ba-9f8d-d733fae27605-0_0-203-210_20240724195858450.parquet 1 a b para para -20240724195856338 20240724195856338_0_0 Id:2 PAR1=para/par2=parb 23756678-cf81-481c-b559-85c0b47b0a80-0_0-219-228_20240724195902682.parquet 2 a b para parb -20240724195858450 20240724195858450_0_1 Id:3 PAR1=para/par2=para c5a8ebb7-f929-43ba-9f8d-d733fae27605-0_0-203-210_20240724195858450.parquet 3 a b para para -20240724195902682 20240724195902682_0_1 Id:4 PAR1=para/par2=parb 23756678-cf81-481c-b559-85c0b47b0a80-0_0-219-228_20240724195902682.parquet 4 a b para parb - --- !q51 -- - --- !q52 -- - --- !q51 -- -20240724195853736 20240724195853736_0_0 Id:1 PAR1=para/par2=para c5a8ebb7-f929-43ba-9f8d-d733fae27605-0_0-203-210_20240724195858450.parquet 1 a b para para -20240724195856338 20240724195856338_0_0 Id:2 PAR1=para/par2=parb 23756678-cf81-481c-b559-85c0b47b0a80-0_0-219-228_20240724195902682.parquet 2 a b para parb -20240724195858450 20240724195858450_0_1 Id:3 PAR1=para/par2=para c5a8ebb7-f929-43ba-9f8d-d733fae27605-0_0-203-210_20240724195858450.parquet 3 a b para para -20240724195902682 20240724195902682_0_1 Id:4 PAR1=para/par2=parb 23756678-cf81-481c-b559-85c0b47b0a80-0_0-219-228_20240724195902682.parquet 4 a b para parb - --- !q52 -- -20240724195853736 20240724195853736_0_0 Id:1 PAR1=para/par2=para c5a8ebb7-f929-43ba-9f8d-d733fae27605-0_0-203-210_20240724195858450.parquet 1 a b para para -20240724195856338 20240724195856338_0_0 Id:2 PAR1=para/par2=parb 23756678-cf81-481c-b559-85c0b47b0a80-0_0-219-228_20240724195902682.parquet 2 a b para parb -20240724195858450 20240724195858450_0_1 Id:3 PAR1=para/par2=para c5a8ebb7-f929-43ba-9f8d-d733fae27605-0_0-203-210_20240724195858450.parquet 3 a b para para -20240724195902682 20240724195902682_0_1 Id:4 PAR1=para/par2=parb 23756678-cf81-481c-b559-85c0b47b0a80-0_0-219-228_20240724195902682.parquet 4 a b para parb - --- !q53 -- - --- !q54 -- - --- !q55 -- -1 a b para para - --- !q56 -- -1 a b para para - --- !q57 -- -1 a b para para -2 a b para parb - --- !q58 -- -1 a b para para -2 a b para parb - --- !q59 -- -1 a b para para -2 a b para parb -3 a b para para - --- !q60 -- -1 a b para para -2 a b para parb -3 a b para para - --- !q61 -- -1 a b para para -2 a b para parb -3 a b para para -4 a b para parb - --- !q62 -- -1 a b para para -2 a b para parb -3 a b para para -4 a b para parb +-- !timetravel4 -- +4000 + +-- !timetravel5 -- +5000 + +-- !timetravel6 -- +6000 + +-- !timetravel7 -- +7000 + +-- !timetravel8 -- +8000 + +-- !timetravel9 -- +9000 + +-- !timetravel10 -- +10000 + +-- !timetravel1 -- +1000 + +-- !timetravel2 -- +2000 + +-- !timetravel3 -- +3000 + +-- !timetravel4 -- +4000 + +-- !timetravel5 -- +5000 + +-- !timetravel6 -- +6000 + +-- !timetravel7 -- +7000 + +-- !timetravel8 -- +8000 + +-- !timetravel9 -- +9000 + +-- !timetravel10 -- +10000 + +-- !timetravel1 -- +1000 + +-- !timetravel2 -- +2000 + +-- !timetravel3 -- +3000 + +-- !timetravel4 -- +4000 + +-- !timetravel5 -- +5000 + +-- !timetravel6 -- +6000 + +-- !timetravel7 -- +7000 + +-- !timetravel8 -- +8000 + +-- !timetravel9 -- +9000 + +-- !timetravel10 -- +10000 + +-- !timetravel1 -- +1000 + +-- !timetravel2 -- +2000 + +-- !timetravel3 -- +3000 + +-- !timetravel4 -- +4000 + +-- !timetravel5 -- +5000 + +-- !timetravel6 -- +6000 + +-- !timetravel7 -- +7000 + +-- !timetravel8 -- +8000 + +-- !timetravel9 -- +9000 + +-- !timetravel10 -- +10000 diff --git a/regression-test/suites/external_table_p2/hudi/test_hudi_catalog.groovy b/regression-test/suites/external_table_p2/hudi/test_hudi_catalog.groovy new file mode 100644 index 00000000000000..f2082ef89c7a50 --- /dev/null +++ b/regression-test/suites/external_table_p2/hudi/test_hudi_catalog.groovy @@ -0,0 +1,39 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +suite("test_hudi_catalog", "p2,external,hudi,external_remote,external_remote_hudi") { + String enabled = context.config.otherConfigs.get("enableExternalHudiTest") + if (enabled == null || !enabled.equalsIgnoreCase("true")) { + logger.info("disable hudi test") + } + + String catalog_name = "test_hudi_catalog" + String props = context.config.otherConfigs.get("hudiEmrCatalog") + sql """drop catalog if exists ${catalog_name};""" + sql """ + create catalog if not exists ${catalog_name} properties ( + ${props} + ); + """ + + sql """ switch ${catalog_name};""" + sql """ use regression_hudi;""" + sql """ set enable_fallback_to_original_planner=false """ + def tables = sql """ show tables; """ + assertTrue(tables.size() > 0) + sql """drop catalog if exists ${catalog_name};""" +} \ No newline at end of file diff --git a/regression-test/suites/external_table_p2/hudi/test_hudi_incremental.groovy b/regression-test/suites/external_table_p2/hudi/test_hudi_incremental.groovy new file mode 100644 index 00000000000000..8cc1d2a852b8c4 --- /dev/null +++ b/regression-test/suites/external_table_p2/hudi/test_hudi_incremental.groovy @@ -0,0 +1,111 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +suite("test_hudi_incremental", "p2,external,hudi,external_remote,external_remote_hudi") { + String enabled = context.config.otherConfigs.get("enableExternalHudiTest") + if (enabled == null || !enabled.equalsIgnoreCase("true")) { + logger.info("disable hudi test") + } + + String catalog_name = "test_hudi_incremental" + String props = context.config.otherConfigs.get("hudiEmrCatalog") + sql """drop catalog if exists ${catalog_name};""" + sql """ + create catalog if not exists ${catalog_name} properties ( + ${props} + ); + """ + + sql """ switch ${catalog_name};""" + sql """ use regression_hudi;""" + sql """ set enable_fallback_to_original_planner=false """ + + def test_hudi_incremental_querys = { table_name, timestamps -> + timestamps.eachWithIndex { timestamp, index -> + def query_name = "qt_incremental_${index + 1}_end" + "${query_name}" """ select count(user_id) from ${table_name}@incr('beginTime' = '${timestamp}'); """ + query_name = "qt_incremental_earliest_${index + 1}" + "${query_name}" """ select count(user_id) from ${table_name}@incr('beginTime' = 'earliest', 'endTime' = '${timestamp}'); """ + if (index > 0) { + query_name = "qt_incremental_${index}_${index + 1}" + "${query_name}" """ select count(user_id) from ${table_name}@incr('beginTime' = '${timestamps[index - 1]}', 'endTime' = '${timestamp}'); """ + } + } + } + + // spark-sql "select distinct _hoodie_commit_time from user_activity_log_cow_non_partition order by _hoodie_commit_time;" + def timestamps_cow_non_partition = [ + "20241114151946599", + "20241114151952471", + "20241114151956317", + "20241114151958164", + "20241114152000425", + "20241114152004116", + "20241114152005954", + "20241114152007945", + "20241114152009764", + "20241114152011901", + ] + test_hudi_incremental_querys("user_activity_log_cow_non_partition", timestamps_cow_non_partition) + + // spark-sql "select distinct _hoodie_commit_time from user_activity_log_cow_partition order by _hoodie_commit_time;" + def timestamps_cow_partition = [ + "20241114152034850", + "20241114152042944", + "20241114152052682", + "20241114152101650", + "20241114152110650", + "20241114152120030", + "20241114152128871", + "20241114152137714", + "20241114152147114", + "20241114152156417", + ] + test_hudi_incremental_querys("user_activity_log_cow_partition", timestamps_cow_partition) + + // spark-sql "select distinct _hoodie_commit_time from user_activity_log_mor_non_partition order by _hoodie_commit_time;" + def timestamps_mor_non_partition = [ + "20241114152014186", + "20241114152015753", + "20241114152017539", + "20241114152019371", + "20241114152020915", + "20241114152022911", + "20241114152024706", + "20241114152026873", + "20241114152028770", + "20241114152030746", + ] + test_hudi_incremental_querys("user_activity_log_mor_non_partition", timestamps_mor_non_partition) + + // spark-sql "select distinct _hoodie_commit_time from user_activity_log_mor_partition order by _hoodie_commit_time;" + def timestamps_mor_partition = [ + "20241114152207700", + "20241114152214609", + "20241114152223933", + "20241114152232579", + "20241114152241610", + "20241114152252244", + "20241114152302763", + "20241114152313010", + "20241114152323587", + "20241114152334111", + ] + test_hudi_incremental_querys("user_activity_log_mor_partition", timestamps_mor_partition) + + sql """drop catalog if exists ${catalog_name};""" +} \ No newline at end of file diff --git a/regression-test/suites/external_table_p2/hudi/test_hudi_schema_evolution.groovy b/regression-test/suites/external_table_p2/hudi/test_hudi_schema_evolution.groovy new file mode 100644 index 00000000000000..b247aaf492400d --- /dev/null +++ b/regression-test/suites/external_table_p2/hudi/test_hudi_schema_evolution.groovy @@ -0,0 +1,48 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +suite("test_hudi_schema_evolution", "p2,external,hudi,external_remote,external_remote_hudi") { + String enabled = context.config.otherConfigs.get("enableExternalHudiTest") + if (enabled == null || !enabled.equalsIgnoreCase("true")) { + logger.info("disable hudi test") + } + + String catalog_name = "test_hudi_schema_evolution" + String props = context.config.otherConfigs.get("hudiEmrCatalog") + sql """drop catalog if exists ${catalog_name};""" + sql """ + create catalog if not exists ${catalog_name} properties ( + ${props} + ); + """ + + sql """ switch ${catalog_name};""" + sql """ use regression_hudi;""" + sql """ set enable_fallback_to_original_planner=false """ + + qt_adding_simple_columns_table """ select * from adding_simple_columns_table order by id """ + qt_altering_simple_columns_table """ select * from altering_simple_columns_table order by id """ + // qt_deleting_simple_columns_table """ select * from deleting_simple_columns_table order by id """ + // qt_renaming_simple_columns_table """ select * from renaming_simple_columns_table order by id """ + + qt_adding_complex_columns_table """ select * from adding_complex_columns_table order by id """ + qt_altering_complex_columns_table """ select * from altering_complex_columns_table order by id """ + // qt_deleting_complex_columns_table """ select * from deleting_complex_columns_table order by id """ + // qt_renaming_complex_columns_table """ select * from renaming_complex_columns_table order by id """ + + sql """drop catalog if exists ${catalog_name};""" +} \ No newline at end of file diff --git a/regression-test/suites/external_table_p2/hudi/test_hudi_snapshot.groovy b/regression-test/suites/external_table_p2/hudi/test_hudi_snapshot.groovy new file mode 100644 index 00000000000000..53c09e6d5a9031 --- /dev/null +++ b/regression-test/suites/external_table_p2/hudi/test_hudi_snapshot.groovy @@ -0,0 +1,91 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +suite("test_hudi_snapshot", "p2,external,hudi,external_remote,external_remote_hudi") { + String enabled = context.config.otherConfigs.get("enableExternalHudiTest") + if (enabled == null || !enabled.equalsIgnoreCase("true")) { + logger.info("disable hudi test") + } + + String catalog_name = "test_hudi_snapshot" + String props = context.config.otherConfigs.get("hudiEmrCatalog") + sql """drop catalog if exists ${catalog_name};""" + sql """ + create catalog if not exists ${catalog_name} properties ( + ${props} + ); + """ + + sql """ switch ${catalog_name};""" + sql """ use regression_hudi;""" + sql """ set enable_fallback_to_original_planner=false """ + + // 创建groovy函数,接收table_name为参数 + def test_hudi_snapshot_querys = { table_name -> + // Query users by event_time in descending order and limit output + qt_q01 """SELECT * FROM ${table_name} ORDER BY event_time DESC LIMIT 10;""" + + // Query all active user records and limit output + qt_q02 """SELECT * FROM ${table_name} WHERE is_active = TRUE ORDER BY event_time LIMIT 10;""" + + // Query specific user's activity records and limit output + qt_q03 """SELECT * FROM ${table_name} WHERE user_id = '62785e0e-ad44-4321-8b20-9ee4c4daca4a' ORDER BY event_time LIMIT 5;""" + + // Query events within a specific time range and limit output + qt_q04 """SELECT * FROM ${table_name} WHERE event_time BETWEEN '2024-01-01 00:00:00' AND '2024-12-31 23:59:59' ORDER BY event_time LIMIT 10;""" + + // Count users by age group and limit output + qt_q05 """SELECT age, COUNT(*) AS user_count FROM ${table_name} GROUP BY age ORDER BY user_count DESC LIMIT 5;""" + + // Query users with purchase records and limit output + qt_q06 """SELECT user_id, purchases FROM ${table_name} WHERE array_size(purchases) > 0 ORDER BY user_id LIMIT 5;""" + + // Query users with a specific tag and limit output + qt_q07 """SELECT * FROM ${table_name} WHERE array_contains(tags, 'others') ORDER BY event_time LIMIT 5;""" + + // Query users living in a specific city and limit output + qt_q08 """SELECT * FROM ${table_name} WHERE struct_element(address, 'city') = 'North Rachelview' ORDER BY event_time LIMIT 5;""" + + // Query users within a specific coordinate range and limit output + qt_q09 """SELECT * FROM ${table_name} WHERE struct_element(struct_element(address, 'coordinates'), 'latitude') BETWEEN 0 AND 100 AND struct_element(struct_element(address, 'coordinates'), 'longitude') BETWEEN 0 AND 100 ORDER BY event_time LIMIT 5;""" + + // Query records with ratings above a specific value and limit output + qt_q10 """SELECT * FROM ${table_name} WHERE rating > 4.5 ORDER BY rating DESC LIMIT 5;""" + + // Query all users' signup dates and limit output + qt_q11 """SELECT user_id, signup_date FROM ${table_name} ORDER BY signup_date DESC LIMIT 10;""" + + // Query users with a specific postal code and limit output + qt_q12 """SELECT * FROM ${table_name} WHERE struct_element(address, 'postal_code') = '80312' ORDER BY event_time LIMIT 5;""" + + // Query users with profile pictures and limit output + qt_q13 """SELECT user_id, profile_picture FROM ${table_name} WHERE profile_picture IS NOT NULL ORDER BY user_id LIMIT 5;""" + + // Query users by signup date and limit output + qt_q14 """SELECT * FROM ${table_name} WHERE signup_date = '2024-01-15' ORDER BY user_id LIMIT 5;""" + + // Query the total count of purchases for each user and limit output + qt_q15 """SELECT user_id, array_size(purchases) AS purchase_count FROM ${table_name} ORDER BY purchase_count DESC LIMIT 5;""" + } + + test_hudi_snapshot_querys("user_activity_log_cow_non_partition") + test_hudi_snapshot_querys("user_activity_log_cow_partition") + test_hudi_snapshot_querys("user_activity_log_mor_non_partition") + test_hudi_snapshot_querys("user_activity_log_mor_partition") + + sql """drop catalog if exists ${catalog_name};""" +} \ No newline at end of file diff --git a/regression-test/suites/external_table_p2/hudi/test_hudi_timestamp.groovy b/regression-test/suites/external_table_p2/hudi/test_hudi_timestamp.groovy new file mode 100644 index 00000000000000..c1ba630e4a7d01 --- /dev/null +++ b/regression-test/suites/external_table_p2/hudi/test_hudi_timestamp.groovy @@ -0,0 +1,62 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +suite("test_hudi_timestamp", "p2,external,hudi,external_remote,external_remote_hudi") { + String enabled = context.config.otherConfigs.get("enableExternalHudiTest") + if (enabled == null || !enabled.equalsIgnoreCase("true")) { + logger.info("disable hudi test") + } + + String catalog_name = "test_hudi_timestamp" + String props = context.config.otherConfigs.get("hudiEmrCatalog") + sql """drop catalog if exists ${catalog_name};""" + sql """ + create catalog if not exists ${catalog_name} properties ( + ${props} + ); + """ + + sql """ switch ${catalog_name};""" + sql """ use regression_hudi;""" + sql """ set enable_fallback_to_original_planner=false """ + + // TODO: fix hudi timezone issue and enable this + // qt_timestamp """ select * from hudi_table_with_timestamp order by id; """ + + sql """drop catalog if exists ${catalog_name};""" +} + +// DROP TABLE IF EXISTS hudi_table_with_timestamp; + +// -- create table +// CREATE TABLE hudi_table_with_timestamp ( +// id STRING, +// name STRING, +// event_time TIMESTAMP +// ) USING HUDI +// OPTIONS ( +// type = 'cow', +// primaryKey = 'id', +// preCombineField = 'event_time' +// ); + +// SET TIME ZONE 'America/Los_Angeles'; + +// INSERT OVERWRITE hudi_table_with_timestamp VALUES +// ('1', 'Alice', timestamp('2024-10-25 08:00:00')), +// ('2', 'Bob', timestamp('2024-10-25 09:30:00')), +// ('3', 'Charlie', timestamp('2024-10-25 11:00:00')); \ No newline at end of file diff --git a/regression-test/suites/external_table_p2/hudi/test_hudi_timetravel.groovy b/regression-test/suites/external_table_p2/hudi/test_hudi_timetravel.groovy index db535e3517987e..4d458dc4381dcf 100644 --- a/regression-test/suites/external_table_p2/hudi/test_hudi_timetravel.groovy +++ b/regression-test/suites/external_table_p2/hudi/test_hudi_timetravel.groovy @@ -16,13 +16,6 @@ // under the License. suite("test_hudi_timetravel", "p2,external,hudi,external_remote,external_remote_hudi") { - - Boolean ignoreP2 = true; - if (ignoreP2) { - logger.info("disable p2 test"); - return; - } - String enabled = context.config.otherConfigs.get("enableExternalHudiTest") if (enabled == null || !enabled.equalsIgnoreCase("true")) { logger.info("disable hudi test") @@ -37,77 +30,76 @@ suite("test_hudi_timetravel", "p2,external,hudi,external_remote,external_remote_ ); """ - sql """switch ${catalog_name};""" + sql """ switch ${catalog_name};""" sql """ use regression_hudi;""" sql """ set enable_fallback_to_original_planner=false """ - qt_q00 """select * from timetravel_cow order by id""" - qt_q01 """select * from timetravel_cow FOR TIME AS OF "2024-07-24" order by id""" // no data - qt_q02 """select * from timetravel_cow FOR TIME AS OF "20240724" order by id""" // no data - qt_q01 """select * from timetravel_cow FOR TIME AS OF "2024-07-25" order by id""" - qt_q02 """select * from timetravel_cow FOR TIME AS OF "20240725" order by id""" - qt_q03 """ select id, val1,val2,par1,par2 from timetravel_cow FOR TIME AS OF "2024-07-24 19:58:43" order by id """ // no data - qt_q04 """ select id, val1,val2,par1,par2 from timetravel_cow FOR TIME AS OF "20240724195843" order by id """ // no data - qt_q05 """ select id, val1,val2,par1,par2 from timetravel_cow FOR TIME AS OF "2024-07-24 19:58:44" order by id """ // one - qt_q06 """ select id, val1,val2,par1,par2 from timetravel_cow FOR TIME AS OF "20240724195844" order by id """ //one - qt_q07 """ select id, val1,val2,par1,par2 from timetravel_cow FOR TIME AS OF "2024-07-24 19:58:48" order by id """ // two - qt_q08 """ select id, val1,val2,par1,par2 from timetravel_cow FOR TIME AS OF "20240724195848" order by id """ // two - qt_q09 """ select id, val1,val2,par1,par2 from timetravel_cow FOR TIME AS OF "2024-07-24 19:58:49" order by id """ // three - qt_q10 """ select id, val1,val2,par1,par2 from timetravel_cow FOR TIME AS OF "20240724195849" order by id """ // three - qt_q11 """ select id, val1,val2,par1,par2 from timetravel_cow FOR TIME AS OF "2024-07-24 19:58:51" order by id """ // four - qt_q12 """ select id, val1,val2,par1,par2 from timetravel_cow FOR TIME AS OF "20240724195851" order by id """ // four - - qt_q50 """select * from timetravel_mor order by id""" - qt_q51 """select * from timetravel_mor FOR TIME AS OF "2024-07-24" order by id""" // no data - qt_q52 """select * from timetravel_mor FOR TIME AS OF "20240724" order by id""" // no data - qt_q51 """select * from timetravel_mor FOR TIME AS OF "2024-07-25" order by id""" - qt_q52 """select * from timetravel_mor FOR TIME AS OF "20240725" order by id""" - qt_q53 """ select id, val1,val2,par1,par2 from timetravel_mor FOR TIME AS OF "2024-07-24 19:58:53" order by id """ // no data - qt_q54 """ select id, val1,val2,par1,par2 from timetravel_mor FOR TIME AS OF "20240724195853" order by id """ // no data - qt_q55 """ select id, val1,val2,par1,par2 from timetravel_mor FOR TIME AS OF "2024-07-24 19:58:54" order by id """ // one - qt_q56 """ select id, val1,val2,par1,par2 from timetravel_mor FOR TIME AS OF "20240724195854" order by id """ //one - qt_q57 """ select id, val1,val2,par1,par2 from timetravel_mor FOR TIME AS OF "2024-07-24 19:58:58" order by id """ // two - qt_q58 """ select id, val1,val2,par1,par2 from timetravel_mor FOR TIME AS OF "20240724195858" order by id """ // two - qt_q59 """ select id, val1,val2,par1,par2 from timetravel_mor FOR TIME AS OF "2024-07-24 19:58:59" order by id """ // three - qt_q60 """ select id, val1,val2,par1,par2 from timetravel_mor FOR TIME AS OF "20240724195859" order by id """ // three - qt_q61 """ select id, val1,val2,par1,par2 from timetravel_mor FOR TIME AS OF "2024-07-24 19:59:03" order by id """ // four - qt_q62 """ select id, val1,val2,par1,par2 from timetravel_mor FOR TIME AS OF "20240724195903" order by id """ // four -} - - -/* + def test_hudi_timetravel_querys = { table_name, timestamps -> + timestamps.eachWithIndex { timestamp, index -> + def query_name = "qt_timetravel${index + 1}" + "${query_name}" """ select count(user_id) from ${table_name} for time as of "${timestamp}"; """ + } + } -create table timetravel_cow ( - Id int, - VAL1 string, - val2 string, - PAR1 string, - par2 string -) using hudi -partitioned by (par1, par2) -TBLPROPERTIES ( - 'type' = 'cow'); + // spark-sql "select distinct _hoodie_commit_time from user_activity_log_cow_non_partition order by _hoodie_commit_time;" + def timestamps_cow_non_partition = [ + "20241114151946599", + "20241114151952471", + "20241114151956317", + "20241114151958164", + "20241114152000425", + "20241114152004116", + "20241114152005954", + "20241114152007945", + "20241114152009764", + "20241114152011901", + ] + test_hudi_timetravel_querys("user_activity_log_cow_non_partition", timestamps_cow_non_partition) -create table timetravel_mor ( - Id int, - VAL1 string, - val2 string, - PAR1 string, - par2 string -) using hudi -partitioned by (par1, par2) -TBLPROPERTIES ( - 'primaryKey' = 'Id', - 'type' = 'mor'); + // spark-sql "select distinct _hoodie_commit_time from user_activity_log_cow_partition order by _hoodie_commit_time;" + def timestamps_cow_partition = [ + "20241114152034850", + "20241114152042944", + "20241114152052682", + "20241114152101650", + "20241114152110650", + "20241114152120030", + "20241114152128871", + "20241114152137714", + "20241114152147114", + "20241114152156417", + ] + test_hudi_timetravel_querys("user_activity_log_cow_partition", timestamps_cow_partition) -insert into timetravel_cow values (1, 'a','b','para','para'); -insert into timetravel_cow values (2, 'a','b','para','parb'); -insert into timetravel_cow values (3, 'a','b','para','para'); -insert into timetravel_cow values (4, 'a','b','para','parb'); + // spark-sql "select distinct _hoodie_commit_time from user_activity_log_mor_non_partition order by _hoodie_commit_time;" + def timestamps_mor_non_partition = [ + "20241114152014186", + "20241114152015753", + "20241114152017539", + "20241114152019371", + "20241114152020915", + "20241114152022911", + "20241114152024706", + "20241114152026873", + "20241114152028770", + "20241114152030746", + ] + test_hudi_timetravel_querys("user_activity_log_mor_non_partition", timestamps_mor_non_partition) -insert into timetravel_mor values (1, 'a','b','para','para'); -insert into timetravel_mor values (2, 'a','b','para','parb'); -insert into timetravel_mor values (3, 'a','b','para','para'); -insert into timetravel_mor values (4, 'a','b','para','parb'); + // spark-sql "select distinct _hoodie_commit_time from user_activity_log_mor_partition order by _hoodie_commit_time;" + def timestamps_mor_partition = [ + "20241114152207700", + "20241114152214609", + "20241114152223933", + "20241114152232579", + "20241114152241610", + "20241114152252244", + "20241114152302763", + "20241114152313010", + "20241114152323587", + "20241114152334111", + ] + test_hudi_timetravel_querys("user_activity_log_mor_partition", timestamps_mor_partition) -*/ + sql """drop catalog if exists ${catalog_name};""" +} \ No newline at end of file