From cc023d329ab558d111ccce6eda119874ec49a58a Mon Sep 17 00:00:00 2001 From: voon Date: Wed, 30 Jul 2025 16:13:22 +0800 Subject: [PATCH 01/25] Cherrypick trino-hudi from OSS trino at 1046d9a5410207bd7f79c12cf74949a7221e333b --- hudi-trino-plugin/pom.xml | 442 ++++++++++++++++++ .../plugin/hudi/ForHudiSplitManager.java | 29 ++ .../trino/plugin/hudi/ForHudiSplitSource.java | 29 ++ .../java/io/trino/plugin/hudi/HudiConfig.java | 219 +++++++++ .../io/trino/plugin/hudi/HudiConnector.java | 158 +++++++ .../plugin/hudi/HudiConnectorFactory.java | 120 +++++ .../io/trino/plugin/hudi/HudiErrorCode.java | 50 ++ .../trino/plugin/hudi/HudiExecutorModule.java | 57 +++ .../io/trino/plugin/hudi/HudiFileStatus.java | 26 ++ .../io/trino/plugin/hudi/HudiMetadata.java | 352 ++++++++++++++ .../plugin/hudi/HudiMetadataFactory.java | 49 ++ .../java/io/trino/plugin/hudi/HudiModule.java | 62 +++ .../plugin/hudi/HudiPageSourceProvider.java | 371 +++++++++++++++ .../java/io/trino/plugin/hudi/HudiPlugin.java | 28 ++ .../io/trino/plugin/hudi/HudiPredicates.java | 68 +++ .../plugin/hudi/HudiSessionProperties.java | 221 +++++++++ .../java/io/trino/plugin/hudi/HudiSplit.java | 78 ++++ .../trino/plugin/hudi/HudiSplitManager.java | 119 +++++ .../io/trino/plugin/hudi/HudiSplitSource.java | 142 ++++++ .../io/trino/plugin/hudi/HudiTableHandle.java | 153 ++++++ .../io/trino/plugin/hudi/HudiTableInfo.java | 28 ++ .../io/trino/plugin/hudi/HudiTableName.java | 65 +++ .../plugin/hudi/HudiTableProperties.java | 63 +++ .../plugin/hudi/HudiTransactionManager.java | 80 ++++ .../java/io/trino/plugin/hudi/HudiUtil.java | 143 ++++++ .../java/io/trino/plugin/hudi/TableType.java | 20 + .../io/trino/plugin/hudi/TimelineTable.java | 93 ++++ .../hudi/io/TrinoHudiFileReaderFactory.java | 89 ++++ .../plugin/hudi/io/TrinoHudiIoFactory.java | 74 +++ .../hudi/io/TrinoSeekableDataInputStream.java | 48 ++ .../hudi/partition/HiveHudiPartitionInfo.java | 141 ++++++ .../hudi/partition/HudiPartitionInfo.java | 31 ++ .../partition/HudiPartitionInfoLoader.java | 84 ++++ .../hudi/query/HudiDirectoryLister.java | 29 ++ .../HudiReadOptimizedDirectoryLister.java | 117 +++++ .../hudi/split/HudiBackgroundSplitLoader.java | 104 +++++ .../plugin/hudi/split/HudiSplitFactory.java | 93 ++++ .../hudi/split/HudiSplitWeightProvider.java | 26 ++ .../split/SizeBasedSplitWeightProvider.java | 47 ++ .../plugin/hudi/storage/TrinoHudiStorage.java | 322 +++++++++++++ .../storage/TrinoStorageConfiguration.java | 88 ++++ .../hudi/BaseHudiConnectorSmokeTest.java | 59 +++ .../io/trino/plugin/hudi/HudiQueryRunner.java | 170 +++++++ .../io/trino/plugin/hudi/TestHudiConfig.java | 82 ++++ .../plugin/hudi/TestHudiConnectorFactory.java | 70 +++ ...stHudiConnectorParquetColumnNamesTest.java | 31 ++ .../plugin/hudi/TestHudiConnectorTest.java | 90 ++++ .../hudi/TestHudiMinioConnectorSmokeTest.java | 41 ++ .../io/trino/plugin/hudi/TestHudiPlugin.java | 38 ++ .../hudi/TestHudiSessionProperties.java | 39 ++ .../plugin/hudi/TestHudiSharedMetastore.java | 178 +++++++ .../trino/plugin/hudi/TestHudiSmokeTest.java | 376 +++++++++++++++ .../plugin/hudi/TestHudiSystemTables.java | 61 +++ .../hudi/TestingHudiConnectorFactory.java | 64 +++ .../trino/plugin/hudi/TestingHudiPlugin.java | 43 ++ .../hudi/storage/TestTrinoHudiStorage.java | 304 ++++++++++++ .../TestTrinoStorageConfiguration.java | 51 ++ .../hudi/testing/HudiTablesInitializer.java | 23 + .../plugin/hudi/testing/HudiTestUtils.java | 29 ++ .../ResourceHudiTablesInitializer.java | 279 +++++++++++ .../testing/TpchHudiTablesInitializer.java | 397 ++++++++++++++++ .../src/test/resources/README.md | 47 ++ .../.hoodie/20220906063435640.commit | 73 +++ .../20220906063435640.commit.requested | 0 .../.hoodie/20220906063435640.inflight | 71 +++ .../.hoodie/20220906063456550.commit | 73 +++ .../20220906063456550.commit.requested | 0 .../.hoodie/20220906063456550.inflight | 71 +++ .../hudi_cow_pt_tbl/.hoodie/hoodie.properties | 18 + .../hh=10/.hoodie_partition_metadata | 4 + ...85bf-0_0-27-1215_20220906063435640.parquet | Bin 0 -> 435204 bytes .../hh=11/.hoodie_partition_metadata | 4 + ...4dd1-0_0-70-2444_20220906063456550.parquet | Bin 0 -> 435204 bytes .../.hoodie/.index_defs/index.json | 18 + .../.hoodie/hoodie.properties | 26 ++ .../metadata/.hoodie/hoodie.properties | 19 + .../00000000000000000.deltacommit.inflight | 0 .../00000000000000000.deltacommit.requested | 0 ...000000000000_20250429145939812.deltacommit | Bin 0 -> 11084 bytes .../00000000000000001.deltacommit.inflight | 0 .../00000000000000001.deltacommit.requested | 0 ...000000000001_20250429145940407.deltacommit | Bin 0 -> 10946 bytes .../00000000000000002.deltacommit.inflight | 0 .../00000000000000002.deltacommit.requested | 0 ...000000000002_20250429145941217.deltacommit | Bin 0 -> 10946 bytes .../00000000000000003.deltacommit.inflight | 0 .../00000000000000003.deltacommit.requested | 0 ...000000000003_20250429145941430.deltacommit | Bin 0 -> 10946 bytes .../00000000000000004.deltacommit.inflight | 0 .../00000000000000004.deltacommit.requested | 0 ...000000000004_20250429145945968.deltacommit | Bin 0 -> 11828 bytes .../20250429145938324.deltacommit.inflight | Bin 0 -> 4140 bytes .../20250429145938324.deltacommit.requested | 0 ...429145938324_20250429145943593.deltacommit | Bin 0 -> 12376 bytes .../20250429145941472.compaction.inflight | 0 .../20250429145941472.compaction.requested | Bin 0 -> 2517 bytes ...20250429145941472_20250429145941874.commit | Bin 0 -> 11138 bytes .../20250429145943846.deltacommit.inflight | Bin 0 -> 4140 bytes .../20250429145943846.deltacommit.requested | 0 ...429145943846_20250429145945066.deltacommit | Bin 0 -> 12376 bytes .../20250429145943911.compaction.inflight | 0 .../20250429145943911.compaction.requested | Bin 0 -> 5867 bytes ...20250429145943911_20250429145944166.commit | Bin 0 -> 12007 bytes .../20250429145946675.deltacommit.inflight | Bin 0 -> 4571 bytes .../20250429145946675.deltacommit.requested | 0 ...429145946675_20250429145948126.deltacommit | Bin 0 -> 13743 bytes .../20250429145946737.compaction.inflight | 0 .../20250429145946737.compaction.requested | Bin 0 -> 8675 bytes ...20250429145946737_20250429145947037.commit | Bin 0 -> 13493 bytes ...stats-0000-0_00000000000000001.log.1_0-0-0 | Bin 0 -> 80 bytes ...ts-0000-0_20250429145938324.log.1_2-57-131 | Bin 0 -> 14556 bytes ...ts-0000-0_20250429145943846.log.1_2-91-231 | Bin 0 -> 14834 bytes ...s-0000-0_20250429145946675.log.1_0-120-381 | Bin 0 -> 14885 bytes ...stats-0001-0_00000000000000001.log.1_0-0-0 | Bin 0 -> 80 bytes ...ts-0001-0_20250429145938324.log.1_3-57-132 | Bin 0 -> 14821 bytes ...ts-0001-0_20250429145943846.log.1_3-91-232 | Bin 0 -> 14552 bytes ...s-0001-0_20250429145946675.log.1_1-120-382 | Bin 0 -> 15007 bytes .../column_stats/.hoodie_partition_metadata | 4 + ...s-0000-0_10-62-159_20250429145943911.hfile | Bin 0 -> 7407 bytes ...s-0000-0_9-104-299_20250429145946737.hfile | Bin 0 -> 9131 bytes ...-0001-0_10-104-300_20250429145946737.hfile | Bin 0 -> 9113 bytes ...s-0001-0_11-62-160_20250429145943911.hfile | Bin 0 -> 8776 bytes ...files-0000-0_00000000000000000.log.1_0-0-0 | Bin 0 -> 80 bytes ...es-0000-0_20250429145938324.log.1_5-57-134 | Bin 0 -> 14420 bytes ...es-0000-0_20250429145943846.log.1_5-91-234 | Bin 0 -> 14417 bytes ...s-0000-0_20250429145946675.log.1_3-120-384 | Bin 0 -> 14483 bytes .../metadata/files/.hoodie_partition_metadata | 4 + ...les-0000-0_0-28-69_20250429145941472.hfile | Bin 0 -> 6993 bytes ...files-0000-0_0-5-4_00000000000000000.hfile | Bin 0 -> 6978 bytes ...-0000-0_12-104-302_20250429145946737.hfile | Bin 0 -> 7419 bytes ...s-0000-0_13-62-162_20250429145943911.hfile | Bin 0 -> 7347 bytes .../.hoodie_partition_metadata | 4 + ...stats-0000-0_00000000000000003.log.1_0-0-0 | Bin 0 -> 80 bytes ...ts-0000-0_20250429145938324.log.1_4-57-133 | Bin 0 -> 14691 bytes ...ts-0000-0_20250429145943846.log.1_4-91-233 | Bin 0 -> 14751 bytes ...s-0000-0_20250429145946675.log.1_2-120-383 | Bin 0 -> 14753 bytes ...-0000-0_11-104-301_20250429145946737.hfile | Bin 0 -> 8858 bytes ...s-0000-0_12-62-161_20250429145943911.hfile | Bin 0 -> 8802 bytes .../record_index/.hoodie_partition_metadata | 4 + ...index-0000-0_00000000000000002.log.1_0-0-0 | Bin 0 -> 80 bytes ...index-0001-0_00000000000000002.log.1_0-0-0 | Bin 0 -> 80 bytes ...index-0002-0_00000000000000002.log.1_0-0-0 | Bin 0 -> 80 bytes ...index-0003-0_00000000000000002.log.1_0-0-0 | Bin 0 -> 80 bytes ...index-0004-0_00000000000000002.log.1_0-0-0 | Bin 0 -> 80 bytes ...ex-0004-0_20250429145943846.log.1_0-91-229 | Bin 0 -> 14310 bytes ...index-0005-0_00000000000000002.log.1_0-0-0 | Bin 0 -> 80 bytes ...ex-0005-0_20250429145938324.log.1_0-57-129 | Bin 0 -> 14310 bytes ...index-0006-0_00000000000000002.log.1_0-0-0 | Bin 0 -> 80 bytes ...index-0007-0_00000000000000002.log.1_0-0-0 | Bin 0 -> 80 bytes ...ex-0007-0_20250429145938324.log.1_1-57-130 | Bin 0 -> 14309 bytes ...ex-0007-0_20250429145943846.log.1_1-91-230 | Bin 0 -> 14309 bytes ...index-0008-0_00000000000000002.log.1_0-0-0 | Bin 0 -> 80 bytes ...index-0009-0_00000000000000002.log.1_0-0-0 | Bin 0 -> 80 bytes ...x-0004-0_4-104-294_20250429145946737.hfile | Bin 0 -> 7040 bytes ...ex-0005-0_5-62-154_20250429145943911.hfile | Bin 0 -> 7044 bytes ...x-0007-0_6-104-296_20250429145946737.hfile | Bin 0 -> 7195 bytes ...ex-0007-0_7-62-156_20250429145943911.hfile | Bin 0 -> 7041 bytes .../.hoodie_partition_metadata | 4 + ...price-0000-0_00000000000000004.log.1_0-0-0 | Bin 0 -> 80 bytes ...price-0001-0_00000000000000004.log.1_0-0-0 | Bin 0 -> 80 bytes ...e-0001-0_20250429145946675.log.1_6-120-387 | Bin 0 -> 8107 bytes ...price-0002-0_00000000000000004.log.1_0-0-0 | Bin 0 -> 80 bytes ...e-0002-0_20250429145946675.log.1_5-120-386 | Bin 0 -> 14281 bytes ...price-0003-0_00000000000000004.log.1_0-0-0 | Bin 0 -> 80 bytes ...price-0004-0_00000000000000004.log.1_0-0-0 | Bin 0 -> 80 bytes ...e-0004-0_20250429145946675.log.1_4-120-385 | Bin 0 -> 22389 bytes ...price-0005-0_00000000000000004.log.1_0-0-0 | Bin 0 -> 80 bytes ...price-0006-0_00000000000000004.log.1_0-0-0 | Bin 0 -> 80 bytes ...price-0007-0_00000000000000004.log.1_0-0-0 | Bin 0 -> 80 bytes ...e-0007-0_20250429145946675.log.1_8-120-389 | Bin 0 -> 22388 bytes ...price-0008-0_00000000000000004.log.1_0-0-0 | Bin 0 -> 80 bytes ...e-0008-0_20250429145946675.log.1_7-120-388 | Bin 0 -> 14282 bytes ...price-0009-0_00000000000000004.log.1_0-0-0 | Bin 0 -> 80 bytes ...e-0009-0_20250429145946675.log.1_9-120-390 | Bin 0 -> 8107 bytes ...e-0001-0_1-100-273_00000000000000004.hfile | Bin 0 -> 7017 bytes ...-0001-0_17-104-307_20250429145946737.hfile | Bin 0 -> 7030 bytes ...-0004-0_14-104-304_20250429145946737.hfile | Bin 0 -> 7029 bytes ...e-0004-0_4-100-274_00000000000000004.hfile | Bin 0 -> 7016 bytes ...-0007-0_19-104-309_20250429145946737.hfile | Bin 0 -> 7029 bytes ...e-0007-0_7-100-275_00000000000000004.hfile | Bin 0 -> 7016 bytes ...-0009-0_22-104-312_20250429145946737.hfile | Bin 0 -> 7029 bytes ...e-0009-0_9-100-276_00000000000000004.hfile | Bin 0 -> 7016 bytes .../20250429145938324.deltacommit.inflight | Bin 0 -> 3496 bytes .../20250429145938324.deltacommit.requested | 0 ...429145938324_20250429145943632.deltacommit | Bin 0 -> 4180 bytes .../20250429145943846.deltacommit.inflight | Bin 0 -> 3496 bytes .../20250429145943846.deltacommit.requested | 0 ...429145943846_20250429145945109.deltacommit | Bin 0 -> 4180 bytes .../20250429145945334.indexing.inflight | 0 .../20250429145945334.indexing.requested | Bin 0 -> 828 bytes ...250429145945334_20250429145946286.indexing | Bin 0 -> 1148 bytes .../20250429145946675.deltacommit.inflight | Bin 0 -> 3920 bytes .../20250429145946675.deltacommit.requested | 0 ...429145946675_20250429145948177.deltacommit | Bin 0 -> 4988 bytes ...9f79e6-0_20250429145946675.log.1_1-110-336 | Bin 0 -> 1004 bytes ...3e1bb7-0_20250429145946675.log.1_0-110-335 | Bin 0 -> 1004 bytes .../country=SG/.hoodie_partition_metadata | 4 + ...f79e6-0_0-78-201_20250429145943846.parquet | Bin 0 -> 435328 bytes ...e1bb7-0_0-44-101_20250429145938324.parquet | Bin 0 -> 435331 bytes ...b29514-0_20250429145946675.log.1_2-110-337 | Bin 0 -> 1004 bytes ...221782-0_20250429145946675.log.1_3-110-338 | Bin 0 -> 1004 bytes .../country=US/.hoodie_partition_metadata | 4 + ...29514-0_1-44-102_20250429145938324.parquet | Bin 0 -> 435331 bytes ...21782-0_1-78-202_20250429145943846.parquet | Bin 0 -> 435331 bytes .../.hoodie/20231127051653361.commit | 37 ++ .../20231127051653361.commit.requested | 0 .../.hoodie/20231127051653361.inflight | 31 ++ .../.hoodie/hoodie.properties | 17 + .../.hoodie_partition_metadata | 4 + ...3da93b-0_0-27-28_20231127051653361.parquet | Bin 0 -> 435338 bytes .../hudi_v6_composite_key.zip | Bin 0 -> 284603 bytes .../.hoodie/20211216071453747.commit | 51 ++ .../20211216071453747.commit.requested | 0 .../.hoodie/20211216071453747.inflight | 48 ++ .../stock_ticks_cow/.hoodie/hoodie.properties | 13 + .../2018/08/31/.hoodie_partition_metadata | 4 + ...317216-0_0-28-26_20211216071453747.parquet | Bin 0 -> 440747 bytes .../.hoodie/20211221030120532.deltacommit | 51 ++ .../20211221030120532.deltacommit.inflight | 48 ++ .../20211221030120532.deltacommit.requested | 0 .../.hoodie/20211227092838847.deltacommit | 55 +++ .../20211227092838847.deltacommit.inflight | 71 +++ .../20211227092838847.deltacommit.requested | 0 .../stock_ticks_mor/.hoodie/hoodie.properties | 14 + ...30cdb5a2-0_20211221030120532.log.1_0-28-29 | Bin 0 -> 22220 bytes .../2018/08/31/.hoodie_partition_metadata | 4 + ...cdb5a2-0_0-28-26_20211221030120532.parquet | Bin 0 -> 440746 bytes 227 files changed, 7883 insertions(+) create mode 100644 hudi-trino-plugin/pom.xml create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/ForHudiSplitManager.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/ForHudiSplitSource.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConfig.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConnector.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConnectorFactory.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiErrorCode.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiExecutorModule.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiFileStatus.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiMetadata.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiMetadataFactory.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiModule.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPageSourceProvider.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPlugin.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPredicates.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSessionProperties.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplit.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplitManager.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplitSource.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableHandle.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableInfo.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableName.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableProperties.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTransactionManager.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiUtil.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/TableType.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/TimelineTable.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoHudiFileReaderFactory.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoHudiIoFactory.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoSeekableDataInputStream.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HiveHudiPartitionInfo.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HudiPartitionInfo.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HudiPartitionInfoLoader.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiDirectoryLister.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiBackgroundSplitLoader.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiSplitFactory.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiSplitWeightProvider.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/SizeBasedSplitWeightProvider.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/TrinoHudiStorage.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/TrinoStorageConfiguration.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/BaseHudiConnectorSmokeTest.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/HudiQueryRunner.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConfig.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConnectorFactory.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConnectorParquetColumnNamesTest.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConnectorTest.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiMinioConnectorSmokeTest.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiPlugin.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSessionProperties.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSharedMetastore.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSmokeTest.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSystemTables.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestingHudiConnectorFactory.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestingHudiPlugin.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoHudiStorage.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoStorageConfiguration.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/HudiTablesInitializer.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/HudiTestUtils.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/ResourceHudiTablesInitializer.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TpchHudiTablesInitializer.java create mode 100644 hudi-trino-plugin/src/test/resources/README.md create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.commit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.commit.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.commit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.commit.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/hoodie.properties create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=10/.hoodie_partition_metadata create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=10/719c3273-2805-4124-b1ac-e980dada85bf-0_0-27-1215_20220906063435640.parquet create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=11/.hoodie_partition_metadata create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=11/4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0_0-70-2444_20220906063456550.parquet create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/.index_defs/index.json create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/hoodie.properties create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/hoodie.properties create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000000.deltacommit.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000000.deltacommit.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000000_20250429145939812.deltacommit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000001.deltacommit.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000001.deltacommit.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000001_20250429145940407.deltacommit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002.deltacommit.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002.deltacommit.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002_20250429145941217.deltacommit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003.deltacommit.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003.deltacommit.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003_20250429145941430.deltacommit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000004.deltacommit.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000004.deltacommit.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000004_20250429145945968.deltacommit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145938324.deltacommit.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145938324.deltacommit.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145938324_20250429145943593.deltacommit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472.compaction.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472.compaction.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472_20250429145941874.commit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846.deltacommit.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846.deltacommit.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846_20250429145945066.deltacommit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943911.compaction.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943911.compaction.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943911_20250429145944166.commit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675.deltacommit.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675.deltacommit.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675_20250429145948126.deltacommit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946737.compaction.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946737.compaction.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946737_20250429145947037.commit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0000-0_00000000000000001.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0000-0_20250429145938324.log.1_2-57-131 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0000-0_20250429145943846.log.1_2-91-231 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0000-0_20250429145946675.log.1_0-120-381 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0001-0_00000000000000001.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0001-0_20250429145938324.log.1_3-57-132 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0001-0_20250429145943846.log.1_3-91-232 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0001-0_20250429145946675.log.1_1-120-382 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.hoodie_partition_metadata create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0000-0_10-62-159_20250429145943911.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0000-0_9-104-299_20250429145946737.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0001-0_10-104-300_20250429145946737.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0001-0_11-62-160_20250429145943911.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_00000000000000000.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_20250429145938324.log.1_5-57-134 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_20250429145943846.log.1_5-91-234 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_20250429145946675.log.1_3-120-384 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.hoodie_partition_metadata create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/files-0000-0_0-28-69_20250429145941472.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/files-0000-0_0-5-4_00000000000000000.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/files-0000-0_12-104-302_20250429145946737.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/files-0000-0_13-62-162_20250429145943911.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.hoodie_partition_metadata create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_00000000000000003.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_20250429145938324.log.1_4-57-133 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_20250429145943846.log.1_4-91-233 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_20250429145946675.log.1_2-120-383 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/partition-stats-0000-0_11-104-301_20250429145946737.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/partition-stats-0000-0_12-62-161_20250429145943911.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.hoodie_partition_metadata create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0000-0_00000000000000002.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0001-0_00000000000000002.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0002-0_00000000000000002.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0003-0_00000000000000002.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0004-0_00000000000000002.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0004-0_20250429145943846.log.1_0-91-229 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0005-0_00000000000000002.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0005-0_20250429145938324.log.1_0-57-129 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0006-0_00000000000000002.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0007-0_00000000000000002.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0007-0_20250429145938324.log.1_1-57-130 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0007-0_20250429145943846.log.1_1-91-230 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0008-0_00000000000000002.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0009-0_00000000000000002.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/record-index-0004-0_4-104-294_20250429145946737.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/record-index-0005-0_5-62-154_20250429145943911.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/record-index-0007-0_6-104-296_20250429145946737.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/record-index-0007-0_7-62-156_20250429145943911.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.hoodie_partition_metadata create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0000-0_00000000000000004.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0001-0_00000000000000004.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0001-0_20250429145946675.log.1_6-120-387 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0002-0_00000000000000004.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0002-0_20250429145946675.log.1_5-120-386 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0003-0_00000000000000004.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0004-0_00000000000000004.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0004-0_20250429145946675.log.1_4-120-385 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0005-0_00000000000000004.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0006-0_00000000000000004.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0007-0_00000000000000004.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0007-0_20250429145946675.log.1_8-120-389 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0008-0_00000000000000004.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0008-0_20250429145946675.log.1_7-120-388 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0009-0_00000000000000004.log.1_0-0-0 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0009-0_20250429145946675.log.1_9-120-390 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0001-0_1-100-273_00000000000000004.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0001-0_17-104-307_20250429145946737.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0004-0_14-104-304_20250429145946737.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0004-0_4-100-274_00000000000000004.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0007-0_19-104-309_20250429145946737.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0007-0_7-100-275_00000000000000004.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0009-0_22-104-312_20250429145946737.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0009-0_9-100-276_00000000000000004.hfile create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145938324.deltacommit.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145938324.deltacommit.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145938324_20250429145943632.deltacommit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846.deltacommit.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846.deltacommit.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846_20250429145945109.deltacommit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145945334.indexing.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145945334.indexing.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145945334_20250429145946286.indexing create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145946675.deltacommit.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145946675.deltacommit.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145946675_20250429145948177.deltacommit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=SG/.415fa1e5-7e6a-4569-8b9f-b1f1d19f79e6-0_20250429145946675.log.1_1-110-336 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=SG/.8ee29f20-7679-4f65-8db6-70f9e93e1bb7-0_20250429145946675.log.1_0-110-335 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=SG/.hoodie_partition_metadata create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=SG/415fa1e5-7e6a-4569-8b9f-b1f1d19f79e6-0_0-78-201_20250429145943846.parquet create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=SG/8ee29f20-7679-4f65-8db6-70f9e93e1bb7-0_0-44-101_20250429145938324.parquet create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/.06b93bb0-c6c1-4cfa-baf6-2b6716b29514-0_20250429145946675.log.1_2-110-337 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/.a9d27485-57a8-4561-b21c-ef8ed6221782-0_20250429145946675.log.1_3-110-338 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/.hoodie_partition_metadata create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/06b93bb0-c6c1-4cfa-baf6-2b6716b29514-0_1-44-102_20250429145938324.parquet create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/a9d27485-57a8-4561-b21c-ef8ed6221782-0_1-78-202_20250429145943846.parquet create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.commit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.commit.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/hoodie.properties create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie_partition_metadata create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/05b0f4ec-00fb-49f2-a1e2-7f510f3da93b-0_0-27-28_20231127051653361.parquet create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_v6_composite_key.zip create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/20211216071453747.commit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/20211216071453747.commit.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/20211216071453747.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/hoodie.properties create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/2018/08/31/.hoodie_partition_metadata create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/2018/08/31/871677fb-e0e3-46f8-9cc1-fe497e317216-0_0-28-26_20211216071453747.parquet create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211221030120532.deltacommit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211221030120532.deltacommit.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211221030120532.deltacommit.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211227092838847.deltacommit create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211227092838847.deltacommit.inflight create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211227092838847.deltacommit.requested create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/hoodie.properties create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/2018/08/31/.167a0e3e-9b94-444f-a178-242230cdb5a2-0_20211221030120532.log.1_0-28-29 create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/2018/08/31/.hoodie_partition_metadata create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/2018/08/31/167a0e3e-9b94-444f-a178-242230cdb5a2-0_0-28-26_20211221030120532.parquet diff --git a/hudi-trino-plugin/pom.xml b/hudi-trino-plugin/pom.xml new file mode 100644 index 0000000000000..aad06f3c1f3c3 --- /dev/null +++ b/hudi-trino-plugin/pom.xml @@ -0,0 +1,442 @@ + + + 4.0.0 + + + io.trino + trino-root + 472 + + + + + trino-hudi + trino-plugin + Trino - Hudi connector + + + true + 1.0.2 + + + + + + com.esotericsoftware + kryo + 4.0.2 + + + + com.google.errorprone + error_prone_annotations + true + + + + com.google.guava + guava + + + + com.google.inject + guice + + + + io.airlift + bootstrap + + + + io.airlift + concurrent + + + + io.airlift + configuration + + + + io.airlift + json + + + + io.airlift + log + + + + io.airlift + units + + + + io.trino + trino-filesystem + + + + io.trino + trino-filesystem-manager + + + + io.trino + trino-hive + + + + io.trino + trino-memory-context + + + + io.trino + trino-metastore + + + + io.trino + trino-parquet + + + + io.trino + trino-plugin-toolkit + + + + jakarta.validation + jakarta.validation-api + + + + joda-time + joda-time + + + + org.apache.avro + avro + + + + org.apache.hudi + hudi-common + ${dep.hudi.version} + + + io.dropwizard.metrics + * + + + org.apache.hbase + * + + + org.apache.httpcomponents + * + + + org.apache.orc + * + + + + + + org.apache.hudi + hudi-io + ${dep.hudi.version} + + + com.google.protobuf + protobuf-java + + + + + + org.apache.parquet + parquet-column + + + + org.weakref + jmxutils + + + + com.fasterxml.jackson.core + jackson-annotations + provided + + + + io.airlift + slice + provided + + + + io.opentelemetry + opentelemetry-api + provided + + + + io.opentelemetry + opentelemetry-api-incubator + provided + + + + io.opentelemetry + opentelemetry-context + provided + + + + io.trino + trino-spi + provided + + + + org.openjdk.jol + jol-core + provided + + + + com.github.ben-manes.caffeine + caffeine + runtime + + + + io.airlift + log-manager + runtime + + + + io.dropwizard.metrics + metrics-core + runtime + + + + io.trino + trino-hive-formats + runtime + + + + org.jetbrains + annotations + runtime + + + + io.airlift + junit-extensions + test + + + + io.airlift + testing + test + + + + io.trino + trino-client + test + + + + io.trino + trino-hdfs + test + + + + io.trino + trino-hive + test-jar + test + + + + io.trino + trino-main + test + + + + io.trino + trino-main + test-jar + test + + + + io.trino + trino-parser + test + + + + io.trino + trino-spi + test-jar + test + + + + io.trino + trino-testing + test + + + + io.trino + trino-testing-containers + test + + + + io.trino + trino-testing-services + test + + + + io.trino + trino-tpch + test + + + + io.trino.hadoop + hadoop-apache + test + + + + io.trino.tpch + tpch + test + + + + org.apache.hudi + hudi-client-common + ${dep.hudi.version} + test + + + * + * + + + + + + org.apache.hudi + hudi-hadoop-common + ${dep.hudi.version} + test + + + * + * + + + + + + org.apache.hudi + hudi-java-client + ${dep.hudi.version} + test + + + org.apache.hudi + * + + + + + + org.apache.parquet + parquet-avro + test + + + + org.apache.parquet + parquet-hadoop + test + + + + org.assertj + assertj-core + test + + + + org.json + json + 20250107 + test + + + + org.junit.jupiter + junit-jupiter-api + test + + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.junit.jupiter + junit-jupiter-params + test + + + + + + + org.basepom.maven + duplicate-finder-maven-plugin + + + + log4j.properties + log4j-surefire.properties + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + \ No newline at end of file diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/ForHudiSplitManager.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/ForHudiSplitManager.java new file mode 100644 index 0000000000000..0f1987594a1ac --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/ForHudiSplitManager.java @@ -0,0 +1,29 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.inject.BindingAnnotation; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Retention(RUNTIME) +@Target({FIELD, PARAMETER, METHOD}) +@BindingAnnotation +public @interface ForHudiSplitManager {} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/ForHudiSplitSource.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/ForHudiSplitSource.java new file mode 100644 index 0000000000000..801b1e0309407 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/ForHudiSplitSource.java @@ -0,0 +1,29 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.inject.BindingAnnotation; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Retention(RUNTIME) +@Target({FIELD, PARAMETER, METHOD}) +@BindingAnnotation +public @interface ForHudiSplitSource {} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConfig.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConfig.java new file mode 100644 index 0000000000000..da087737f4b62 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConfig.java @@ -0,0 +1,219 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableList; +import io.airlift.configuration.Config; +import io.airlift.configuration.ConfigDescription; +import io.airlift.configuration.DefunctConfig; +import io.airlift.units.DataSize; +import jakarta.validation.constraints.DecimalMax; +import jakarta.validation.constraints.DecimalMin; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotNull; + +import java.util.List; + +import static com.google.common.collect.ImmutableList.toImmutableList; +import static io.airlift.units.DataSize.Unit.MEGABYTE; +import static java.util.Locale.ENGLISH; + +@DefunctConfig({ + "hudi.min-partition-batch-size", + "hudi.max-partition-batch-size", + "hudi.metadata-enabled", +}) +public class HudiConfig +{ + private List columnsToHide = ImmutableList.of(); + private boolean shouldUseParquetColumnNames = true; + private boolean sizeBasedSplitWeightsEnabled = true; + private DataSize standardSplitWeightSize = DataSize.of(128, MEGABYTE); + private double minimumAssignedSplitWeight = 0.05; + private int maxSplitsPerSecond = Integer.MAX_VALUE; + private int maxOutstandingSplits = 1000; + private int splitLoaderParallelism = 4; + private int splitGeneratorParallelism = 4; + private long perTransactionMetastoreCacheMaximumSize = 2000; + private boolean queryPartitionFilterRequired; + private boolean ignoreAbsentPartitions; + + public List getColumnsToHide() + { + return columnsToHide; + } + + @Config("hudi.columns-to-hide") + @ConfigDescription("List of column names that will be hidden from the query output. " + + "It can be used to hide Hudi meta fields. By default, no fields are hidden.") + public HudiConfig setColumnsToHide(List columnsToHide) + { + this.columnsToHide = columnsToHide.stream() + .map(s -> s.toLowerCase(ENGLISH)) + .collect(toImmutableList()); + return this; + } + + @Config("hudi.parquet.use-column-names") + @ConfigDescription("Access Parquet columns using names from the file. If disabled, then columns are accessed using index." + + "Only applicable to Parquet file format.") + public HudiConfig setUseParquetColumnNames(boolean shouldUseParquetColumnNames) + { + this.shouldUseParquetColumnNames = shouldUseParquetColumnNames; + return this; + } + + public boolean getUseParquetColumnNames() + { + return this.shouldUseParquetColumnNames; + } + + @Config("hudi.size-based-split-weights-enabled") + @ConfigDescription("Unlike uniform splitting, size-based splitting ensures that each batch of splits has enough data to process. " + + "By default, it is enabled to improve performance.") + public HudiConfig setSizeBasedSplitWeightsEnabled(boolean sizeBasedSplitWeightsEnabled) + { + this.sizeBasedSplitWeightsEnabled = sizeBasedSplitWeightsEnabled; + return this; + } + + public boolean isSizeBasedSplitWeightsEnabled() + { + return sizeBasedSplitWeightsEnabled; + } + + @Config("hudi.standard-split-weight-size") + @ConfigDescription("The split size corresponding to the standard weight (1.0) " + + "when size based split weights are enabled.") + public HudiConfig setStandardSplitWeightSize(DataSize standardSplitWeightSize) + { + this.standardSplitWeightSize = standardSplitWeightSize; + return this; + } + + @NotNull + public DataSize getStandardSplitWeightSize() + { + return standardSplitWeightSize; + } + + @Config("hudi.minimum-assigned-split-weight") + @ConfigDescription("Minimum weight that a split can be assigned when size based split weights are enabled.") + public HudiConfig setMinimumAssignedSplitWeight(double minimumAssignedSplitWeight) + { + this.minimumAssignedSplitWeight = minimumAssignedSplitWeight; + return this; + } + + @DecimalMax("1") + @DecimalMin(value = "0", inclusive = false) + public double getMinimumAssignedSplitWeight() + { + return minimumAssignedSplitWeight; + } + + @Min(1) + public int getMaxSplitsPerSecond() + { + return maxSplitsPerSecond; + } + + @Config("hudi.max-splits-per-second") + @ConfigDescription("Rate at which splits are enqueued for processing. The queue will throttle if this rate limit is breached.") + public HudiConfig setMaxSplitsPerSecond(int maxSplitsPerSecond) + { + this.maxSplitsPerSecond = maxSplitsPerSecond; + return this; + } + + @Min(1) + public int getMaxOutstandingSplits() + { + return maxOutstandingSplits; + } + + @Config("hudi.max-outstanding-splits") + @ConfigDescription("Maximum outstanding splits in a batch enqueued for processing.") + public HudiConfig setMaxOutstandingSplits(int maxOutstandingSplits) + { + this.maxOutstandingSplits = maxOutstandingSplits; + return this; + } + + @Min(1) + public int getSplitGeneratorParallelism() + { + return splitGeneratorParallelism; + } + + @Config("hudi.split-generator-parallelism") + @ConfigDescription("Number of threads to generate splits from partitions.") + public HudiConfig setSplitGeneratorParallelism(int splitGeneratorParallelism) + { + this.splitGeneratorParallelism = splitGeneratorParallelism; + return this; + } + + @Min(1) + public int getSplitLoaderParallelism() + { + return splitLoaderParallelism; + } + + @Config("hudi.split-loader-parallelism") + @ConfigDescription("Number of threads to run background split loader. A single background split loader is needed per query.") + public HudiConfig setSplitLoaderParallelism(int splitLoaderParallelism) + { + this.splitLoaderParallelism = splitLoaderParallelism; + return this; + } + + @Min(1) + public long getPerTransactionMetastoreCacheMaximumSize() + { + return perTransactionMetastoreCacheMaximumSize; + } + + @Config("hudi.per-transaction-metastore-cache-maximum-size") + public HudiConfig setPerTransactionMetastoreCacheMaximumSize(long perTransactionMetastoreCacheMaximumSize) + { + this.perTransactionMetastoreCacheMaximumSize = perTransactionMetastoreCacheMaximumSize; + return this; + } + + @Config("hudi.query-partition-filter-required") + @ConfigDescription("Require a filter on at least one partition column") + public HudiConfig setQueryPartitionFilterRequired(boolean queryPartitionFilterRequired) + { + this.queryPartitionFilterRequired = queryPartitionFilterRequired; + return this; + } + + public boolean isQueryPartitionFilterRequired() + { + return queryPartitionFilterRequired; + } + + @Config("hudi.ignore-absent-partitions") + public HudiConfig setIgnoreAbsentPartitions(boolean ignoreAbsentPartitions) + { + this.ignoreAbsentPartitions = ignoreAbsentPartitions; + return this; + } + + public boolean isIgnoreAbsentPartitions() + { + return ignoreAbsentPartitions; + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConnector.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConnector.java new file mode 100644 index 0000000000000..072005cd3ffc4 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConnector.java @@ -0,0 +1,158 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.inject.Injector; +import io.airlift.bootstrap.LifeCycleManager; +import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorMetadata; +import io.trino.plugin.base.session.SessionPropertiesProvider; +import io.trino.plugin.hive.HiveTransactionHandle; +import io.trino.spi.classloader.ThreadContextClassLoader; +import io.trino.spi.connector.Connector; +import io.trino.spi.connector.ConnectorMetadata; +import io.trino.spi.connector.ConnectorNodePartitioningProvider; +import io.trino.spi.connector.ConnectorPageSourceProvider; +import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.connector.ConnectorSplitManager; +import io.trino.spi.connector.ConnectorTransactionHandle; +import io.trino.spi.connector.SystemTable; +import io.trino.spi.session.PropertyMetadata; +import io.trino.spi.transaction.IsolationLevel; + +import java.util.List; +import java.util.Set; + +import static com.google.common.collect.ImmutableList.toImmutableList; +import static io.trino.spi.transaction.IsolationLevel.SERIALIZABLE; +import static io.trino.spi.transaction.IsolationLevel.checkConnectorSupports; +import static java.util.Objects.requireNonNull; + +public class HudiConnector + implements Connector +{ + private final Injector injector; + private final LifeCycleManager lifeCycleManager; + private final HudiTransactionManager transactionManager; + private final ConnectorSplitManager splitManager; + private final ConnectorPageSourceProvider pageSourceProvider; + private final ConnectorNodePartitioningProvider nodePartitioningProvider; + private final Set systemTables; + private final List> sessionProperties; + private final List> tableProperties; + + public HudiConnector( + Injector injector, + LifeCycleManager lifeCycleManager, + HudiTransactionManager transactionManager, + ConnectorSplitManager splitManager, + ConnectorPageSourceProvider pageSourceProvider, + ConnectorNodePartitioningProvider nodePartitioningProvider, + Set systemTables, + Set sessionPropertiesProviders, + List> tableProperties) + { + this.injector = requireNonNull(injector, "injector is null"); + this.lifeCycleManager = requireNonNull(lifeCycleManager, "lifeCycleManager is null"); + this.transactionManager = requireNonNull(transactionManager, "transactionManager is null"); + this.splitManager = requireNonNull(splitManager, "splitManager is null"); + this.pageSourceProvider = requireNonNull(pageSourceProvider, "pageSourceProvider is null"); + this.nodePartitioningProvider = requireNonNull(nodePartitioningProvider, "nodePartitioningProvider is null"); + this.systemTables = ImmutableSet.copyOf(requireNonNull(systemTables, "systemTables is null")); + this.sessionProperties = requireNonNull(sessionPropertiesProviders, "sessionPropertiesProviders is null").stream() + .flatMap(sessionPropertiesProvider -> sessionPropertiesProvider.getSessionProperties().stream()) + .collect(toImmutableList()); + this.tableProperties = ImmutableList.copyOf(requireNonNull(tableProperties, "tableProperties is null")); + } + + @Override + public ConnectorMetadata getMetadata(ConnectorSession session, ConnectorTransactionHandle transactionHandle) + { + ConnectorMetadata metadata = transactionManager.get(transactionHandle, session.getIdentity()); + return new ClassLoaderSafeConnectorMetadata(metadata, getClass().getClassLoader()); + } + + @Override + public ConnectorSplitManager getSplitManager() + { + return splitManager; + } + + @Override + public ConnectorPageSourceProvider getPageSourceProvider() + { + return pageSourceProvider; + } + + @Override + public ConnectorNodePartitioningProvider getNodePartitioningProvider() + { + return nodePartitioningProvider; + } + + @Override + public Set getSystemTables() + { + return systemTables; + } + + @Override + public List> getSessionProperties() + { + return sessionProperties; + } + + @Override + public List> getTableProperties() + { + return tableProperties; + } + + @Override + public ConnectorTransactionHandle beginTransaction(IsolationLevel isolationLevel, boolean readOnly, boolean autoCommit) + { + checkConnectorSupports(SERIALIZABLE, isolationLevel); + ConnectorTransactionHandle transaction = new HiveTransactionHandle(true); + try (ThreadContextClassLoader _ = new ThreadContextClassLoader(getClass().getClassLoader())) { + transactionManager.put(transaction); + } + return transaction; + } + + @Override + public void commit(ConnectorTransactionHandle transaction) + { + transactionManager.commit(transaction); + } + + @Override + public void rollback(ConnectorTransactionHandle transaction) + { + transactionManager.rollback(transaction); + } + + @Override + public final void shutdown() + { + lifeCycleManager.stop(); + } + + @VisibleForTesting + public Injector getInjector() + { + return injector; + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConnectorFactory.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConnectorFactory.java new file mode 100644 index 0000000000000..59c8833141d86 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConnectorFactory.java @@ -0,0 +1,120 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableSet; +import com.google.inject.Injector; +import com.google.inject.Key; +import com.google.inject.Module; +import io.airlift.bootstrap.Bootstrap; +import io.airlift.bootstrap.LifeCycleManager; +import io.airlift.json.JsonModule; +import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.trace.Tracer; +import io.trino.filesystem.manager.FileSystemModule; +import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorPageSourceProvider; +import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorSplitManager; +import io.trino.plugin.base.classloader.ClassLoaderSafeNodePartitioningProvider; +import io.trino.plugin.base.jmx.MBeanServerModule; +import io.trino.plugin.base.session.SessionPropertiesProvider; +import io.trino.plugin.hive.NodeVersion; +import io.trino.plugin.hive.metastore.HiveMetastoreModule; +import io.trino.spi.Node; +import io.trino.spi.NodeManager; +import io.trino.spi.catalog.CatalogName; +import io.trino.spi.classloader.ThreadContextClassLoader; +import io.trino.spi.connector.Connector; +import io.trino.spi.connector.ConnectorContext; +import io.trino.spi.connector.ConnectorFactory; +import io.trino.spi.connector.ConnectorNodePartitioningProvider; +import io.trino.spi.connector.ConnectorPageSourceProvider; +import io.trino.spi.connector.ConnectorSplitManager; +import io.trino.spi.type.TypeManager; +import org.weakref.jmx.guice.MBeanModule; + +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +import static com.google.inject.util.Modules.EMPTY_MODULE; +import static io.trino.plugin.base.Versions.checkStrictSpiVersionMatch; + +public class HudiConnectorFactory + implements ConnectorFactory +{ + @Override + public String getName() + { + return "hudi"; + } + + @Override + public Connector create(String catalogName, Map config, ConnectorContext context) + { + checkStrictSpiVersionMatch(context, this); + return createConnector(catalogName, config, context, Optional.empty()); + } + + public static Connector createConnector( + String catalogName, + Map config, + ConnectorContext context, + Optional module) + { + ClassLoader classLoader = HudiConnectorFactory.class.getClassLoader(); + try (ThreadContextClassLoader _ = new ThreadContextClassLoader(classLoader)) { + Bootstrap app = new Bootstrap( + new MBeanModule(), + new JsonModule(), + new HudiModule(), + new HiveMetastoreModule(Optional.empty()), + new FileSystemModule(catalogName, context.getCurrentNode().isCoordinator(), context.getOpenTelemetry(), false), + new MBeanServerModule(), + module.orElse(EMPTY_MODULE), + binder -> { + binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()); + binder.bind(Tracer.class).toInstance(context.getTracer()); + binder.bind(NodeVersion.class).toInstance(new NodeVersion(context.getCurrentNode().getVersion())); + binder.bind(Node.class).toInstance(context.getCurrentNode()); + binder.bind(NodeManager.class).toInstance(context.getNodeManager()); + binder.bind(TypeManager.class).toInstance(context.getTypeManager()); + binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)); + }); + + Injector injector = app + .doNotInitializeLogging() + .setRequiredConfigurationProperties(config) + .initialize(); + + LifeCycleManager lifeCycleManager = injector.getInstance(LifeCycleManager.class); + HudiTransactionManager transactionManager = injector.getInstance(HudiTransactionManager.class); + ConnectorSplitManager splitManager = injector.getInstance(ConnectorSplitManager.class); + ConnectorPageSourceProvider connectorPageSource = injector.getInstance(ConnectorPageSourceProvider.class); + ConnectorNodePartitioningProvider connectorDistributionProvider = injector.getInstance(ConnectorNodePartitioningProvider.class); + Set sessionPropertiesProviders = injector.getInstance(new Key<>() {}); + HudiTableProperties hudiTableProperties = injector.getInstance(HudiTableProperties.class); + + return new HudiConnector( + injector, + lifeCycleManager, + transactionManager, + new ClassLoaderSafeConnectorSplitManager(splitManager, classLoader), + new ClassLoaderSafeConnectorPageSourceProvider(connectorPageSource, classLoader), + new ClassLoaderSafeNodePartitioningProvider(connectorDistributionProvider, classLoader), + ImmutableSet.of(), + sessionPropertiesProviders, + hudiTableProperties.getTableProperties()); + } + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiErrorCode.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiErrorCode.java new file mode 100644 index 0000000000000..405017236503c --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiErrorCode.java @@ -0,0 +1,50 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import io.trino.spi.ErrorCode; +import io.trino.spi.ErrorCodeSupplier; +import io.trino.spi.ErrorType; + +import static io.trino.spi.ErrorType.EXTERNAL; + +public enum HudiErrorCode + implements ErrorCodeSupplier +{ + // HUDI_UNKNOWN_TABLE_TYPE(0, EXTERNAL), + HUDI_INVALID_PARTITION_VALUE(1, EXTERNAL), + HUDI_BAD_DATA(2, EXTERNAL), + // HUDI_MISSING_DATA(3, EXTERNAL) is deprecated + HUDI_CANNOT_OPEN_SPLIT(4, EXTERNAL), + HUDI_UNSUPPORTED_FILE_FORMAT(5, EXTERNAL), + HUDI_CURSOR_ERROR(6, EXTERNAL), + HUDI_FILESYSTEM_ERROR(7, EXTERNAL), + HUDI_PARTITION_NOT_FOUND(8, EXTERNAL), + // HUDI_UNSUPPORTED_TABLE_TYPE(9, EXTERNAL), // Unused. Could be mistaken with HUDI_UNKNOWN_TABLE_TYPE. + + /**/; + + private final ErrorCode errorCode; + + HudiErrorCode(int code, ErrorType type) + { + errorCode = new ErrorCode(code + 0x0507_0000, name(), type); + } + + @Override + public ErrorCode toErrorCode() + { + return errorCode; + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiExecutorModule.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiExecutorModule.java new file mode 100644 index 0000000000000..4fe862d96204c --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiExecutorModule.java @@ -0,0 +1,57 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.inject.Binder; +import com.google.inject.Key; +import com.google.inject.Module; +import com.google.inject.Provides; +import com.google.inject.Singleton; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ScheduledExecutorService; + +import static io.airlift.concurrent.Threads.daemonThreadsNamed; +import static io.trino.plugin.base.ClosingBinder.closingBinder; +import static java.util.concurrent.Executors.newCachedThreadPool; +import static java.util.concurrent.Executors.newScheduledThreadPool; + +public class HudiExecutorModule + implements Module +{ + @Override + public void configure(Binder binder) + { + closingBinder(binder).registerExecutor(Key.get(ExecutorService.class, ForHudiSplitManager.class)); + closingBinder(binder).registerExecutor(Key.get(ScheduledExecutorService.class, ForHudiSplitSource.class)); + } + + @Provides + @Singleton + @ForHudiSplitManager + public ExecutorService createExecutorService() + { + return newCachedThreadPool(daemonThreadsNamed("hudi-split-manager-%s")); + } + + @Provides + @Singleton + @ForHudiSplitSource + public ScheduledExecutorService createSplitLoaderExecutor(HudiConfig hudiConfig) + { + return newScheduledThreadPool( + hudiConfig.getSplitLoaderParallelism(), + daemonThreadsNamed("hudi-split-loader-%s")); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiFileStatus.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiFileStatus.java new file mode 100644 index 0000000000000..56d585db87721 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiFileStatus.java @@ -0,0 +1,26 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import io.trino.filesystem.Location; + +import static java.util.Objects.requireNonNull; + +public record HudiFileStatus(Location location, boolean isDirectory, long length, long modificationTime, long blockSize) +{ + public HudiFileStatus + { + requireNonNull(location, "location is null"); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiMetadata.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiMetadata.java new file mode 100644 index 0000000000000..b98cb5355663a --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiMetadata.java @@ -0,0 +1,352 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import io.trino.filesystem.Location; +import io.trino.filesystem.TrinoFileSystemFactory; +import io.trino.metastore.Column; +import io.trino.metastore.HiveMetastore; +import io.trino.metastore.Table; +import io.trino.metastore.TableInfo; +import io.trino.plugin.base.classloader.ClassLoaderSafeSystemTable; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.spi.TrinoException; +import io.trino.spi.connector.ColumnHandle; +import io.trino.spi.connector.ColumnMetadata; +import io.trino.spi.connector.ConnectorMetadata; +import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.connector.ConnectorTableHandle; +import io.trino.spi.connector.ConnectorTableMetadata; +import io.trino.spi.connector.ConnectorTableVersion; +import io.trino.spi.connector.Constraint; +import io.trino.spi.connector.ConstraintApplicationResult; +import io.trino.spi.connector.RelationColumnsMetadata; +import io.trino.spi.connector.SchemaTableName; +import io.trino.spi.connector.SchemaTablePrefix; +import io.trino.spi.connector.SystemTable; +import io.trino.spi.connector.TableNotFoundException; +import io.trino.spi.predicate.TupleDomain; +import io.trino.spi.type.TypeManager; + +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.function.Function; +import java.util.function.UnaryOperator; +import java.util.stream.Stream; + +import static com.google.common.base.Strings.isNullOrEmpty; +import static com.google.common.collect.ImmutableList.toImmutableList; +import static com.google.common.collect.ImmutableMap.toImmutableMap; +import static com.google.common.collect.ImmutableSet.toImmutableSet; +import static io.trino.metastore.Table.TABLE_COMMENT; +import static io.trino.plugin.hive.HiveTimestampPrecision.NANOSECONDS; +import static io.trino.plugin.hive.util.HiveUtil.columnMetadataGetter; +import static io.trino.plugin.hive.util.HiveUtil.getPartitionKeyColumnHandles; +import static io.trino.plugin.hive.util.HiveUtil.hiveColumnHandles; +import static io.trino.plugin.hive.util.HiveUtil.isHiveSystemSchema; +import static io.trino.plugin.hive.util.HiveUtil.isHudiTable; +import static io.trino.plugin.hudi.HudiErrorCode.HUDI_BAD_DATA; +import static io.trino.plugin.hudi.HudiSessionProperties.getColumnsToHide; +import static io.trino.plugin.hudi.HudiSessionProperties.isQueryPartitionFilterRequired; +import static io.trino.plugin.hudi.HudiTableProperties.LOCATION_PROPERTY; +import static io.trino.plugin.hudi.HudiTableProperties.PARTITIONED_BY_PROPERTY; +import static io.trino.plugin.hudi.HudiUtil.hudiMetadataExists; +import static io.trino.spi.StandardErrorCode.NOT_SUPPORTED; +import static io.trino.spi.StandardErrorCode.QUERY_REJECTED; +import static io.trino.spi.StandardErrorCode.UNSUPPORTED_TABLE_TYPE; +import static io.trino.spi.connector.SchemaTableName.schemaTableName; +import static java.lang.String.format; +import static java.util.Collections.singletonList; +import static java.util.Objects.requireNonNull; +import static java.util.function.Function.identity; +import static org.apache.hudi.common.model.HoodieTableType.COPY_ON_WRITE; + +public class HudiMetadata + implements ConnectorMetadata +{ + private final HiveMetastore metastore; + private final TrinoFileSystemFactory fileSystemFactory; + private final TypeManager typeManager; + + public HudiMetadata(HiveMetastore metastore, TrinoFileSystemFactory fileSystemFactory, TypeManager typeManager) + { + this.metastore = requireNonNull(metastore, "metastore is null"); + this.fileSystemFactory = requireNonNull(fileSystemFactory, "fileSystemFactory is null"); + this.typeManager = requireNonNull(typeManager, "typeManager is null"); + } + + @Override + public List listSchemaNames(ConnectorSession session) + { + return metastore.getAllDatabases().stream() + .filter(schemaName -> !isHiveSystemSchema(schemaName)) + .collect(toImmutableList()); + } + + @Override + public HudiTableHandle getTableHandle(ConnectorSession session, SchemaTableName tableName, Optional startVersion, Optional endVersion) + { + if (startVersion.isPresent() || endVersion.isPresent()) { + throw new TrinoException(NOT_SUPPORTED, "This connector does not support versioned tables"); + } + + if (isHiveSystemSchema(tableName.getSchemaName())) { + return null; + } + Optional table = metastore.getTable(tableName.getSchemaName(), tableName.getTableName()); + if (table.isEmpty()) { + return null; + } + if (!isHudiTable(table.get())) { + throw new TrinoException(UNSUPPORTED_TABLE_TYPE, format("Not a Hudi table: %s", tableName)); + } + Location location = Location.of(table.get().getStorage().getLocation()); + if (!hudiMetadataExists(fileSystemFactory.create(session), location)) { + throw new TrinoException(HUDI_BAD_DATA, "Location of table %s does not contain Hudi table metadata: %s".formatted(tableName, location)); + } + + return new HudiTableHandle( + tableName.getSchemaName(), + tableName.getTableName(), + table.get().getStorage().getLocation(), + COPY_ON_WRITE, + getPartitionKeyColumnHandles(table.get(), typeManager), + TupleDomain.all(), + TupleDomain.all()); + } + + @Override + public Optional getSystemTable(ConnectorSession session, SchemaTableName tableName) + { + return getRawSystemTable(tableName, session) + .map(systemTable -> new ClassLoaderSafeSystemTable(systemTable, getClass().getClassLoader())); + } + + private Optional getRawSystemTable(SchemaTableName tableName, ConnectorSession session) + { + Optional nameOptional = HudiTableName.from(tableName.getTableName()); + if (nameOptional.isEmpty()) { + return Optional.empty(); + } + HudiTableName name = nameOptional.get(); + if (name.tableType() == TableType.DATA) { + return Optional.empty(); + } + + Optional
tableOptional = metastore.getTable(tableName.getSchemaName(), name.tableName()); + if (tableOptional.isEmpty()) { + return Optional.empty(); + } + if (!isHudiTable(tableOptional.get())) { + return Optional.empty(); + } + return switch (name.tableType()) { + case DATA -> throw new AssertionError(); + case TIMELINE -> { + SchemaTableName systemTableName = new SchemaTableName(tableName.getSchemaName(), name.tableNameWithType()); + yield Optional.of(new TimelineTable(fileSystemFactory.create(session), systemTableName, tableOptional.get())); + } + }; + } + + @Override + public ConnectorTableMetadata getTableMetadata(ConnectorSession session, ConnectorTableHandle table) + { + HudiTableHandle hudiTableHandle = (HudiTableHandle) table; + return getTableMetadata(hudiTableHandle.getSchemaTableName(), getColumnsToHide(session)); + } + + @Override + public Optional> applyFilter(ConnectorSession session, ConnectorTableHandle tableHandle, Constraint constraint) + { + HudiTableHandle handle = (HudiTableHandle) tableHandle; + HudiPredicates predicates = HudiPredicates.from(constraint.getSummary()); + TupleDomain regularColumnPredicates = predicates.getRegularColumnPredicates(); + TupleDomain partitionColumnPredicates = predicates.getPartitionColumnPredicates(); + + // TODO Since the constraint#predicate isn't utilized during split generation. So, + // Let's not add constraint#predicateColumns to newConstraintColumns. + Set newConstraintColumns = Stream.concat( + Stream.concat( + regularColumnPredicates.getDomains().stream() + .map(Map::keySet) + .flatMap(Collection::stream), + partitionColumnPredicates.getDomains().stream() + .map(Map::keySet) + .flatMap(Collection::stream)), + handle.getConstraintColumns().stream()) + .collect(toImmutableSet()); + + HudiTableHandle newHudiTableHandle = handle.applyPredicates( + newConstraintColumns, + partitionColumnPredicates, + regularColumnPredicates); + + if (handle.getPartitionPredicates().equals(newHudiTableHandle.getPartitionPredicates()) + && handle.getRegularPredicates().equals(newHudiTableHandle.getRegularPredicates()) + && handle.getConstraintColumns().equals(newHudiTableHandle.getConstraintColumns())) { + return Optional.empty(); + } + + return Optional.of(new ConstraintApplicationResult<>( + newHudiTableHandle, + newHudiTableHandle.getRegularPredicates().transformKeys(ColumnHandle.class::cast), + constraint.getExpression(), + false)); + } + + @Override + public Map getColumnHandles(ConnectorSession session, ConnectorTableHandle tableHandle) + { + HudiTableHandle hudiTableHandle = (HudiTableHandle) tableHandle; + Table table = metastore.getTable(hudiTableHandle.getSchemaName(), hudiTableHandle.getTableName()) + .orElseThrow(() -> new TableNotFoundException(schemaTableName(hudiTableHandle.getSchemaName(), hudiTableHandle.getTableName()))); + return hiveColumnHandles(table, typeManager, NANOSECONDS).stream() + .collect(toImmutableMap(HiveColumnHandle::getName, identity())); + } + + @Override + public ColumnMetadata getColumnMetadata(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnHandle columnHandle) + { + return ((HiveColumnHandle) columnHandle).getColumnMetadata(); + } + + @Override + public Optional getInfo(ConnectorSession session, ConnectorTableHandle tableHandle) + { + HudiTableHandle table = (HudiTableHandle) tableHandle; + return Optional.of(new HudiTableInfo(table.getSchemaTableName(), table.getTableType().name(), table.getBasePath())); + } + + @Override + public List listTables(ConnectorSession session, Optional optionalSchemaName) + { + ImmutableList.Builder tableNames = ImmutableList.builder(); + for (String schemaName : listSchemas(session, optionalSchemaName)) { + for (TableInfo tableInfo : metastore.getTables(schemaName)) { + tableNames.add(tableInfo.tableName()); + } + } + return tableNames.build(); + } + + @Override + public Iterator streamRelationColumns( + ConnectorSession session, + Optional schemaName, + UnaryOperator> relationFilter) + { + SchemaTablePrefix prefix = schemaName.map(SchemaTablePrefix::new) + .orElseGet(SchemaTablePrefix::new); + List tables = prefix.getTable() + .map(_ -> singletonList(prefix.toSchemaTableName())) + .orElseGet(() -> listTables(session, prefix.getSchema())); + + Map relationColumns = tables.stream() + .map(table -> getTableColumnMetadata(session, table)) + .flatMap(Optional::stream) + .collect(toImmutableMap(RelationColumnsMetadata::name, Function.identity())); + return relationFilter.apply(relationColumns.keySet()).stream() + .map(relationColumns::get) + .iterator(); + } + + @Override + public void validateScan(ConnectorSession session, ConnectorTableHandle handle) + { + HudiTableHandle hudiTableHandle = (HudiTableHandle) handle; + if (isQueryPartitionFilterRequired(session)) { + if (!hudiTableHandle.getPartitionColumns().isEmpty()) { + Set partitionColumns = hudiTableHandle.getPartitionColumns().stream() + .map(HiveColumnHandle::getName) + .collect(toImmutableSet()); + Set constraintColumns = hudiTableHandle.getConstraintColumns().stream() + .map(HiveColumnHandle::getBaseColumnName) + .collect(toImmutableSet()); + if (Collections.disjoint(constraintColumns, partitionColumns)) { + throw new TrinoException( + QUERY_REJECTED, + format("Filter required on %s for at least one of the partition columns: %s", hudiTableHandle.getSchemaTableName(), String.join(", ", partitionColumns))); + } + } + } + } + + @Override + public boolean allowSplittingReadIntoMultipleSubQueries(ConnectorSession session, ConnectorTableHandle tableHandle) + { + // hudi supports only a columnar (parquet) storage format + return true; + } + + HiveMetastore getMetastore() + { + return metastore; + } + + private Optional getTableColumnMetadata(ConnectorSession session, SchemaTableName table) + { + try { + List columns = getTableMetadata(table, getColumnsToHide(session)).getColumns(); + return Optional.of(RelationColumnsMetadata.forTable(table, columns)); + } + catch (TableNotFoundException _) { + return Optional.empty(); + } + } + + private ConnectorTableMetadata getTableMetadata(SchemaTableName tableName, Collection columnsToHide) + { + Table table = metastore.getTable(tableName.getSchemaName(), tableName.getTableName()) + .orElseThrow(() -> new TableNotFoundException(tableName)); + Function metadataGetter = columnMetadataGetter(table); + List columns = hiveColumnHandles(table, typeManager, NANOSECONDS).stream() + .filter(column -> !columnsToHide.contains(column.getName())) + .map(metadataGetter) + .collect(toImmutableList()); + + ImmutableMap.Builder properties = ImmutableMap.builder(); + // Location property + String location = table.getStorage().getOptionalLocation().orElse(null); + if (!isNullOrEmpty(location)) { + properties.put(LOCATION_PROPERTY, location); + } + + // Partitioning property + List partitionedBy = table.getPartitionColumns().stream() + .map(Column::getName) + .collect(toImmutableList()); + if (!partitionedBy.isEmpty()) { + properties.put(PARTITIONED_BY_PROPERTY, partitionedBy); + } + + Optional comment = Optional.ofNullable(table.getParameters().get(TABLE_COMMENT)); + return new ConnectorTableMetadata(tableName, columns, properties.buildOrThrow(), comment); + } + + private List listSchemas(ConnectorSession session, Optional schemaName) + { + return schemaName + .filter(name -> !isHiveSystemSchema(name)) + .map(Collections::singletonList) + .orElseGet(() -> listSchemaNames(session)); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiMetadataFactory.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiMetadataFactory.java new file mode 100644 index 0000000000000..444d20e6a8339 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiMetadataFactory.java @@ -0,0 +1,49 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.inject.Inject; +import io.trino.filesystem.TrinoFileSystemFactory; +import io.trino.metastore.HiveMetastoreFactory; +import io.trino.metastore.cache.CachingHiveMetastore; +import io.trino.spi.security.ConnectorIdentity; +import io.trino.spi.type.TypeManager; + +import java.util.Optional; + +import static io.trino.metastore.cache.CachingHiveMetastore.createPerTransactionCache; +import static java.util.Objects.requireNonNull; + +public class HudiMetadataFactory +{ + private final HiveMetastoreFactory metastoreFactory; + private final TrinoFileSystemFactory fileSystemFactory; + private final TypeManager typeManager; + private final long perTransactionMetastoreCacheMaximumSize; + + @Inject + public HudiMetadataFactory(HiveMetastoreFactory metastoreFactory, TrinoFileSystemFactory fileSystemFactory, TypeManager typeManager, HudiConfig hudiConfig) + { + this.metastoreFactory = requireNonNull(metastoreFactory, "metastore is null"); + this.fileSystemFactory = requireNonNull(fileSystemFactory, "fileSystemFactory is null"); + this.typeManager = requireNonNull(typeManager, "typeManager is null"); + this.perTransactionMetastoreCacheMaximumSize = hudiConfig.getPerTransactionMetastoreCacheMaximumSize(); + } + + public HudiMetadata create(ConnectorIdentity identity) + { + CachingHiveMetastore cachingHiveMetastore = createPerTransactionCache(metastoreFactory.createMetastore(Optional.of(identity)), perTransactionMetastoreCacheMaximumSize); + return new HudiMetadata(cachingHiveMetastore, fileSystemFactory, typeManager); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiModule.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiModule.java new file mode 100644 index 0000000000000..a9f65c60affef --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiModule.java @@ -0,0 +1,62 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.inject.Binder; +import com.google.inject.Module; +import com.google.inject.Scopes; +import io.trino.plugin.base.metrics.FileFormatDataSourceStats; +import io.trino.plugin.base.session.SessionPropertiesProvider; +import io.trino.plugin.hive.HideDeltaLakeTables; +import io.trino.plugin.hive.HiveNodePartitioningProvider; +import io.trino.plugin.hive.parquet.ParquetReaderConfig; +import io.trino.plugin.hive.parquet.ParquetWriterConfig; +import io.trino.spi.connector.ConnectorNodePartitioningProvider; +import io.trino.spi.connector.ConnectorPageSourceProvider; +import io.trino.spi.connector.ConnectorSplitManager; + +import static com.google.inject.multibindings.Multibinder.newSetBinder; +import static io.airlift.configuration.ConfigBinder.configBinder; +import static org.weakref.jmx.guice.ExportBinder.newExporter; + +public class HudiModule + implements Module +{ + @Override + public void configure(Binder binder) + { + binder.bind(HudiTransactionManager.class).in(Scopes.SINGLETON); + + configBinder(binder).bindConfig(HudiConfig.class); + + binder.bind(boolean.class).annotatedWith(HideDeltaLakeTables.class).toInstance(false); + + newSetBinder(binder, SessionPropertiesProvider.class).addBinding().to(HudiSessionProperties.class).in(Scopes.SINGLETON); + binder.bind(HudiTableProperties.class).in(Scopes.SINGLETON); + + binder.bind(ConnectorSplitManager.class).to(HudiSplitManager.class).in(Scopes.SINGLETON); + binder.bind(ConnectorPageSourceProvider.class).to(HudiPageSourceProvider.class).in(Scopes.SINGLETON); + binder.bind(ConnectorNodePartitioningProvider.class).to(HiveNodePartitioningProvider.class).in(Scopes.SINGLETON); + + configBinder(binder).bindConfig(ParquetReaderConfig.class); + configBinder(binder).bindConfig(ParquetWriterConfig.class); + + binder.bind(HudiMetadataFactory.class).in(Scopes.SINGLETON); + + binder.bind(FileFormatDataSourceStats.class).in(Scopes.SINGLETON); + newExporter(binder).export(FileFormatDataSourceStats.class).withGeneratedName(); + + binder.install(new HudiExecutorModule()); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPageSourceProvider.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPageSourceProvider.java new file mode 100644 index 0000000000000..532b0568fdd23 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPageSourceProvider.java @@ -0,0 +1,371 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableList; +import com.google.inject.Inject; +import io.trino.filesystem.Location; +import io.trino.filesystem.TrinoFileSystem; +import io.trino.filesystem.TrinoFileSystemFactory; +import io.trino.filesystem.TrinoInputFile; +import io.trino.memory.context.AggregatedMemoryContext; +import io.trino.parquet.ParquetCorruptionException; +import io.trino.parquet.ParquetDataSource; +import io.trino.parquet.ParquetDataSourceId; +import io.trino.parquet.ParquetReaderOptions; +import io.trino.parquet.metadata.FileMetadata; +import io.trino.parquet.metadata.ParquetMetadata; +import io.trino.parquet.predicate.TupleDomainParquetPredicate; +import io.trino.parquet.reader.MetadataReader; +import io.trino.parquet.reader.ParquetReader; +import io.trino.parquet.reader.RowGroupInfo; +import io.trino.plugin.base.metrics.FileFormatDataSourceStats; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hive.HivePartitionKey; +import io.trino.plugin.hive.TransformConnectorPageSource; +import io.trino.plugin.hive.parquet.ParquetReaderConfig; +import io.trino.spi.TrinoException; +import io.trino.spi.block.Block; +import io.trino.spi.connector.ColumnHandle; +import io.trino.spi.connector.ConnectorPageSource; +import io.trino.spi.connector.ConnectorPageSourceProvider; +import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.connector.ConnectorSplit; +import io.trino.spi.connector.ConnectorTableHandle; +import io.trino.spi.connector.ConnectorTransactionHandle; +import io.trino.spi.connector.DynamicFilter; +import io.trino.spi.predicate.TupleDomain; +import io.trino.spi.type.Decimals; +import io.trino.spi.type.TypeSignature; +import org.apache.hudi.common.model.HoodieFileFormat; +import org.apache.parquet.column.ColumnDescriptor; +import org.apache.parquet.io.MessageColumnIO; +import org.apache.parquet.schema.MessageType; +import org.joda.time.DateTimeZone; + +import java.io.IOException; +import java.sql.Timestamp; +import java.time.LocalDate; +import java.time.ZoneOffset; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.OptionalLong; +import java.util.TimeZone; + +import static com.google.common.base.Preconditions.checkArgument; +import static io.airlift.slice.Slices.utf8Slice; +import static io.trino.memory.context.AggregatedMemoryContext.newSimpleAggregatedMemoryContext; +import static io.trino.metastore.Partitions.makePartName; +import static io.trino.parquet.ParquetTypeUtils.getColumnIO; +import static io.trino.parquet.ParquetTypeUtils.getDescriptors; +import static io.trino.parquet.predicate.PredicateUtils.buildPredicate; +import static io.trino.parquet.predicate.PredicateUtils.getFilteredRowGroups; +import static io.trino.plugin.hive.HiveColumnHandle.FILE_MODIFIED_TIME_COLUMN_NAME; +import static io.trino.plugin.hive.HiveColumnHandle.FILE_MODIFIED_TIME_TYPE_SIGNATURE; +import static io.trino.plugin.hive.HiveColumnHandle.FILE_SIZE_COLUMN_NAME; +import static io.trino.plugin.hive.HiveColumnHandle.FILE_SIZE_TYPE_SIGNATURE; +import static io.trino.plugin.hive.HiveColumnHandle.PARTITION_COLUMN_NAME; +import static io.trino.plugin.hive.HiveColumnHandle.PARTITION_TYPE_SIGNATURE; +import static io.trino.plugin.hive.HiveColumnHandle.PATH_COLUMN_NAME; +import static io.trino.plugin.hive.HiveColumnHandle.PATH_TYPE; +import static io.trino.plugin.hive.parquet.ParquetPageSourceFactory.ParquetReaderProvider; +import static io.trino.plugin.hive.parquet.ParquetPageSourceFactory.createDataSource; +import static io.trino.plugin.hive.parquet.ParquetPageSourceFactory.createParquetPageSource; +import static io.trino.plugin.hive.parquet.ParquetPageSourceFactory.getParquetMessageType; +import static io.trino.plugin.hive.parquet.ParquetPageSourceFactory.getParquetTupleDomain; +import static io.trino.plugin.hudi.HudiErrorCode.HUDI_BAD_DATA; +import static io.trino.plugin.hudi.HudiErrorCode.HUDI_CANNOT_OPEN_SPLIT; +import static io.trino.plugin.hudi.HudiErrorCode.HUDI_CURSOR_ERROR; +import static io.trino.plugin.hudi.HudiErrorCode.HUDI_INVALID_PARTITION_VALUE; +import static io.trino.plugin.hudi.HudiErrorCode.HUDI_UNSUPPORTED_FILE_FORMAT; +import static io.trino.plugin.hudi.HudiSessionProperties.getParquetMaxReadBlockRowCount; +import static io.trino.plugin.hudi.HudiSessionProperties.getParquetSmallFileThreshold; +import static io.trino.plugin.hudi.HudiSessionProperties.isParquetVectorizedDecodingEnabled; +import static io.trino.plugin.hudi.HudiSessionProperties.shouldUseParquetColumnNames; +import static io.trino.plugin.hudi.HudiUtil.getHudiFileFormat; +import static io.trino.spi.predicate.Utils.nativeValueToBlock; +import static io.trino.spi.type.DateTimeEncoding.packDateTimeWithZone; +import static io.trino.spi.type.StandardTypes.BIGINT; +import static io.trino.spi.type.StandardTypes.BOOLEAN; +import static io.trino.spi.type.StandardTypes.DATE; +import static io.trino.spi.type.StandardTypes.DECIMAL; +import static io.trino.spi.type.StandardTypes.DOUBLE; +import static io.trino.spi.type.StandardTypes.INTEGER; +import static io.trino.spi.type.StandardTypes.REAL; +import static io.trino.spi.type.StandardTypes.SMALLINT; +import static io.trino.spi.type.StandardTypes.TIMESTAMP; +import static io.trino.spi.type.StandardTypes.TINYINT; +import static io.trino.spi.type.StandardTypes.VARBINARY; +import static io.trino.spi.type.StandardTypes.VARCHAR; +import static io.trino.spi.type.TimeZoneKey.UTC_KEY; +import static java.lang.Double.parseDouble; +import static java.lang.Float.floatToRawIntBits; +import static java.lang.Float.parseFloat; +import static java.lang.Long.parseLong; +import static java.lang.String.format; +import static java.util.Objects.isNull; +import static java.util.Objects.requireNonNull; +import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.toMap; +import static org.apache.hudi.common.model.HoodieFileFormat.PARQUET; + +public class HudiPageSourceProvider + implements ConnectorPageSourceProvider +{ + private final TrinoFileSystemFactory fileSystemFactory; + private final FileFormatDataSourceStats dataSourceStats; + private final ParquetReaderOptions options; + private final DateTimeZone timeZone; + private static final int DOMAIN_COMPACTION_THRESHOLD = 1000; + + @Inject + public HudiPageSourceProvider( + TrinoFileSystemFactory fileSystemFactory, + FileFormatDataSourceStats dataSourceStats, + ParquetReaderConfig parquetReaderConfig) + { + this.fileSystemFactory = requireNonNull(fileSystemFactory, "fileSystemFactory is null"); + this.dataSourceStats = requireNonNull(dataSourceStats, "dataSourceStats is null"); + this.options = requireNonNull(parquetReaderConfig, "parquetReaderConfig is null").toParquetReaderOptions(); + this.timeZone = DateTimeZone.forID(TimeZone.getDefault().getID()); + } + + @Override + public ConnectorPageSource createPageSource( + ConnectorTransactionHandle transaction, + ConnectorSession session, + ConnectorSplit connectorSplit, + ConnectorTableHandle connectorTable, + List columns, + DynamicFilter dynamicFilter) + { + HudiSplit split = (HudiSplit) connectorSplit; + String path = split.location(); + HoodieFileFormat hudiFileFormat = getHudiFileFormat(path); + if (PARQUET != hudiFileFormat) { + throw new TrinoException(HUDI_UNSUPPORTED_FILE_FORMAT, format("File format %s not supported", hudiFileFormat)); + } + + List hiveColumns = columns.stream() + .map(HiveColumnHandle.class::cast) + .collect(toList()); + // just send regular columns to create parquet page source + // for partition columns, separate blocks will be created + List regularColumns = hiveColumns.stream() + .filter(columnHandle -> !columnHandle.isPartitionKey() && !columnHandle.isHidden()) + .collect(toList()); + TrinoFileSystem fileSystem = fileSystemFactory.create(session); + TrinoInputFile inputFile = fileSystem.newInputFile(Location.of(path), split.fileSize()); + ConnectorPageSource pageSource = createPageSource( + session, + regularColumns, + split, + inputFile, + dataSourceStats, + ParquetReaderOptions.builder(options) + .withSmallFileThreshold(getParquetSmallFileThreshold(session)) + .withVectorizedDecodingEnabled(isParquetVectorizedDecodingEnabled(session)) + .withMaxReadBlockRowCount(getParquetMaxReadBlockRowCount(session)) + .build(), + timeZone); + + Map partitionBlocks = convertPartitionValues(hiveColumns, split.partitionKeys()); + + TransformConnectorPageSource.Builder transforms = TransformConnectorPageSource.builder(); + int delegateIndex = 0; + for (HiveColumnHandle column : hiveColumns) { + if (partitionBlocks.containsKey(column.getName())) { + transforms.constantValue(partitionBlocks.get(column.getName())); + } + else if (column.getName().equals(PARTITION_COLUMN_NAME)) { + transforms.constantValue(nativeValueToBlock(PARTITION_TYPE_SIGNATURE, utf8Slice(toPartitionName(split.partitionKeys())))); + } + else if (column.getName().equals(PATH_COLUMN_NAME)) { + transforms.constantValue(nativeValueToBlock(PATH_TYPE, utf8Slice(path))); + } + else if (column.getName().equals(FILE_SIZE_COLUMN_NAME)) { + transforms.constantValue(nativeValueToBlock(FILE_SIZE_TYPE_SIGNATURE, split.fileSize())); + } + else if (column.getName().equals(FILE_MODIFIED_TIME_COLUMN_NAME)) { + long packedTimestamp = packDateTimeWithZone(split.fileModifiedTime(), UTC_KEY); + transforms.constantValue(nativeValueToBlock(FILE_MODIFIED_TIME_TYPE_SIGNATURE, packedTimestamp)); + } + else { + transforms.column(delegateIndex); + delegateIndex++; + } + } + + return transforms.build(pageSource); + } + + private static ConnectorPageSource createPageSource( + ConnectorSession session, + List columns, + HudiSplit hudiSplit, + TrinoInputFile inputFile, + FileFormatDataSourceStats dataSourceStats, + ParquetReaderOptions options, + DateTimeZone timeZone) + { + ParquetDataSource dataSource = null; + boolean useColumnNames = shouldUseParquetColumnNames(session); + String path = hudiSplit.location(); + long start = hudiSplit.start(); + long length = hudiSplit.length(); + try { + AggregatedMemoryContext memoryContext = newSimpleAggregatedMemoryContext(); + dataSource = createDataSource(inputFile, OptionalLong.of(hudiSplit.fileSize()), options, memoryContext, dataSourceStats); + ParquetMetadata parquetMetadata = MetadataReader.readFooter(dataSource, options.getMaxFooterReadSize()); + FileMetadata fileMetaData = parquetMetadata.getFileMetaData(); + MessageType fileSchema = fileMetaData.getSchema(); + + Optional message = getParquetMessageType(columns, useColumnNames, fileSchema); + + MessageType requestedSchema = message.orElse(new MessageType(fileSchema.getName(), ImmutableList.of())); + MessageColumnIO messageColumn = getColumnIO(fileSchema, requestedSchema); + + Map, ColumnDescriptor> descriptorsByPath = getDescriptors(fileSchema, requestedSchema); + TupleDomain parquetTupleDomain = options.isIgnoreStatistics() + ? TupleDomain.all() + : getParquetTupleDomain(descriptorsByPath, hudiSplit.predicate(), fileSchema, useColumnNames); + + TupleDomainParquetPredicate parquetPredicate = buildPredicate(requestedSchema, parquetTupleDomain, descriptorsByPath, timeZone); + + List rowGroups = getFilteredRowGroups( + start, + length, + dataSource, + parquetMetadata, + ImmutableList.of(parquetTupleDomain), + ImmutableList.of(parquetPredicate), + descriptorsByPath, + timeZone, + DOMAIN_COMPACTION_THRESHOLD, + options); + + ParquetDataSourceId dataSourceId = dataSource.getId(); + ParquetDataSource finalDataSource = dataSource; + ParquetReaderProvider parquetReaderProvider = (fields, appendRowNumberColumn) -> new ParquetReader( + Optional.ofNullable(fileMetaData.getCreatedBy()), + fields, + appendRowNumberColumn, + rowGroups, + finalDataSource, + timeZone, + memoryContext, + options, + exception -> handleException(dataSourceId, exception), + Optional.of(parquetPredicate), + Optional.empty()); + return createParquetPageSource(columns, fileSchema, messageColumn, useColumnNames, parquetReaderProvider); + } + catch (IOException | RuntimeException e) { + try { + if (dataSource != null) { + dataSource.close(); + } + } + catch (IOException _) { + } + if (e instanceof TrinoException trinoException) { + throw trinoException; + } + if (e instanceof ParquetCorruptionException) { + throw new TrinoException(HUDI_BAD_DATA, e); + } + String message = "Error opening Hudi split %s (offset=%s, length=%s): %s".formatted(path, start, length, e.getMessage()); + throw new TrinoException(HUDI_CANNOT_OPEN_SPLIT, message, e); + } + } + + private static TrinoException handleException(ParquetDataSourceId dataSourceId, Exception exception) + { + if (exception instanceof TrinoException trinoException) { + return trinoException; + } + if (exception instanceof ParquetCorruptionException) { + return new TrinoException(HUDI_BAD_DATA, exception); + } + return new TrinoException(HUDI_CURSOR_ERROR, format("Failed to read Parquet file: %s", dataSourceId), exception); + } + + private static Map convertPartitionValues( + List allColumns, + List partitionKeys) + { + return allColumns.stream() + .filter(HiveColumnHandle::isPartitionKey) + .collect(toMap( + HiveColumnHandle::getName, + columnHandle -> nativeValueToBlock( + columnHandle.getType(), + partitionToNativeValue( + columnHandle.getName(), + partitionKeys, + columnHandle.getType().getTypeSignature()).orElse(null)))); + } + + private static Optional partitionToNativeValue( + String partitionColumnName, + List partitionKeys, + TypeSignature partitionDataType) + { + HivePartitionKey partitionKey = partitionKeys.stream().filter(key -> key.name().equalsIgnoreCase(partitionColumnName)).findFirst().orElse(null); + if (isNull(partitionKey)) { + return Optional.empty(); + } + + String partitionValue = partitionKey.value(); + String baseType = partitionDataType.getBase(); + try { + return switch (baseType) { + case TINYINT, SMALLINT, INTEGER, BIGINT -> Optional.of(parseLong(partitionValue)); + case REAL -> Optional.of((long) floatToRawIntBits(parseFloat(partitionValue))); + case DOUBLE -> Optional.of(parseDouble(partitionValue)); + case VARCHAR, VARBINARY -> Optional.of(utf8Slice(partitionValue)); + case DATE -> Optional.of(LocalDate.parse(partitionValue, DateTimeFormatter.ISO_LOCAL_DATE).toEpochDay()); + case TIMESTAMP -> Optional.of(Timestamp.valueOf(partitionValue).toLocalDateTime().toEpochSecond(ZoneOffset.UTC) * 1_000); + case BOOLEAN -> { + checkArgument(partitionValue.equalsIgnoreCase("true") || partitionValue.equalsIgnoreCase("false")); + yield Optional.of(Boolean.valueOf(partitionValue)); + } + case DECIMAL -> Optional.of(Decimals.parse(partitionValue).getObject()); + default -> throw new TrinoException( + HUDI_INVALID_PARTITION_VALUE, + format("Unsupported data type '%s' for partition column %s", partitionDataType, partitionColumnName)); + }; + } + catch (IllegalArgumentException | DateTimeParseException e) { + throw new TrinoException( + HUDI_INVALID_PARTITION_VALUE, + format("Can not parse partition value '%s' of type '%s' for partition column '%s'", partitionValue, partitionDataType, partitionColumnName), + e); + } + } + + private static String toPartitionName(List partitions) + { + ImmutableList.Builder partitionNames = ImmutableList.builderWithExpectedSize(partitions.size()); + ImmutableList.Builder partitionValues = ImmutableList.builderWithExpectedSize(partitions.size()); + for (HivePartitionKey partition : partitions) { + partitionNames.add(partition.name()); + partitionValues.add(partition.value()); + } + return makePartName(partitionNames.build(), partitionValues.build()); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPlugin.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPlugin.java new file mode 100644 index 0000000000000..1744105faddb4 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPlugin.java @@ -0,0 +1,28 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableList; +import io.trino.spi.Plugin; +import io.trino.spi.connector.ConnectorFactory; + +public class HudiPlugin + implements Plugin +{ + @Override + public Iterable getConnectorFactories() + { + return ImmutableList.of(new HudiConnectorFactory()); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPredicates.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPredicates.java new file mode 100644 index 0000000000000..16859e8e6dd3e --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPredicates.java @@ -0,0 +1,68 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.spi.connector.ColumnHandle; +import io.trino.spi.predicate.Domain; +import io.trino.spi.predicate.TupleDomain; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +public class HudiPredicates +{ + private final TupleDomain partitionColumnPredicates; + private final TupleDomain regularColumnPredicates; + + public static HudiPredicates from(TupleDomain predicate) + { + Map partitionColumnPredicates = new HashMap<>(); + Map regularColumnPredicates = new HashMap<>(); + + Optional> domains = predicate.getDomains(); + domains.ifPresent(columnHandleDomainMap -> columnHandleDomainMap.forEach((key, value) -> { + HiveColumnHandle columnHandle = (HiveColumnHandle) key; + if (columnHandle.isPartitionKey()) { + partitionColumnPredicates.put(columnHandle, value); + } + else { + regularColumnPredicates.put(columnHandle, value); + } + })); + + return new HudiPredicates( + TupleDomain.withColumnDomains(partitionColumnPredicates), + TupleDomain.withColumnDomains(regularColumnPredicates)); + } + + private HudiPredicates( + TupleDomain partitionColumnPredicates, + TupleDomain regularColumnPredicates) + { + this.partitionColumnPredicates = partitionColumnPredicates; + this.regularColumnPredicates = regularColumnPredicates; + } + + public TupleDomain getPartitionColumnPredicates() + { + return partitionColumnPredicates; + } + + public TupleDomain getRegularColumnPredicates() + { + return regularColumnPredicates; + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSessionProperties.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSessionProperties.java new file mode 100644 index 0000000000000..47717f59f4b5f --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSessionProperties.java @@ -0,0 +1,221 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableList; +import com.google.inject.Inject; +import io.airlift.units.DataSize; +import io.trino.plugin.base.session.SessionPropertiesProvider; +import io.trino.plugin.hive.parquet.ParquetReaderConfig; +import io.trino.spi.TrinoException; +import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.session.PropertyMetadata; +import io.trino.spi.type.ArrayType; + +import java.util.Collection; +import java.util.List; + +import static com.google.common.collect.ImmutableList.toImmutableList; +import static io.trino.plugin.base.session.PropertyMetadataUtil.dataSizeProperty; +import static io.trino.plugin.base.session.PropertyMetadataUtil.validateMaxDataSize; +import static io.trino.plugin.hive.parquet.ParquetReaderConfig.PARQUET_READER_MAX_SMALL_FILE_THRESHOLD; +import static io.trino.spi.StandardErrorCode.INVALID_SESSION_PROPERTY; +import static io.trino.spi.session.PropertyMetadata.booleanProperty; +import static io.trino.spi.session.PropertyMetadata.doubleProperty; +import static io.trino.spi.session.PropertyMetadata.integerProperty; +import static io.trino.spi.type.VarcharType.VARCHAR; +import static java.lang.String.format; +import static java.util.Locale.ENGLISH; + +public class HudiSessionProperties + implements SessionPropertiesProvider +{ + private static final String COLUMNS_TO_HIDE = "columns_to_hide"; + private static final String USE_PARQUET_COLUMN_NAMES = "use_parquet_column_names"; + private static final String PARQUET_MAX_READ_BLOCK_ROW_COUNT = "parquet_max_read_block_row_count"; + private static final String PARQUET_SMALL_FILE_THRESHOLD = "parquet_small_file_threshold"; + private static final String PARQUET_VECTORIZED_DECODING_ENABLED = "parquet_vectorized_decoding_enabled"; + private static final String SIZE_BASED_SPLIT_WEIGHTS_ENABLED = "size_based_split_weights_enabled"; + private static final String STANDARD_SPLIT_WEIGHT_SIZE = "standard_split_weight_size"; + private static final String MINIMUM_ASSIGNED_SPLIT_WEIGHT = "minimum_assigned_split_weight"; + private static final String MAX_SPLITS_PER_SECOND = "max_splits_per_second"; + private static final String MAX_OUTSTANDING_SPLITS = "max_outstanding_splits"; + private static final String SPLIT_GENERATOR_PARALLELISM = "split_generator_parallelism"; + private static final String QUERY_PARTITION_FILTER_REQUIRED = "query_partition_filter_required"; + private static final String IGNORE_ABSENT_PARTITIONS = "ignore_absent_partitions"; + + private final List> sessionProperties; + + @Inject + public HudiSessionProperties(HudiConfig hudiConfig, ParquetReaderConfig parquetReaderConfig) + { + sessionProperties = ImmutableList.of( + new PropertyMetadata<>( + COLUMNS_TO_HIDE, + "List of column names that will be hidden", + new ArrayType(VARCHAR), + List.class, + hudiConfig.getColumnsToHide(), + false, + value -> ((Collection) value).stream() + .map(name -> ((String) name).toLowerCase(ENGLISH)) + .collect(toImmutableList()), + value -> value), + booleanProperty( + USE_PARQUET_COLUMN_NAMES, + "Access parquet columns using names from the file. If disabled, then columns are accessed using index.", + hudiConfig.getUseParquetColumnNames(), + false), + integerProperty( + PARQUET_MAX_READ_BLOCK_ROW_COUNT, + "Parquet: Maximum number of rows read in a batch", + parquetReaderConfig.getMaxReadBlockRowCount(), + value -> { + if (value < 128 || value > 65536) { + throw new TrinoException( + INVALID_SESSION_PROPERTY, + format("%s must be between 128 and 65536: %s", PARQUET_MAX_READ_BLOCK_ROW_COUNT, value)); + } + }, + false), + dataSizeProperty( + PARQUET_SMALL_FILE_THRESHOLD, + "Parquet: Size below which a parquet file will be read entirely", + parquetReaderConfig.getSmallFileThreshold(), + value -> validateMaxDataSize(PARQUET_SMALL_FILE_THRESHOLD, value, DataSize.valueOf(PARQUET_READER_MAX_SMALL_FILE_THRESHOLD)), + false), + booleanProperty( + PARQUET_VECTORIZED_DECODING_ENABLED, + "Enable using Java Vector API for faster decoding of parquet files", + parquetReaderConfig.isVectorizedDecodingEnabled(), + false), + booleanProperty( + SIZE_BASED_SPLIT_WEIGHTS_ENABLED, + format("If enabled, size-based splitting ensures that each batch of splits has enough data to process as defined by %s", STANDARD_SPLIT_WEIGHT_SIZE), + hudiConfig.isSizeBasedSplitWeightsEnabled(), + false), + dataSizeProperty( + STANDARD_SPLIT_WEIGHT_SIZE, + "The split size corresponding to the standard weight (1.0) when size-based split weights are enabled", + hudiConfig.getStandardSplitWeightSize(), + false), + doubleProperty( + MINIMUM_ASSIGNED_SPLIT_WEIGHT, + "Minimum assigned split weight when size-based split weights are enabled", + hudiConfig.getMinimumAssignedSplitWeight(), + value -> { + if (!Double.isFinite(value) || value <= 0 || value > 1) { + throw new TrinoException(INVALID_SESSION_PROPERTY, format("%s must be > 0 and <= 1.0: %s", MINIMUM_ASSIGNED_SPLIT_WEIGHT, value)); + } + }, + false), + integerProperty( + MAX_SPLITS_PER_SECOND, + "Rate at which splits are enqueued for processing. The queue will throttle if this rate limit is breached.", + hudiConfig.getMaxSplitsPerSecond(), + false), + integerProperty( + MAX_OUTSTANDING_SPLITS, + "Maximum outstanding splits in a batch enqueued for processing", + hudiConfig.getMaxOutstandingSplits(), + false), + integerProperty( + SPLIT_GENERATOR_PARALLELISM, + "Number of threads to generate splits from partitions", + hudiConfig.getSplitGeneratorParallelism(), + false), + booleanProperty( + QUERY_PARTITION_FILTER_REQUIRED, + "Require a filter on at least one partition column", + hudiConfig.isQueryPartitionFilterRequired(), + false), + booleanProperty( + IGNORE_ABSENT_PARTITIONS, + "Ignore absent partitions", + hudiConfig.isIgnoreAbsentPartitions(), + false)); + } + + @Override + public List> getSessionProperties() + { + return sessionProperties; + } + + @SuppressWarnings("unchecked") + public static List getColumnsToHide(ConnectorSession session) + { + return (List) session.getProperty(COLUMNS_TO_HIDE, List.class); + } + + public static boolean shouldUseParquetColumnNames(ConnectorSession session) + { + return session.getProperty(USE_PARQUET_COLUMN_NAMES, Boolean.class); + } + + public static int getParquetMaxReadBlockRowCount(ConnectorSession session) + { + return session.getProperty(PARQUET_MAX_READ_BLOCK_ROW_COUNT, Integer.class); + } + + public static DataSize getParquetSmallFileThreshold(ConnectorSession session) + { + return session.getProperty(PARQUET_SMALL_FILE_THRESHOLD, DataSize.class); + } + + public static boolean isParquetVectorizedDecodingEnabled(ConnectorSession session) + { + return session.getProperty(PARQUET_VECTORIZED_DECODING_ENABLED, Boolean.class); + } + + public static boolean isSizeBasedSplitWeightsEnabled(ConnectorSession session) + { + return session.getProperty(SIZE_BASED_SPLIT_WEIGHTS_ENABLED, Boolean.class); + } + + public static DataSize getStandardSplitWeightSize(ConnectorSession session) + { + return session.getProperty(STANDARD_SPLIT_WEIGHT_SIZE, DataSize.class); + } + + public static double getMinimumAssignedSplitWeight(ConnectorSession session) + { + return session.getProperty(MINIMUM_ASSIGNED_SPLIT_WEIGHT, Double.class); + } + + public static int getMaxSplitsPerSecond(ConnectorSession session) + { + return session.getProperty(MAX_SPLITS_PER_SECOND, Integer.class); + } + + public static int getMaxOutstandingSplits(ConnectorSession session) + { + return session.getProperty(MAX_OUTSTANDING_SPLITS, Integer.class); + } + + public static int getSplitGeneratorParallelism(ConnectorSession session) + { + return session.getProperty(SPLIT_GENERATOR_PARALLELISM, Integer.class); + } + + public static boolean isQueryPartitionFilterRequired(ConnectorSession session) + { + return session.getProperty(QUERY_PARTITION_FILTER_REQUIRED, Boolean.class); + } + + public static boolean isIgnoreAbsentPartitions(ConnectorSession session) + { + return session.getProperty(IGNORE_ABSENT_PARTITIONS, Boolean.class); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplit.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplit.java new file mode 100644 index 0000000000000..5899ef8936b8c --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplit.java @@ -0,0 +1,78 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableList; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hive.HivePartitionKey; +import io.trino.spi.SplitWeight; +import io.trino.spi.connector.ConnectorSplit; +import io.trino.spi.predicate.TupleDomain; + +import java.util.List; + +import static com.google.common.base.MoreObjects.toStringHelper; +import static com.google.common.base.Preconditions.checkArgument; +import static io.airlift.slice.SizeOf.estimatedSizeOf; +import static io.airlift.slice.SizeOf.instanceSize; +import static java.lang.Math.toIntExact; +import static java.util.Objects.requireNonNull; + +public record HudiSplit( + String location, + long start, + long length, + long fileSize, + long fileModifiedTime, + TupleDomain predicate, + List partitionKeys, + SplitWeight splitWeight) + implements ConnectorSplit +{ + private static final int INSTANCE_SIZE = toIntExact(instanceSize(HudiSplit.class)); + + public HudiSplit + { + checkArgument(start >= 0, "start must be positive"); + checkArgument(length >= 0, "length must be positive"); + checkArgument(start + length <= fileSize, "fileSize must be at least start + length"); + + requireNonNull(location, "location is null"); + requireNonNull(predicate, "predicate is null"); + partitionKeys = ImmutableList.copyOf(partitionKeys); + requireNonNull(splitWeight, "splitWeight is null"); + } + + @Override + public long getRetainedSizeInBytes() + { + return INSTANCE_SIZE + + estimatedSizeOf(location) + + splitWeight.getRetainedSizeInBytes() + + predicate.getRetainedSizeInBytes(HiveColumnHandle::getRetainedSizeInBytes) + + estimatedSizeOf(partitionKeys, HivePartitionKey::estimatedSizeInBytes); + } + + @Override + public String toString() + { + return toStringHelper(this) + .addValue(location) + .addValue(start) + .addValue(length) + .addValue(fileSize) + .addValue(fileModifiedTime) + .toString(); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplitManager.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplitManager.java new file mode 100644 index 0000000000000..ae2902ae58e43 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplitManager.java @@ -0,0 +1,119 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableList; +import com.google.inject.Inject; +import io.trino.filesystem.TrinoFileSystemFactory; +import io.trino.metastore.HiveMetastore; +import io.trino.metastore.Table; +import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorSplitSource; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.connector.ConnectorSplitManager; +import io.trino.spi.connector.ConnectorSplitSource; +import io.trino.spi.connector.ConnectorTableHandle; +import io.trino.spi.connector.ConnectorTransactionHandle; +import io.trino.spi.connector.Constraint; +import io.trino.spi.connector.DynamicFilter; +import io.trino.spi.connector.TableNotFoundException; +import io.trino.spi.type.TypeManager; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ScheduledExecutorService; +import java.util.stream.Collectors; + +import static com.google.common.collect.ImmutableMap.toImmutableMap; +import static io.trino.plugin.hive.metastore.MetastoreUtil.computePartitionKeyFilter; +import static io.trino.plugin.hive.util.HiveUtil.getPartitionKeyColumnHandles; +import static io.trino.plugin.hudi.HudiSessionProperties.getMaxOutstandingSplits; +import static io.trino.plugin.hudi.HudiSessionProperties.getMaxSplitsPerSecond; +import static io.trino.plugin.hudi.partition.HiveHudiPartitionInfo.NON_PARTITION; +import static io.trino.spi.connector.SchemaTableName.schemaTableName; +import static java.util.Objects.requireNonNull; +import static java.util.function.Function.identity; + +public class HudiSplitManager + implements ConnectorSplitManager +{ + private final TypeManager typeManager; + private final HudiTransactionManager transactionManager; + private final TrinoFileSystemFactory fileSystemFactory; + private final ExecutorService executor; + private final ScheduledExecutorService splitLoaderExecutorService; + + @Inject + public HudiSplitManager( + TypeManager typeManager, + HudiTransactionManager transactionManager, + @ForHudiSplitManager ExecutorService executor, + TrinoFileSystemFactory fileSystemFactory, + @ForHudiSplitSource ScheduledExecutorService splitLoaderExecutorService) + { + this.typeManager = requireNonNull(typeManager, "typeManager is null"); + this.transactionManager = requireNonNull(transactionManager, "transactionManager is null"); + this.executor = requireNonNull(executor, "executor is null"); + this.fileSystemFactory = requireNonNull(fileSystemFactory, "fileSystemFactory is null"); + this.splitLoaderExecutorService = requireNonNull(splitLoaderExecutorService, "splitLoaderExecutorService is null"); + } + + @Override + public ConnectorSplitSource getSplits( + ConnectorTransactionHandle transaction, + ConnectorSession session, + ConnectorTableHandle tableHandle, + DynamicFilter dynamicFilter, + Constraint constraint) + { + HudiTableHandle hudiTableHandle = (HudiTableHandle) tableHandle; + HiveMetastore metastore = transactionManager.get(transaction, session.getIdentity()).getMetastore(); + Table table = metastore.getTable(hudiTableHandle.getSchemaName(), hudiTableHandle.getTableName()) + .orElseThrow(() -> new TableNotFoundException(schemaTableName(hudiTableHandle.getSchemaName(), hudiTableHandle.getTableName()))); + + List partitionColumns = getPartitionKeyColumnHandles(table, typeManager); + Map partitionColumnHandles = partitionColumns.stream() + .collect(toImmutableMap(HiveColumnHandle::getName, identity())); + List partitions = getPartitions(metastore, hudiTableHandle, partitionColumns); + + HudiSplitSource splitSource = new HudiSplitSource( + session, + metastore, + table, + hudiTableHandle, + fileSystemFactory, + partitionColumnHandles, + executor, + splitLoaderExecutorService, + getMaxSplitsPerSecond(session), + getMaxOutstandingSplits(session), + partitions); + return new ClassLoaderSafeConnectorSplitSource(splitSource, HudiSplitManager.class.getClassLoader()); + } + + private static List getPartitions(HiveMetastore metastore, HudiTableHandle table, List partitionColumns) + { + if (partitionColumns.isEmpty()) { + return ImmutableList.of(NON_PARTITION); + } + + return metastore.getPartitionNamesByFilter( + table.getSchemaName(), + table.getTableName(), + partitionColumns.stream().map(HiveColumnHandle::getName).collect(Collectors.toList()), + computePartitionKeyFilter(partitionColumns, table.getPartitionPredicates())) + .orElseThrow(() -> new TableNotFoundException(table.getSchemaTableName())); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplitSource.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplitSource.java new file mode 100644 index 0000000000000..ee2efa976db8a --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplitSource.java @@ -0,0 +1,142 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.util.concurrent.Futures; +import io.airlift.concurrent.BoundedExecutor; +import io.airlift.units.DataSize; +import io.trino.filesystem.TrinoFileSystemFactory; +import io.trino.metastore.HiveMetastore; +import io.trino.metastore.Table; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hive.util.AsyncQueue; +import io.trino.plugin.hive.util.ThrottledAsyncQueue; +import io.trino.plugin.hudi.query.HudiDirectoryLister; +import io.trino.plugin.hudi.query.HudiReadOptimizedDirectoryLister; +import io.trino.plugin.hudi.split.HudiBackgroundSplitLoader; +import io.trino.plugin.hudi.split.HudiSplitWeightProvider; +import io.trino.plugin.hudi.split.SizeBasedSplitWeightProvider; +import io.trino.spi.TrinoException; +import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.connector.ConnectorSplit; +import io.trino.spi.connector.ConnectorSplitSource; +import org.apache.hudi.common.table.HoodieTableMetaClient; + +import java.util.List; +import java.util.Map; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicReference; + +import static com.google.common.util.concurrent.MoreExecutors.directExecutor; +import static io.airlift.concurrent.MoreFutures.toCompletableFuture; +import static io.trino.plugin.hudi.HudiErrorCode.HUDI_CANNOT_OPEN_SPLIT; +import static io.trino.plugin.hudi.HudiSessionProperties.getMinimumAssignedSplitWeight; +import static io.trino.plugin.hudi.HudiSessionProperties.getSplitGeneratorParallelism; +import static io.trino.plugin.hudi.HudiSessionProperties.getStandardSplitWeightSize; +import static io.trino.plugin.hudi.HudiSessionProperties.isIgnoreAbsentPartitions; +import static io.trino.plugin.hudi.HudiSessionProperties.isSizeBasedSplitWeightsEnabled; +import static io.trino.plugin.hudi.HudiUtil.buildTableMetaClient; +import static java.util.stream.Collectors.toList; + +public class HudiSplitSource + implements ConnectorSplitSource +{ + private final AsyncQueue queue; + private final ScheduledFuture splitLoaderFuture; + private final AtomicReference trinoException = new AtomicReference<>(); + + public HudiSplitSource( + ConnectorSession session, + HiveMetastore metastore, + Table table, + HudiTableHandle tableHandle, + TrinoFileSystemFactory fileSystemFactory, + Map partitionColumnHandleMap, + ExecutorService executor, + ScheduledExecutorService splitLoaderExecutorService, + int maxSplitsPerSecond, + int maxOutstandingSplits, + List partitions) + { + HoodieTableMetaClient metaClient = buildTableMetaClient(fileSystemFactory.create(session), tableHandle.getBasePath()); + List partitionColumnHandles = table.getPartitionColumns().stream() + .map(column -> partitionColumnHandleMap.get(column.getName())).collect(toList()); + + HudiDirectoryLister hudiDirectoryLister = new HudiReadOptimizedDirectoryLister( + tableHandle, + metaClient, + metastore, + table, + partitionColumnHandles, + partitions, + !tableHandle.getPartitionColumns().isEmpty() && isIgnoreAbsentPartitions(session)); + + this.queue = new ThrottledAsyncQueue<>(maxSplitsPerSecond, maxOutstandingSplits, executor); + HudiBackgroundSplitLoader splitLoader = new HudiBackgroundSplitLoader( + session, + tableHandle, + hudiDirectoryLister, + queue, + new BoundedExecutor(executor, getSplitGeneratorParallelism(session)), + createSplitWeightProvider(session), + partitions, + throwable -> { + trinoException.compareAndSet(null, new TrinoException(HUDI_CANNOT_OPEN_SPLIT, + "Failed to generate splits for " + table.getSchemaTableName(), throwable)); + queue.finish(); + }); + this.splitLoaderFuture = splitLoaderExecutorService.schedule(splitLoader, 0, TimeUnit.MILLISECONDS); + } + + @Override + public CompletableFuture getNextBatch(int maxSize) + { + boolean noMoreSplits = isFinished(); + Throwable throwable = trinoException.get(); + if (throwable != null) { + return CompletableFuture.failedFuture(throwable); + } + + return toCompletableFuture(Futures.transform( + queue.getBatchAsync(maxSize), + splits -> new ConnectorSplitBatch(splits, noMoreSplits), + directExecutor())); + } + + @Override + public void close() + { + queue.finish(); + } + + @Override + public boolean isFinished() + { + return splitLoaderFuture.isDone() && queue.isFinished(); + } + + private static HudiSplitWeightProvider createSplitWeightProvider(ConnectorSession session) + { + if (isSizeBasedSplitWeightsEnabled(session)) { + DataSize standardSplitWeightSize = getStandardSplitWeightSize(session); + double minimumAssignedSplitWeight = getMinimumAssignedSplitWeight(session); + return new SizeBasedSplitWeightProvider(minimumAssignedSplitWeight, standardSplitWeightSize); + } + return HudiSplitWeightProvider.uniformStandardWeightProvider(); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableHandle.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableHandle.java new file mode 100644 index 0000000000000..f423ff1c7c48c --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableHandle.java @@ -0,0 +1,153 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.common.collect.ImmutableSet; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.spi.connector.ConnectorTableHandle; +import io.trino.spi.connector.SchemaTableName; +import io.trino.spi.predicate.TupleDomain; +import org.apache.hudi.common.model.HoodieTableType; + +import java.util.List; +import java.util.Set; + +import static io.trino.spi.connector.SchemaTableName.schemaTableName; +import static java.util.Objects.requireNonNull; + +public class HudiTableHandle + implements ConnectorTableHandle +{ + private final String schemaName; + private final String tableName; + private final String basePath; + private final HoodieTableType tableType; + private final List partitionColumns; + // Used only for validation when config property hudi.query-partition-filter-required is enabled + private final Set constraintColumns; + private final TupleDomain partitionPredicates; + private final TupleDomain regularPredicates; + + @JsonCreator + public HudiTableHandle( + @JsonProperty("schemaName") String schemaName, + @JsonProperty("tableName") String tableName, + @JsonProperty("basePath") String basePath, + @JsonProperty("tableType") HoodieTableType tableType, + @JsonProperty("partitionColumns") List partitionColumns, + @JsonProperty("partitionPredicates") TupleDomain partitionPredicates, + @JsonProperty("regularPredicates") TupleDomain regularPredicates) + { + this(schemaName, tableName, basePath, tableType, partitionColumns, ImmutableSet.of(), partitionPredicates, regularPredicates); + } + + public HudiTableHandle( + String schemaName, + String tableName, + String basePath, + HoodieTableType tableType, + List partitionColumns, + Set constraintColumns, + TupleDomain partitionPredicates, + TupleDomain regularPredicates) + { + this.schemaName = requireNonNull(schemaName, "schemaName is null"); + this.tableName = requireNonNull(tableName, "tableName is null"); + this.basePath = requireNonNull(basePath, "basePath is null"); + this.tableType = requireNonNull(tableType, "tableType is null"); + this.partitionColumns = requireNonNull(partitionColumns, "partitionColumns is null"); + this.constraintColumns = requireNonNull(constraintColumns, "constraintColumns is null"); + this.partitionPredicates = requireNonNull(partitionPredicates, "partitionPredicates is null"); + this.regularPredicates = requireNonNull(regularPredicates, "regularPredicates is null"); + } + + @JsonProperty + public String getSchemaName() + { + return schemaName; + } + + @JsonProperty + public String getTableName() + { + return tableName; + } + + @JsonProperty + public String getBasePath() + { + return basePath; + } + + @JsonProperty + public HoodieTableType getTableType() + { + return tableType; + } + + @JsonProperty + public TupleDomain getPartitionPredicates() + { + return partitionPredicates; + } + + @JsonProperty + public List getPartitionColumns() + { + return partitionColumns; + } + + // do not serialize constraint columns as they are not needed on workers + @JsonIgnore + public Set getConstraintColumns() + { + return constraintColumns; + } + + @JsonProperty + public TupleDomain getRegularPredicates() + { + return regularPredicates; + } + + public SchemaTableName getSchemaTableName() + { + return schemaTableName(schemaName, tableName); + } + + HudiTableHandle applyPredicates( + Set constraintColumns, + TupleDomain partitionTupleDomain, + TupleDomain regularTupleDomain) + { + return new HudiTableHandle( + schemaName, + tableName, + basePath, + tableType, + partitionColumns, + constraintColumns, + partitionPredicates.intersect(partitionTupleDomain), + regularPredicates.intersect(regularTupleDomain)); + } + + @Override + public String toString() + { + return getSchemaTableName().toString(); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableInfo.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableInfo.java new file mode 100644 index 0000000000000..1a7d6984e16f8 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableInfo.java @@ -0,0 +1,28 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import io.trino.spi.connector.SchemaTableName; + +import static java.util.Objects.requireNonNull; + +public record HudiTableInfo(SchemaTableName table, String tableType, String basePath) +{ + public HudiTableInfo + { + requireNonNull(table, "table is null"); + requireNonNull(tableType, "tableType is null"); + requireNonNull(basePath, "basePath is null"); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableName.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableName.java new file mode 100644 index 0000000000000..a16f35e85cebc --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableName.java @@ -0,0 +1,65 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import static com.google.common.base.Verify.verify; +import static io.trino.plugin.hudi.TableType.DATA; +import static java.util.Locale.ENGLISH; +import static java.util.Objects.requireNonNull; + +public record HudiTableName(String tableName, TableType tableType) +{ + private static final Pattern TABLE_PATTERN = Pattern.compile( + "(?
[^$@]+)(?:\\$(?(?i:timeline)))?"); + + public HudiTableName(String tableName, TableType tableType) + { + this.tableName = requireNonNull(tableName, "tableName is null"); + this.tableType = requireNonNull(tableType, "tableType is null"); + } + + public String tableNameWithType() + { + return tableName + "$" + tableType.name().toLowerCase(ENGLISH); + } + + @Override + public String toString() + { + return tableNameWithType(); + } + + public static Optional from(String name) + { + Matcher match = TABLE_PATTERN.matcher(name); + if (!match.matches()) { + return Optional.empty(); + } + + String table = match.group("table"); + String typeString = match.group("type"); + + TableType type = DATA; + if (typeString != null) { + type = TableType.valueOf(typeString.toUpperCase(ENGLISH)); + verify(type != DATA, "parsedType is unexpectedly DATA"); + } + + return Optional.of(new HudiTableName(table, type)); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableProperties.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableProperties.java new file mode 100644 index 0000000000000..842d1c3a85d44 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableProperties.java @@ -0,0 +1,63 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableList; +import com.google.inject.Inject; +import io.trino.spi.session.PropertyMetadata; +import io.trino.spi.type.ArrayType; + +import java.util.Collection; +import java.util.List; + +import static com.google.common.collect.ImmutableList.toImmutableList; +import static io.trino.spi.session.PropertyMetadata.stringProperty; +import static io.trino.spi.type.VarcharType.VARCHAR; +import static java.util.Locale.ENGLISH; + +public class HudiTableProperties +{ + public static final String LOCATION_PROPERTY = "location"; + public static final String PARTITIONED_BY_PROPERTY = "partitioned_by"; + + private final List> tableProperties; + + @Inject + public HudiTableProperties() + { + tableProperties = ImmutableList.>builder() + .add(stringProperty( + LOCATION_PROPERTY, + "File system location URI for the table", + null, + false)) + .add(new PropertyMetadata<>( + PARTITIONED_BY_PROPERTY, + "Partition columns", + new ArrayType(VARCHAR), + List.class, + ImmutableList.of(), + false, + value -> ((Collection) value).stream() + .map(name -> name.toLowerCase(ENGLISH)) + .collect(toImmutableList()), + value -> value)) + .build(); + } + + public List> getTableProperties() + { + return tableProperties; + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTransactionManager.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTransactionManager.java new file mode 100644 index 0000000000000..994a4d929359e --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTransactionManager.java @@ -0,0 +1,80 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.errorprone.annotations.concurrent.GuardedBy; +import com.google.inject.Inject; +import io.trino.spi.classloader.ThreadContextClassLoader; +import io.trino.spi.connector.ConnectorTransactionHandle; +import io.trino.spi.security.ConnectorIdentity; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkState; +import static java.util.Objects.requireNonNull; + +public class HudiTransactionManager +{ + private final Map transactions = new ConcurrentHashMap<>(); + private final HudiMetadataFactory metadataFactory; + + @Inject + public HudiTransactionManager(HudiMetadataFactory metadataFactory) + { + this.metadataFactory = requireNonNull(metadataFactory, "metadataFactory is null"); + } + + public HudiMetadata get(ConnectorTransactionHandle transaction, ConnectorIdentity identity) + { + HudiMetadata metadata = transactions.get(transaction).get(identity); + checkArgument(metadata != null, "no such transaction: %s", transaction); + return metadata; + } + + public void commit(ConnectorTransactionHandle transaction) + { + MemoizedMetadata metadata = transactions.remove(transaction); + checkArgument(metadata != null, "no such transaction: %s", transaction); + } + + public void rollback(ConnectorTransactionHandle transaction) + { + MemoizedMetadata transactionalMetadata = transactions.remove(transaction); + checkArgument(transactionalMetadata != null, "no such transaction: %s", transaction); + } + + public void put(ConnectorTransactionHandle transaction) + { + MemoizedMetadata existing = transactions.putIfAbsent(transaction, new MemoizedMetadata()); + checkState(existing == null, "transaction already exists: %s", existing); + } + + private class MemoizedMetadata + { + @GuardedBy("this") + private HudiMetadata metadata; + + public synchronized HudiMetadata get(ConnectorIdentity identity) + { + if (metadata == null) { + try (ThreadContextClassLoader _ = new ThreadContextClassLoader(getClass().getClassLoader())) { + metadata = metadataFactory.create(identity); + } + } + return metadata; + } + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiUtil.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiUtil.java new file mode 100644 index 0000000000000..e92742aaaeb88 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiUtil.java @@ -0,0 +1,143 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import io.trino.filesystem.FileIterator; +import io.trino.filesystem.Location; +import io.trino.filesystem.TrinoFileSystem; +import io.trino.metastore.Column; +import io.trino.metastore.HivePartition; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hive.HivePartitionKey; +import io.trino.plugin.hive.HivePartitionManager; +import io.trino.plugin.hudi.storage.TrinoHudiStorage; +import io.trino.plugin.hudi.storage.TrinoStorageConfiguration; +import io.trino.spi.TrinoException; +import io.trino.spi.connector.SchemaTableName; +import io.trino.spi.predicate.Domain; +import io.trino.spi.predicate.NullableValue; +import io.trino.spi.predicate.TupleDomain; +import org.apache.hudi.common.model.HoodieFileFormat; +import org.apache.hudi.common.table.HoodieTableMetaClient; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +import static io.trino.plugin.hive.HiveErrorCode.HIVE_INVALID_METADATA; +import static io.trino.plugin.hive.util.HiveUtil.checkCondition; +import static io.trino.plugin.hudi.HudiErrorCode.HUDI_FILESYSTEM_ERROR; +import static io.trino.plugin.hudi.HudiErrorCode.HUDI_UNSUPPORTED_FILE_FORMAT; +import static org.apache.hudi.common.model.HoodieFileFormat.HFILE; +import static org.apache.hudi.common.model.HoodieFileFormat.HOODIE_LOG; +import static org.apache.hudi.common.model.HoodieFileFormat.ORC; +import static org.apache.hudi.common.model.HoodieFileFormat.PARQUET; +import static org.apache.hudi.common.table.HoodieTableMetaClient.METAFOLDER_NAME; + +public final class HudiUtil +{ + private HudiUtil() {} + + public static HoodieFileFormat getHudiFileFormat(String path) + { + String extension = getFileExtension(path); + if (extension.equals(PARQUET.getFileExtension())) { + return PARQUET; + } + if (extension.equals(HOODIE_LOG.getFileExtension())) { + return HOODIE_LOG; + } + if (extension.equals(ORC.getFileExtension())) { + return ORC; + } + if (extension.equals(HFILE.getFileExtension())) { + return HFILE; + } + throw new TrinoException(HUDI_UNSUPPORTED_FILE_FORMAT, "Hoodie InputFormat not implemented for base file of type " + extension); + } + + private static String getFileExtension(String fullName) + { + String fileName = Location.of(fullName).fileName(); + int dotIndex = fileName.lastIndexOf('.'); + return dotIndex == -1 ? "" : fileName.substring(dotIndex); + } + + public static boolean hudiMetadataExists(TrinoFileSystem trinoFileSystem, Location baseLocation) + { + try { + Location metaLocation = baseLocation.appendPath(METAFOLDER_NAME); + FileIterator iterator = trinoFileSystem.listFiles(metaLocation); + // If there is at least one file in the .hoodie directory, it's a valid Hudi table + return iterator.hasNext(); + } + catch (IOException e) { + throw new TrinoException(HUDI_FILESYSTEM_ERROR, "Failed to check for Hudi table at location: " + baseLocation, e); + } + } + + public static boolean partitionMatchesPredicates( + SchemaTableName tableName, + String hivePartitionName, + List partitionColumnHandles, + TupleDomain constraintSummary) + { + HivePartition partition = HivePartitionManager.parsePartition( + tableName, hivePartitionName, partitionColumnHandles); + + return partitionMatches(partitionColumnHandles, constraintSummary, partition); + } + + public static boolean partitionMatches(List partitionColumns, TupleDomain constraintSummary, HivePartition partition) + { + if (constraintSummary.isNone()) { + return false; + } + Map domains = constraintSummary.getDomains().orElseGet(ImmutableMap::of); + for (HiveColumnHandle column : partitionColumns) { + NullableValue value = partition.getKeys().get(column); + Domain allowedDomain = domains.get(column); + if (allowedDomain != null && !allowedDomain.includesNullableValue(value.getValue())) { + return false; + } + } + return true; + } + + public static List buildPartitionKeys(List keys, List values) + { + checkCondition(keys.size() == values.size(), HIVE_INVALID_METADATA, + "Expected %s partition key values, but got %s. Keys: %s, Values: %s.", + keys.size(), values.size(), keys, values); + ImmutableList.Builder partitionKeys = ImmutableList.builder(); + for (int i = 0; i < keys.size(); i++) { + String name = keys.get(i).getName(); + String value = values.get(i); + partitionKeys.add(new HivePartitionKey(name, value)); + } + return partitionKeys.build(); + } + + public static HoodieTableMetaClient buildTableMetaClient( + TrinoFileSystem fileSystem, + String basePath) + { + return HoodieTableMetaClient.builder() + .setStorage(new TrinoHudiStorage(fileSystem, new TrinoStorageConfiguration())) + .setBasePath(basePath) + .build(); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/TableType.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/TableType.java new file mode 100644 index 0000000000000..2a8238c77f87b --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/TableType.java @@ -0,0 +1,20 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +public enum TableType +{ + DATA, + TIMELINE +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/TimelineTable.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/TimelineTable.java new file mode 100644 index 0000000000000..19730c4768485 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/TimelineTable.java @@ -0,0 +1,93 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableList; +import io.trino.filesystem.TrinoFileSystem; +import io.trino.metastore.Table; +import io.trino.spi.connector.ColumnMetadata; +import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.connector.ConnectorTableMetadata; +import io.trino.spi.connector.ConnectorTransactionHandle; +import io.trino.spi.connector.InMemoryRecordSet; +import io.trino.spi.connector.RecordCursor; +import io.trino.spi.connector.SchemaTableName; +import io.trino.spi.connector.SystemTable; +import io.trino.spi.predicate.TupleDomain; +import io.trino.spi.type.Type; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.common.table.timeline.HoodieInstant; + +import java.util.ArrayList; +import java.util.List; + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.collect.ImmutableList.toImmutableList; +import static io.trino.plugin.hudi.HudiUtil.buildTableMetaClient; +import static io.trino.spi.type.VarcharType.VARCHAR; +import static java.util.Objects.requireNonNull; + +public class TimelineTable + implements SystemTable +{ + private final ConnectorTableMetadata tableMetadata; + private final List types; + private final TrinoFileSystem fileSystem; + private final String location; + + public TimelineTable(TrinoFileSystem fileSystem, SchemaTableName tableName, Table hudiTable) + { + this.tableMetadata = new ConnectorTableMetadata(requireNonNull(tableName, "tableName is null"), + ImmutableList.builder() + .add(new ColumnMetadata("timestamp", VARCHAR)) + .add(new ColumnMetadata("action", VARCHAR)) + .add(new ColumnMetadata("state", VARCHAR)) + .build()); + this.types = tableMetadata.getColumns().stream().map(ColumnMetadata::getType).collect(toImmutableList()); + this.fileSystem = requireNonNull(fileSystem, "fileSystem is null"); + this.location = requireNonNull(hudiTable.getStorage().getLocation(), "location is null"); + } + + @Override + public Distribution getDistribution() + { + return Distribution.SINGLE_COORDINATOR; + } + + @Override + public ConnectorTableMetadata getTableMetadata() + { + return tableMetadata; + } + + @Override + public RecordCursor cursor(ConnectorTransactionHandle transactionHandle, ConnectorSession session, TupleDomain constraint) + { + HoodieTableMetaClient metaClient = buildTableMetaClient(fileSystem, location); + Iterable> records = () -> metaClient.getCommitsTimeline().getInstants().stream() + .map(this::getRecord) + .iterator(); + return new InMemoryRecordSet(types, records).cursor(); + } + + private List getRecord(HoodieInstant hudiInstant) + { + List columns = new ArrayList<>(); + columns.add(hudiInstant.requestedTime()); + columns.add(hudiInstant.getAction()); + columns.add(hudiInstant.getState().toString()); + checkArgument(columns.size() == types.size(), "Expected %s types in row, but got %s values", types.size(), columns.size()); + return columns; + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoHudiFileReaderFactory.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoHudiFileReaderFactory.java new file mode 100644 index 0000000000000..2fbd51dd3a1f5 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoHudiFileReaderFactory.java @@ -0,0 +1,89 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.io; + +import org.apache.avro.Schema; +import org.apache.avro.generic.IndexedRecord; +import org.apache.hudi.common.config.HoodieConfig; +import org.apache.hudi.common.util.Option; +import org.apache.hudi.io.storage.HoodieAvroBootstrapFileReader; +import org.apache.hudi.io.storage.HoodieFileReader; +import org.apache.hudi.io.storage.HoodieFileReaderFactory; +import org.apache.hudi.io.storage.HoodieNativeAvroHFileReader; +import org.apache.hudi.storage.HoodieStorage; +import org.apache.hudi.storage.StoragePath; + +import java.io.IOException; + +/** + * {@link HoodieFileReaderFactory} implementation for Trino Hudi connector + * that is Hadoop-independent. + * Note that this reader factory is only used for reading log files and bootstrap files now. + */ +public class TrinoHudiFileReaderFactory + extends HoodieFileReaderFactory +{ + public TrinoHudiFileReaderFactory(HoodieStorage storage) + { + super(storage); + } + + @Override + protected HoodieFileReader newParquetFileReader(StoragePath path) + { + throw new UnsupportedOperationException("TrinoHudiFileReaderFactory does not support Parquet file reader"); + } + + @Override + protected HoodieFileReader newHFileFileReader( + HoodieConfig hoodieConfig, + StoragePath path, + Option schemaOption) + throws IOException + { + return new HoodieNativeAvroHFileReader(storage, path, schemaOption); + } + + @Override + protected HoodieFileReader newHFileFileReader( + HoodieConfig hoodieConfig, + StoragePath path, + HoodieStorage storage, + byte[] content, + Option schemaOption) + throws IOException + { + return new HoodieNativeAvroHFileReader(this.storage, content, schemaOption); + } + + @Override + protected HoodieFileReader newOrcFileReader(StoragePath path) + { + throw new UnsupportedOperationException("TrinoHudiFileReaderFactory does not support ORC file reader"); + } + + @Override + public HoodieFileReader newBootstrapFileReader( + HoodieFileReader skeletonFileReader, + HoodieFileReader dataFileReader, + Option partitionFields, + Object[] partitionValues) + { + return new HoodieAvroBootstrapFileReader( + skeletonFileReader, + dataFileReader, + partitionFields, + partitionValues); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoHudiIoFactory.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoHudiIoFactory.java new file mode 100644 index 0000000000000..5f779ead8cf47 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoHudiIoFactory.java @@ -0,0 +1,74 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.io; + +import org.apache.hudi.common.fs.ConsistencyGuard; +import org.apache.hudi.common.model.HoodieFileFormat; +import org.apache.hudi.common.model.HoodieRecord; +import org.apache.hudi.common.util.FileFormatUtils; +import org.apache.hudi.io.storage.HoodieFileReaderFactory; +import org.apache.hudi.io.storage.HoodieFileWriterFactory; +import org.apache.hudi.io.storage.HoodieIOFactory; +import org.apache.hudi.storage.HoodieStorage; +import org.apache.hudi.storage.StoragePath; + +/** + * {@link HoodieIOFactory} implementation for Trino Hudi connector + * that is Hadoop-independent. + */ +public class TrinoHudiIoFactory + extends HoodieIOFactory +{ + public TrinoHudiIoFactory(HoodieStorage storage) + { + super(storage); + } + + @Override + public HoodieFileReaderFactory getReaderFactory(HoodieRecord.HoodieRecordType recordType) + { + return new TrinoHudiFileReaderFactory(storage); + } + + @Override + public HoodieFileWriterFactory getWriterFactory(HoodieRecord.HoodieRecordType recordType) + { + throw new UnsupportedOperationException("TrinoHudiIoFactory does not support writers"); + } + + @Override + public FileFormatUtils getFileFormatUtils(HoodieFileFormat fileFormat) + { + throw new UnsupportedOperationException("TrinoHudiIoFactory does not support FileFormatUtils"); + } + + @Override + public HoodieStorage getStorage(StoragePath storagePath) + { + return storage; + } + + @Override + public HoodieStorage getStorage( + StoragePath path, + boolean enableRetry, + long maxRetryIntervalMs, + int maxRetryNumbers, + long initialRetryIntervalMs, + String retryExceptions, + ConsistencyGuard consistencyGuard) + { + return storage; + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoSeekableDataInputStream.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoSeekableDataInputStream.java new file mode 100644 index 0000000000000..c341b38423e43 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoSeekableDataInputStream.java @@ -0,0 +1,48 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.io; + +import io.trino.filesystem.TrinoInputStream; +import org.apache.hudi.io.SeekableDataInputStream; + +import java.io.IOException; + +/** + * {@link SeekableDataInputStream} implementation based on {@link TrinoInputStream} + */ +public class TrinoSeekableDataInputStream + extends SeekableDataInputStream +{ + private final TrinoInputStream stream; + + public TrinoSeekableDataInputStream(TrinoInputStream stream) + { + super(stream); + this.stream = stream; + } + + @Override + public long getPos() + throws IOException + { + return stream.getPosition(); + } + + @Override + public void seek(long pos) + throws IOException + { + stream.seek(pos); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HiveHudiPartitionInfo.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HiveHudiPartitionInfo.java new file mode 100644 index 0000000000000..521b5c3537af2 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HiveHudiPartitionInfo.java @@ -0,0 +1,141 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.partition; + +import com.google.common.collect.ImmutableList; +import io.trino.filesystem.Location; +import io.trino.metastore.Column; +import io.trino.metastore.HiveMetastore; +import io.trino.metastore.Partition; +import io.trino.metastore.Table; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hive.HivePartitionKey; +import io.trino.spi.TrinoException; +import io.trino.spi.predicate.TupleDomain; + +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import static com.google.common.base.MoreObjects.toStringHelper; +import static io.trino.metastore.Partitions.toPartitionValues; +import static io.trino.plugin.hudi.HudiErrorCode.HUDI_PARTITION_NOT_FOUND; +import static io.trino.plugin.hudi.HudiUtil.buildPartitionKeys; +import static io.trino.plugin.hudi.HudiUtil.partitionMatchesPredicates; +import static java.lang.String.format; + +public class HiveHudiPartitionInfo + implements HudiPartitionInfo +{ + public static final String NON_PARTITION = ""; + + private final Table table; + private final List partitionColumnHandles; + private final TupleDomain constraintSummary; + private final String hivePartitionName; + private final List partitionColumns; + private final HiveMetastore hiveMetastore; + private String relativePartitionPath; + private List hivePartitionKeys; + + public HiveHudiPartitionInfo( + String hivePartitionName, + List partitionColumns, + List partitionColumnHandles, + TupleDomain constraintSummary, + Table table, + HiveMetastore hiveMetastore) + { + this.table = table; + this.partitionColumnHandles = partitionColumnHandles; + this.constraintSummary = constraintSummary; + this.hivePartitionName = hivePartitionName; + this.partitionColumns = partitionColumns; + if (partitionColumns.isEmpty()) { + this.relativePartitionPath = NON_PARTITION; + this.hivePartitionKeys = Collections.emptyList(); + } + this.hiveMetastore = hiveMetastore; + } + + @Override + public String getRelativePartitionPath() + { + if (relativePartitionPath == null) { + loadPartitionInfo(hiveMetastore.getPartition(table, toPartitionValues(hivePartitionName))); + } + return relativePartitionPath; + } + + @Override + public List getHivePartitionKeys() + { + if (hivePartitionKeys == null) { + loadPartitionInfo(hiveMetastore.getPartition(table, toPartitionValues(hivePartitionName))); + } + return hivePartitionKeys; + } + + @Override + public boolean doesMatchPredicates() + { + if (hivePartitionName.equals(NON_PARTITION)) { + hivePartitionKeys = ImmutableList.of(); + return true; + } + return partitionMatchesPredicates(table.getSchemaTableName(), hivePartitionName, partitionColumnHandles, constraintSummary); + } + + @Override + public void loadPartitionInfo(Optional partition) + { + if (partition.isEmpty()) { + throw new TrinoException(HUDI_PARTITION_NOT_FOUND, format("Cannot find partition in Hive Metastore: %s", hivePartitionName)); + } + this.relativePartitionPath = getRelativePartitionPath( + Location.of(table.getStorage().getLocation()), + Location.of(partition.get().getStorage().getLocation())); + this.hivePartitionKeys = buildPartitionKeys(partitionColumns, partition.get().getValues()); + } + + private static String getRelativePartitionPath(Location baseLocation, Location fullPartitionLocation) + { + String basePath = baseLocation.path(); + String fullPartitionPath = fullPartitionLocation.path(); + + if (!fullPartitionPath.startsWith(basePath)) { + throw new IllegalArgumentException("Partition location does not belong to base-location"); + } + + String baseLocationParent = baseLocation.parentDirectory().path(); + String baseLocationName = baseLocation.fileName(); + int partitionStartIndex = fullPartitionPath.indexOf( + baseLocationName, + baseLocationParent == null ? 0 : baseLocationParent.length()); + // Partition-Path could be empty for non-partitioned tables + boolean isNonPartitionedTable = partitionStartIndex + baseLocationName.length() == fullPartitionPath.length(); + return isNonPartitionedTable ? NON_PARTITION : fullPartitionPath.substring(partitionStartIndex + baseLocationName.length() + 1); + } + + @Override + public String toString() + { + return toStringHelper(this) + .add("databaseName", table.getDatabaseName()) + .add("tableName", table.getTableName()) + .add("hivePartitionName", hivePartitionName) + .add("hivePartitionKeys", hivePartitionKeys) + .toString(); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HudiPartitionInfo.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HudiPartitionInfo.java new file mode 100644 index 0000000000000..8e41eba8743bb --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HudiPartitionInfo.java @@ -0,0 +1,31 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.partition; + +import io.trino.metastore.Partition; +import io.trino.plugin.hive.HivePartitionKey; + +import java.util.List; +import java.util.Optional; + +public interface HudiPartitionInfo +{ + String getRelativePartitionPath(); + + List getHivePartitionKeys(); + + boolean doesMatchPredicates(); + + void loadPartitionInfo(Optional partition); +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HudiPartitionInfoLoader.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HudiPartitionInfoLoader.java new file mode 100644 index 0000000000000..bed1c2b33f675 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HudiPartitionInfoLoader.java @@ -0,0 +1,84 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.partition; + +import io.airlift.concurrent.MoreFutures; +import io.trino.plugin.hive.HivePartitionKey; +import io.trino.plugin.hive.util.AsyncQueue; +import io.trino.plugin.hudi.HudiFileStatus; +import io.trino.plugin.hudi.query.HudiDirectoryLister; +import io.trino.plugin.hudi.split.HudiSplitFactory; +import io.trino.spi.connector.ConnectorSplit; + +import java.util.Deque; +import java.util.List; +import java.util.Optional; + +import static io.trino.plugin.hudi.partition.HiveHudiPartitionInfo.NON_PARTITION; + +public class HudiPartitionInfoLoader + implements Runnable +{ + private final HudiDirectoryLister hudiDirectoryLister; + private final HudiSplitFactory hudiSplitFactory; + private final AsyncQueue asyncQueue; + private final Deque partitionQueue; + + private boolean isRunning; + + public HudiPartitionInfoLoader( + HudiDirectoryLister hudiDirectoryLister, + HudiSplitFactory hudiSplitFactory, + AsyncQueue asyncQueue, + Deque partitionQueue) + { + this.hudiDirectoryLister = hudiDirectoryLister; + this.hudiSplitFactory = hudiSplitFactory; + this.asyncQueue = asyncQueue; + this.partitionQueue = partitionQueue; + this.isRunning = true; + } + + @Override + public void run() + { + while (isRunning || !partitionQueue.isEmpty()) { + String partitionName = partitionQueue.poll(); + + if (partitionName != null) { + generateSplitsFromPartition(partitionName); + } + } + } + + private void generateSplitsFromPartition(String partitionName) + { + Optional partitionInfo = hudiDirectoryLister.getPartitionInfo(partitionName); + partitionInfo.ifPresent(hudiPartitionInfo -> { + if (hudiPartitionInfo.doesMatchPredicates() || partitionName.equals(NON_PARTITION)) { + List partitionKeys = hudiPartitionInfo.getHivePartitionKeys(); + List partitionFiles = hudiDirectoryLister.listStatus(hudiPartitionInfo); + partitionFiles.stream() + .flatMap(fileStatus -> hudiSplitFactory.createSplits(partitionKeys, fileStatus).stream()) + .map(asyncQueue::offer) + .forEachOrdered(MoreFutures::getFutureValue); + } + }); + } + + public void stopRunning() + { + this.isRunning = false; + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiDirectoryLister.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiDirectoryLister.java new file mode 100644 index 0000000000000..710dfc44916ce --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiDirectoryLister.java @@ -0,0 +1,29 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.query; + +import io.trino.plugin.hudi.HudiFileStatus; +import io.trino.plugin.hudi.partition.HudiPartitionInfo; + +import java.io.Closeable; +import java.util.List; +import java.util.Optional; + +public interface HudiDirectoryLister + extends Closeable +{ + List listStatus(HudiPartitionInfo partitionInfo); + + Optional getPartitionInfo(String partition); +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java new file mode 100644 index 0000000000000..051b9d89bd211 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java @@ -0,0 +1,117 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.query; + +import io.airlift.log.Logger; +import io.airlift.units.DataSize; +import io.trino.filesystem.Location; +import io.trino.metastore.Column; +import io.trino.metastore.HiveMetastore; +import io.trino.metastore.Table; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hudi.HudiFileStatus; +import io.trino.plugin.hudi.HudiTableHandle; +import io.trino.plugin.hudi.partition.HiveHudiPartitionInfo; +import io.trino.plugin.hudi.partition.HudiPartitionInfo; +import org.apache.hudi.common.engine.HoodieLocalEngineContext; +import org.apache.hudi.common.model.HoodieBaseFile; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.common.table.view.HoodieTableFileSystemView; +import org.apache.hudi.storage.StoragePathInfo; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static com.google.common.collect.ImmutableList.toImmutableList; +import static io.airlift.units.DataSize.Unit.MEGABYTE; +import static java.lang.Math.max; +import static java.lang.Math.min; +import static org.apache.hudi.common.table.view.HoodieTableFileSystemView.fileListingBasedFileSystemView; + +public class HudiReadOptimizedDirectoryLister + implements HudiDirectoryLister +{ + private static final Logger LOG = Logger.get(HudiReadOptimizedDirectoryLister.class); + private static final long MIN_BLOCK_SIZE = DataSize.of(32, MEGABYTE).toBytes(); + + private final HoodieTableFileSystemView fileSystemView; + private final List partitionColumns; + private final Map allPartitionInfoMap; + + public HudiReadOptimizedDirectoryLister( + HudiTableHandle tableHandle, + HoodieTableMetaClient metaClient, + HiveMetastore hiveMetastore, + Table hiveTable, + List partitionColumnHandles, + List hivePartitionNames, + boolean ignoreAbsentPartitions) + { + this.fileSystemView = fileListingBasedFileSystemView( + new HoodieLocalEngineContext(metaClient.getStorageConf()), + metaClient, + metaClient.getActiveTimeline().getCommitsTimeline().filterCompletedInstants()); + this.partitionColumns = hiveTable.getPartitionColumns(); + this.allPartitionInfoMap = hivePartitionNames.stream() + .collect(Collectors.toMap( + Function.identity(), + hivePartitionName -> new HiveHudiPartitionInfo( + hivePartitionName, + partitionColumns, + partitionColumnHandles, + tableHandle.getPartitionPredicates(), + hiveTable, + hiveMetastore))); + } + + @Override + public List listStatus(HudiPartitionInfo partitionInfo) + { + LOG.debug("List partition: partitionInfo=%s", partitionInfo); + return fileSystemView.getLatestBaseFiles(partitionInfo.getRelativePartitionPath()) + .map(HudiReadOptimizedDirectoryLister::getStoragePathInfo) + .map(fileEntry -> new HudiFileStatus( + Location.of(fileEntry.getPath().toString()), + false, + fileEntry.getLength(), + fileEntry.getModificationTime(), + max(fileEntry.getBlockSize(), min(fileEntry.getLength(), MIN_BLOCK_SIZE)))) + .collect(toImmutableList()); + } + + @Override + public Optional getPartitionInfo(String partition) + { + return Optional.ofNullable(allPartitionInfoMap.get(partition)); + } + + @Override + public void close() + { + if (fileSystemView != null && !fileSystemView.isClosed()) { + fileSystemView.close(); + } + } + + private static StoragePathInfo getStoragePathInfo(HoodieBaseFile baseFile) + { + if (baseFile.getBootstrapBaseFile().isPresent()) { + return baseFile.getBootstrapBaseFile().get().getPathInfo(); + } + return baseFile.getPathInfo(); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiBackgroundSplitLoader.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiBackgroundSplitLoader.java new file mode 100644 index 0000000000000..81447f1f7a780 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiBackgroundSplitLoader.java @@ -0,0 +1,104 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.split; + +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import io.trino.plugin.hive.util.AsyncQueue; +import io.trino.plugin.hudi.HudiTableHandle; +import io.trino.plugin.hudi.partition.HudiPartitionInfoLoader; +import io.trino.plugin.hudi.query.HudiDirectoryLister; +import io.trino.spi.TrinoException; +import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.connector.ConnectorSplit; + +import java.util.ArrayList; +import java.util.Deque; +import java.util.List; +import java.util.concurrent.ConcurrentLinkedDeque; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Executor; +import java.util.function.Consumer; + +import static com.google.common.util.concurrent.MoreExecutors.directExecutor; +import static io.airlift.concurrent.MoreFutures.addExceptionCallback; +import static io.trino.plugin.hudi.HudiErrorCode.HUDI_CANNOT_OPEN_SPLIT; +import static io.trino.plugin.hudi.HudiSessionProperties.getSplitGeneratorParallelism; +import static java.util.Objects.requireNonNull; + +public class HudiBackgroundSplitLoader + implements Runnable +{ + private final HudiDirectoryLister hudiDirectoryLister; + private final AsyncQueue asyncQueue; + private final Executor splitGeneratorExecutor; + private final int splitGeneratorNumThreads; + private final HudiSplitFactory hudiSplitFactory; + private final List partitions; + private final Consumer errorListener; + + public HudiBackgroundSplitLoader( + ConnectorSession session, + HudiTableHandle tableHandle, + HudiDirectoryLister hudiDirectoryLister, + AsyncQueue asyncQueue, + Executor splitGeneratorExecutor, + HudiSplitWeightProvider hudiSplitWeightProvider, + List partitions, + Consumer errorListener) + { + this.hudiDirectoryLister = requireNonNull(hudiDirectoryLister, "hudiDirectoryLister is null"); + this.asyncQueue = requireNonNull(asyncQueue, "asyncQueue is null"); + this.splitGeneratorExecutor = requireNonNull(splitGeneratorExecutor, "splitGeneratorExecutorService is null"); + this.splitGeneratorNumThreads = getSplitGeneratorParallelism(session); + this.hudiSplitFactory = new HudiSplitFactory(tableHandle, hudiSplitWeightProvider); + this.partitions = requireNonNull(partitions, "partitions is null"); + this.errorListener = requireNonNull(errorListener, "errorListener is null"); + } + + @Override + public void run() + { + Deque partitionQueue = new ConcurrentLinkedDeque<>(partitions); + List splitGeneratorList = new ArrayList<>(); + List> splitGeneratorFutures = new ArrayList<>(); + + // Start a number of partition split generators to generate the splits in parallel + for (int i = 0; i < splitGeneratorNumThreads; i++) { + HudiPartitionInfoLoader generator = new HudiPartitionInfoLoader(hudiDirectoryLister, hudiSplitFactory, asyncQueue, partitionQueue); + splitGeneratorList.add(generator); + ListenableFuture future = Futures.submit(generator, splitGeneratorExecutor); + addExceptionCallback(future, errorListener); + splitGeneratorFutures.add(future); + } + + for (HudiPartitionInfoLoader generator : splitGeneratorList) { + // Let the split generator stop once the partition queue is empty + generator.stopRunning(); + } + + try { + // Wait for all split generators to finish + Futures.whenAllComplete(splitGeneratorFutures) + .run(asyncQueue::finish, directExecutor()) + .get(); + } + catch (InterruptedException | ExecutionException e) { + if (e instanceof InterruptedException) { + Thread.currentThread().interrupt(); + } + throw new TrinoException(HUDI_CANNOT_OPEN_SPLIT, "Error generating Hudi split", e); + } + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiSplitFactory.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiSplitFactory.java new file mode 100644 index 0000000000000..ccae0b5a38f8e --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiSplitFactory.java @@ -0,0 +1,93 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.split; + +import com.google.common.collect.ImmutableList; +import io.trino.plugin.hive.HivePartitionKey; +import io.trino.plugin.hudi.HudiFileStatus; +import io.trino.plugin.hudi.HudiSplit; +import io.trino.plugin.hudi.HudiTableHandle; +import io.trino.spi.TrinoException; + +import java.util.List; + +import static io.trino.plugin.hudi.HudiErrorCode.HUDI_FILESYSTEM_ERROR; +import static java.lang.String.format; +import static java.util.Objects.requireNonNull; + +public class HudiSplitFactory +{ + private static final double SPLIT_SLOP = 1.1; // 10% slop/overflow allowed in bytes per split while generating splits + + private final HudiTableHandle hudiTableHandle; + private final HudiSplitWeightProvider hudiSplitWeightProvider; + + public HudiSplitFactory( + HudiTableHandle hudiTableHandle, + HudiSplitWeightProvider hudiSplitWeightProvider) + { + this.hudiTableHandle = requireNonNull(hudiTableHandle, "hudiTableHandle is null"); + this.hudiSplitWeightProvider = requireNonNull(hudiSplitWeightProvider, "hudiSplitWeightProvider is null"); + } + + public List createSplits(List partitionKeys, HudiFileStatus fileStatus) + { + if (fileStatus.isDirectory()) { + throw new TrinoException(HUDI_FILESYSTEM_ERROR, format("Not a valid location: %s", fileStatus.location())); + } + + long fileSize = fileStatus.length(); + + if (fileSize == 0) { + return ImmutableList.of(new HudiSplit( + fileStatus.location().toString(), + 0, + fileSize, + fileSize, + fileStatus.modificationTime(), + hudiTableHandle.getRegularPredicates(), + partitionKeys, + hudiSplitWeightProvider.calculateSplitWeight(fileSize))); + } + + ImmutableList.Builder splits = ImmutableList.builder(); + long splitSize = fileStatus.blockSize(); + + long bytesRemaining = fileSize; + while (((double) bytesRemaining) / splitSize > SPLIT_SLOP) { + splits.add(new HudiSplit( + fileStatus.location().toString(), + fileSize - bytesRemaining, + splitSize, + fileSize, + fileStatus.modificationTime(), + hudiTableHandle.getRegularPredicates(), + partitionKeys, + hudiSplitWeightProvider.calculateSplitWeight(splitSize))); + bytesRemaining -= splitSize; + } + if (bytesRemaining > 0) { + splits.add(new HudiSplit( + fileStatus.location().toString(), + fileSize - bytesRemaining, + bytesRemaining, + fileSize, + fileStatus.modificationTime(), + hudiTableHandle.getRegularPredicates(), + partitionKeys, + hudiSplitWeightProvider.calculateSplitWeight(bytesRemaining))); + } + return splits.build(); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiSplitWeightProvider.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiSplitWeightProvider.java new file mode 100644 index 0000000000000..dd90dd3563401 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiSplitWeightProvider.java @@ -0,0 +1,26 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.split; + +import io.trino.spi.SplitWeight; + +public interface HudiSplitWeightProvider +{ + SplitWeight calculateSplitWeight(long splitSizeInBytes); + + static HudiSplitWeightProvider uniformStandardWeightProvider() + { + return splitSizeInBytes -> SplitWeight.standard(); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/SizeBasedSplitWeightProvider.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/SizeBasedSplitWeightProvider.java new file mode 100644 index 0000000000000..e94e2d73c373f --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/SizeBasedSplitWeightProvider.java @@ -0,0 +1,47 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.split; + +import io.airlift.units.DataSize; +import io.trino.spi.SplitWeight; + +import static com.google.common.base.Preconditions.checkArgument; +import static java.lang.Math.clamp; +import static java.util.Objects.requireNonNull; + +public class SizeBasedSplitWeightProvider + implements HudiSplitWeightProvider +{ + private final double minimumWeight; + private final double standardSplitSizeInBytes; + + public SizeBasedSplitWeightProvider(double minimumWeight, DataSize standardSplitSize) + { + checkArgument( + Double.isFinite(minimumWeight) && minimumWeight > 0 && minimumWeight <= 1, + "minimumWeight must be > 0 and <= 1, found: %s", minimumWeight); + this.minimumWeight = minimumWeight; + long standardSplitSizeInBytesLong = requireNonNull(standardSplitSize, "standardSplitSize is null").toBytes(); + checkArgument(standardSplitSizeInBytesLong > 0, "standardSplitSize must be > 0, found: %s", standardSplitSize); + this.standardSplitSizeInBytes = (double) standardSplitSizeInBytesLong; + } + + @Override + public SplitWeight calculateSplitWeight(long splitSizeInBytes) + { + double computedWeight = splitSizeInBytes / standardSplitSizeInBytes; + // Clamp the value between the minimum weight and 1.0 (standard weight) + return SplitWeight.fromProportion(clamp(computedWeight, minimumWeight, 1.0)); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/TrinoHudiStorage.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/TrinoHudiStorage.java new file mode 100644 index 0000000000000..ffdf618811510 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/TrinoHudiStorage.java @@ -0,0 +1,322 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.storage; + +import com.google.common.collect.ImmutableList; +import io.airlift.units.DataSize; +import io.trino.filesystem.FileEntry; +import io.trino.filesystem.FileIterator; +import io.trino.filesystem.Location; +import io.trino.filesystem.TrinoFileSystem; +import io.trino.filesystem.TrinoInputFile; +import io.trino.plugin.hudi.io.TrinoSeekableDataInputStream; +import org.apache.hudi.io.SeekableDataInputStream; +import org.apache.hudi.storage.HoodieStorage; +import org.apache.hudi.storage.StorageConfiguration; +import org.apache.hudi.storage.StoragePath; +import org.apache.hudi.storage.StoragePathFilter; +import org.apache.hudi.storage.StoragePathInfo; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URI; +import java.util.HashSet; +import java.util.List; +import java.util.Optional; +import java.util.Set; + +import static io.airlift.units.DataSize.Unit.MEGABYTE; +import static java.util.Objects.requireNonNull; + +/** + * {@link HoodieStorage} implementation based on {@link TrinoFileSystem} + */ +public class TrinoHudiStorage + extends HoodieStorage +{ + private static final int DEFAULT_BLOCK_SIZE = (int) DataSize.of(32, MEGABYTE).toBytes(); + private static final int DEFAULT_BUFFER_SIZE = 4096; + private static final int DEFAULT_REPLICATION = 1; + + private final TrinoFileSystem fileSystem; + + public TrinoHudiStorage( + TrinoFileSystem fileSystem, + TrinoStorageConfiguration config) + { + super(requireNonNull(config, "config is null")); + this.fileSystem = requireNonNull(fileSystem, "fileSystem is null"); + } + + private static Location convertToLocation(StoragePath path) + { + return Location.of(path.toString()); + } + + private static StoragePathInfo convertToPathInfo(FileEntry fileEntry) + { + return new StoragePathInfo( + new StoragePath(fileEntry.location().toString()), + fileEntry.length(), + false, + (short) 0, + 0, + fileEntry.lastModified().toEpochMilli()); + } + + @Override + public HoodieStorage newInstance(StoragePath path, StorageConfiguration config) + { + return this; + } + + @Override + public String getScheme() + { + // TODO: this is not used in read path so returning a fake scheme is OK. + return "file"; + } + + @Override + public int getDefaultBlockSize(StoragePath path) + { + return DEFAULT_BLOCK_SIZE; + } + + @Override + public int getDefaultBufferSize() + { + return DEFAULT_BUFFER_SIZE; + } + + @Override + public short getDefaultReplication( + StoragePath path) + { + return DEFAULT_REPLICATION; + } + + @Override + public URI getUri() + { + return URI.create(""); + } + + @Override + public OutputStream create(StoragePath path, boolean overwrite) + throws IOException + { + return fileSystem.newOutputFile(convertToLocation(path)).create(); + } + + @Override + public OutputStream create( + StoragePath path, + boolean overwrite, + Integer bufferSize, + Short replication, + Long sizeThreshold) + throws IOException + { + return create(path, overwrite); + } + + @Override + public InputStream open(StoragePath path) + throws IOException + { + return fileSystem.newInputFile(convertToLocation(path)).newStream(); + } + + @Override + public SeekableDataInputStream openSeekable( + StoragePath path, + int bufferSize, + boolean wrapStream) + throws IOException + { + return new TrinoSeekableDataInputStream(fileSystem.newInputFile(convertToLocation(path)).newStream()); + } + + @Override + public OutputStream append(StoragePath path) + throws IOException + { + throw new UnsupportedOperationException("TrinoHudiStorage does not support append operation"); + } + + @Override + public boolean exists(StoragePath path) + throws IOException + { + return fileSystem.newInputFile(convertToLocation(path)).exists(); + } + + @Override + public StoragePathInfo getPathInfo(StoragePath path) + throws IOException + { + Location location = convertToLocation(path); + Optional result = fileSystem.directoryExists(location); + if (result.isPresent() && result.get()) { + return new StoragePathInfo(path, 0, true, (short) 0, 0, 0); + } + TrinoInputFile inputFile = fileSystem.newInputFile(location); + if (!inputFile.exists()) { + // Based on the API definition, the `FileNotFoundException` should be thrown here + // so that Hudi logic can catch it and swallow it as needed + throw new FileNotFoundException("Path " + path + " does not exist"); + } + return new StoragePathInfo(path, inputFile.length(), false, (short) 0, 0, inputFile.lastModified().toEpochMilli()); + } + + @Override + public boolean createDirectory(StoragePath path) + throws IOException + { + fileSystem.createDirectory(convertToLocation(path)); + return true; + } + + @Override + public List listDirectEntries(StoragePath path) + throws IOException + { + FileIterator fileIterator = fileSystem.listFiles(convertToLocation(path)); + Set entryList = new HashSet<>(); + while (fileIterator.hasNext()) { + entryList.add(getDirectEntryPathInfo(path, fileIterator.next())); + } + if (entryList.isEmpty()) { + // Based on the API definition, the `FileNotFoundException` should be thrown here + // so that Hudi logic can catch it and swallow it as needed + throw new FileNotFoundException("Path " + path + " does not exist"); + } + return ImmutableList.copyOf(entryList); + } + + @Override + public List listFiles(StoragePath path) + throws IOException + { + FileIterator fileIterator = fileSystem.listFiles(convertToLocation(path)); + ImmutableList.Builder listBuilder = ImmutableList.builder(); + while (fileIterator.hasNext()) { + listBuilder.add(convertToPathInfo(fileIterator.next())); + } + return listBuilder.build(); + } + + @Override + public List listDirectEntries(StoragePath path, StoragePathFilter filter) + throws IOException + { + FileIterator fileIterator = fileSystem.listFiles(convertToLocation(path)); + ImmutableList.Builder listBuilder = ImmutableList.builder(); + int count = 0; + while (fileIterator.hasNext()) { + StoragePathInfo pathInfo = getDirectEntryPathInfo(path, fileIterator.next()); + count++; + if (filter.accept(pathInfo.getPath())) { + listBuilder.add(pathInfo); + } + } + if (count == 0) { + // Based on the API definition, the `FileNotFoundException` should be thrown here + // so that Hudi logic can catch it and swallow it as needed + throw new FileNotFoundException("Path " + path + " does not exist"); + } + return listBuilder.build(); + } + + @Override + public void setModificationTime(StoragePath path, long modificationTimeInMillisEpoch) + throws IOException + { + throw new UnsupportedOperationException("TrinoHudiStorage does not support setModificationTime operation"); + } + + @Override + public List globEntries(StoragePath pathPattern, StoragePathFilter filter) + throws IOException + { + throw new UnsupportedOperationException("TrinoHudiStorage does not support globEntries operation"); + } + + @Override + public boolean rename(StoragePath oldPath, StoragePath newPath) + throws IOException + { + fileSystem.renameFile(convertToLocation(oldPath), convertToLocation(newPath)); + return true; + } + + @Override + public boolean deleteDirectory(StoragePath path) + throws IOException + { + fileSystem.deleteDirectory(convertToLocation(path)); + return true; + } + + @Override + public boolean deleteFile(StoragePath path) + throws IOException + { + fileSystem.deleteFile(convertToLocation(path)); + return true; + } + + @Override + public Object getFileSystem() + { + return fileSystem; + } + + @Override + public HoodieStorage getRawStorage() + { + return this; + } + + @Override + public void close() + throws IOException + { + } + + /** + * @param path input directory + * @param fileEntry file entry that is in the input directory + * @return the path info of the file if the file entry is directly in the input directory, + * or the subdirectory in the input directory if the file entry is under the subdirectory + * or nested directory. + */ + private static StoragePathInfo getDirectEntryPathInfo(StoragePath path, FileEntry fileEntry) + { + StoragePathInfo pathInfo = convertToPathInfo(fileEntry); + while (!path.equals(pathInfo.getPath().getParent())) { + pathInfo = new StoragePathInfo( + pathInfo.getPath().getParent(), + 0L, + true, + (short) 0, + 0L, + pathInfo.getModificationTime()); + } + return pathInfo; + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/TrinoStorageConfiguration.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/TrinoStorageConfiguration.java new file mode 100644 index 0000000000000..3ddfac264c574 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/TrinoStorageConfiguration.java @@ -0,0 +1,88 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.storage; + +import io.trino.plugin.hudi.io.TrinoHudiIoFactory; +import org.apache.hudi.common.util.Option; +import org.apache.hudi.storage.StorageConfiguration; + +import java.util.HashMap; +import java.util.Map; + +import static org.apache.hudi.common.config.HoodieStorageConfig.HOODIE_IO_FACTORY_CLASS; +import static org.apache.hudi.common.config.HoodieStorageConfig.HOODIE_STORAGE_CLASS; + +/** + * {@link StorageConfiguration} implementation based on a config map + */ +public class TrinoStorageConfiguration + extends StorageConfiguration> +{ + private final Map config; + + public TrinoStorageConfiguration() + { + this(getDefaultConfigs()); + } + + TrinoStorageConfiguration(Map config) + { + this.config = getDefaultConfigs(); + this.config.putAll(config); + } + + private static Map getDefaultConfigs() + { + Map config = new HashMap<>(); + config.put(HOODIE_IO_FACTORY_CLASS.key(), TrinoHudiIoFactory.class.getName()); + config.put(HOODIE_STORAGE_CLASS.key(), TrinoHudiStorage.class.getName()); + return config; + } + + @Override + public TrinoStorageConfiguration newInstance() + { + return new TrinoStorageConfiguration(new HashMap<>(config)); + } + + @Override + public Map unwrap() + { + return config; + } + + @Override + public Map unwrapCopy() + { + return new HashMap<>(config); + } + + @Override + public void set(String key, String value) + { + config.put(key, value); + } + + @Override + public Option getString(String key) + { + return Option.ofNullable(config.get(key)); + } + + @Override + public TrinoStorageConfiguration getInline() + { + return newInstance(); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/BaseHudiConnectorSmokeTest.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/BaseHudiConnectorSmokeTest.java new file mode 100644 index 0000000000000..c1d23e7284270 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/BaseHudiConnectorSmokeTest.java @@ -0,0 +1,59 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import io.trino.testing.BaseConnectorSmokeTest; +import io.trino.testing.TestingConnectorBehavior; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public abstract class BaseHudiConnectorSmokeTest + extends BaseConnectorSmokeTest +{ + @Override + protected boolean hasBehavior(TestingConnectorBehavior connectorBehavior) + { + return switch (connectorBehavior) { + case SUPPORTS_INSERT, + SUPPORTS_DELETE, + SUPPORTS_UPDATE, + SUPPORTS_MERGE, + SUPPORTS_CREATE_SCHEMA, + SUPPORTS_CREATE_TABLE, + SUPPORTS_RENAME_TABLE, + SUPPORTS_CREATE_VIEW, + SUPPORTS_CREATE_MATERIALIZED_VIEW, + SUPPORTS_COMMENT_ON_COLUMN -> false; + default -> super.hasBehavior(connectorBehavior); + }; + } + + @Test + @Override + public void testShowCreateTable() + { + // Override because Hudi connector contains 'location' table property + String schema = getSession().getSchema().orElseThrow(); + assertThat((String) computeScalar("SHOW CREATE TABLE region")) + .matches("\\QCREATE TABLE hudi." + schema + ".region (\n" + + " regionkey bigint,\n" + + " name varchar(25),\n" + + " comment varchar(152)\n" + + ")\n" + + "WITH (\n" + + " location = \\E'.*/region'\n\\Q" + + ")"); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/HudiQueryRunner.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/HudiQueryRunner.java new file mode 100644 index 0000000000000..c13e2b2827276 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/HudiQueryRunner.java @@ -0,0 +1,170 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.errorprone.annotations.CanIgnoreReturnValue; +import io.airlift.log.Level; +import io.airlift.log.Logger; +import io.airlift.log.Logging; +import io.trino.filesystem.Location; +import io.trino.metastore.Database; +import io.trino.metastore.HiveMetastoreFactory; +import io.trino.plugin.base.util.Closables; +import io.trino.plugin.hive.containers.Hive3MinioDataLake; +import io.trino.plugin.hudi.testing.HudiTablesInitializer; +import io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer; +import io.trino.plugin.hudi.testing.TpchHudiTablesInitializer; +import io.trino.spi.security.PrincipalType; +import io.trino.testing.DistributedQueryRunner; +import io.trino.testing.QueryRunner; +import io.trino.tpch.TpchTable; + +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; + +import static io.trino.testing.TestingSession.testSessionBuilder; +import static io.trino.testing.containers.Minio.MINIO_ACCESS_KEY; +import static io.trino.testing.containers.Minio.MINIO_REGION; +import static io.trino.testing.containers.Minio.MINIO_SECRET_KEY; +import static java.util.Objects.requireNonNull; + +public final class HudiQueryRunner +{ + private HudiQueryRunner() {} + + static { + Logging logging = Logging.initialize(); + logging.setLevel("org.apache.hudi", Level.OFF); + } + + private static final String SCHEMA_NAME = "tests"; + + public static Builder builder() + { + return new Builder("local:///"); + } + + public static Builder builder(Hive3MinioDataLake hiveMinioDataLake) + { + return new Builder("s3://" + hiveMinioDataLake.getBucketName() + "/") + .addConnectorProperty("fs.native-s3.enabled", "true") + .addConnectorProperty("s3.aws-access-key", MINIO_ACCESS_KEY) + .addConnectorProperty("s3.aws-secret-key", MINIO_SECRET_KEY) + .addConnectorProperty("s3.region", MINIO_REGION) + .addConnectorProperty("s3.endpoint", hiveMinioDataLake.getMinio().getMinioAddress()) + .addConnectorProperty("s3.path-style-access", "true"); + } + + public static class Builder + extends DistributedQueryRunner.Builder + { + private final String schemaLocation; + private HudiTablesInitializer dataLoader; + private final Map connectorProperties = new HashMap<>(); + + protected Builder(String schemaLocation) + { + super(testSessionBuilder() + .setCatalog("hudi") + .setSchema(SCHEMA_NAME) + .build()); + this.schemaLocation = requireNonNull(schemaLocation, "schemaLocation is null"); + } + + @CanIgnoreReturnValue + public Builder setDataLoader(HudiTablesInitializer dataLoader) + { + this.dataLoader = dataLoader; + return this; + } + + @CanIgnoreReturnValue + public Builder addConnectorProperty(String key, String value) + { + this.connectorProperties.put(key, value); + return this; + } + + @Override + public DistributedQueryRunner build() + throws Exception + { + DistributedQueryRunner queryRunner = super.build(); + try { + queryRunner.installPlugin(new TestingHudiPlugin(queryRunner.getCoordinator().getBaseDataDir().resolve("hudi_data"))); + queryRunner.createCatalog("hudi", "hudi", connectorProperties); + + // Hudi connector does not support creating schema or any other write operations + ((HudiConnector) queryRunner.getCoordinator().getConnector("hudi")).getInjector() + .getInstance(HiveMetastoreFactory.class) + .createMetastore(Optional.empty()) + .createDatabase(Database.builder() + .setDatabaseName(SCHEMA_NAME) + .setOwnerName(Optional.of("public")) + .setOwnerType(Optional.of(PrincipalType.ROLE)) + .build()); + + dataLoader.initializeTables(queryRunner, Location.of(schemaLocation), SCHEMA_NAME); + return queryRunner; + } + catch (Throwable e) { + Closables.closeAllSuppress(e, queryRunner); + throw e; + } + } + } + + public static final class DefaultHudiQueryRunnerMain + { + private DefaultHudiQueryRunnerMain() {} + + public static void main(String[] args) + throws Exception + { + Logging.initialize(); + Logger log = Logger.get(DefaultHudiQueryRunnerMain.class); + + QueryRunner queryRunner = builder() + .addCoordinatorProperty("http-server.http.port", "8080") + .setDataLoader(new ResourceHudiTablesInitializer()) + .build(); + + log.info("======== SERVER STARTED ========"); + log.info("\n====\n%s\n====", queryRunner.getCoordinator().getBaseUrl()); + } + } + + public static final class HudiMinioQueryRunnerMain + { + private HudiMinioQueryRunnerMain() {} + + public static void main(String[] args) + throws Exception + { + Logging.initialize(); + Logger log = Logger.get(HudiMinioQueryRunnerMain.class); + + Hive3MinioDataLake hiveMinioDataLake = new Hive3MinioDataLake("test-bucket"); + hiveMinioDataLake.start(); + QueryRunner queryRunner = builder(hiveMinioDataLake) + .addCoordinatorProperty("http-server.http.port", "8080") + .setDataLoader(new TpchHudiTablesInitializer(TpchTable.getTables())) + .build(); + + log.info("======== SERVER STARTED ========"); + log.info("\n====\n%s\n====", queryRunner.getCoordinator().getBaseUrl()); + } + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConfig.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConfig.java new file mode 100644 index 0000000000000..746b3c05f7134 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConfig.java @@ -0,0 +1,82 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import io.airlift.units.DataSize; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static io.airlift.configuration.testing.ConfigAssertions.assertFullMapping; +import static io.airlift.configuration.testing.ConfigAssertions.assertRecordedDefaults; +import static io.airlift.configuration.testing.ConfigAssertions.recordDefaults; +import static io.airlift.units.DataSize.Unit.MEGABYTE; + +public class TestHudiConfig +{ + @Test + public void testDefaults() + { + assertRecordedDefaults(recordDefaults(HudiConfig.class) + .setColumnsToHide(ImmutableList.of()) + .setUseParquetColumnNames(true) + .setSizeBasedSplitWeightsEnabled(true) + .setStandardSplitWeightSize(DataSize.of(128, MEGABYTE)) + .setMinimumAssignedSplitWeight(0.05) + .setMaxSplitsPerSecond(Integer.MAX_VALUE) + .setMaxOutstandingSplits(1000) + .setSplitLoaderParallelism(4) + .setSplitGeneratorParallelism(4) + .setPerTransactionMetastoreCacheMaximumSize(2000) + .setQueryPartitionFilterRequired(false) + .setIgnoreAbsentPartitions(false)); + } + + @Test + public void testExplicitPropertyMappings() + { + Map properties = ImmutableMap.builder() + .put("hudi.columns-to-hide", "_hoodie_record_key") + .put("hudi.parquet.use-column-names", "false") + .put("hudi.size-based-split-weights-enabled", "false") + .put("hudi.standard-split-weight-size", "64MB") + .put("hudi.minimum-assigned-split-weight", "0.1") + .put("hudi.max-splits-per-second", "100") + .put("hudi.max-outstanding-splits", "100") + .put("hudi.split-loader-parallelism", "16") + .put("hudi.split-generator-parallelism", "32") + .put("hudi.per-transaction-metastore-cache-maximum-size", "1000") + .put("hudi.query-partition-filter-required", "true") + .put("hudi.ignore-absent-partitions", "true") + .buildOrThrow(); + + HudiConfig expected = new HudiConfig() + .setColumnsToHide(ImmutableList.of("_hoodie_record_key")) + .setUseParquetColumnNames(false) + .setSizeBasedSplitWeightsEnabled(false) + .setStandardSplitWeightSize(DataSize.of(64, MEGABYTE)) + .setMinimumAssignedSplitWeight(0.1) + .setMaxSplitsPerSecond(100) + .setMaxOutstandingSplits(100) + .setSplitLoaderParallelism(16) + .setSplitGeneratorParallelism(32) + .setPerTransactionMetastoreCacheMaximumSize(1000) + .setQueryPartitionFilterRequired(true) + .setIgnoreAbsentPartitions(true); + + assertFullMapping(properties, expected); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConnectorFactory.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConnectorFactory.java new file mode 100644 index 0000000000000..2e1095a535a20 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConnectorFactory.java @@ -0,0 +1,70 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableMap; +import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorMetadata; +import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorSplitManager; +import io.trino.spi.connector.Connector; +import io.trino.spi.connector.ConnectorFactory; +import io.trino.spi.connector.ConnectorPageSourceProvider; +import io.trino.spi.connector.ConnectorTransactionHandle; +import io.trino.testing.TestingConnectorContext; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static io.trino.spi.transaction.IsolationLevel.READ_UNCOMMITTED; +import static io.trino.testing.TestingConnectorSession.SESSION; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +public class TestHudiConnectorFactory +{ + @Test + public void testCreateConnector() + { + assertCreateConnector("thrift://localhost:1234"); + assertCreateConnector("thrift://localhost:1234,thrift://192.0.2.3:5678"); + + assertCreateConnectorFails("abc", "metastoreUri scheme is missing: abc"); + assertCreateConnectorFails("thrift://:8090", "metastoreUri host is missing: thrift://:8090"); + assertCreateConnectorFails("thrift://localhost", "metastoreUri port is missing: thrift://localhost"); + assertCreateConnectorFails("abc::", "metastoreUri scheme must be thrift: abc::"); + assertCreateConnectorFails("", "metastoreUris must specify at least one URI"); + assertCreateConnectorFails("thrift://localhost:1234,thrift://test-1", "metastoreUri port is missing: thrift://test-1"); + } + + private static void assertCreateConnector(String metastoreUri) + { + Map config = ImmutableMap.of( + "hive.metastore.uri", metastoreUri, + "bootstrap.quiet", "true"); + + ConnectorFactory factory = new HudiConnectorFactory(); + Connector connector = factory.create("test", config, new TestingConnectorContext()); + ConnectorTransactionHandle transaction = connector.beginTransaction(READ_UNCOMMITTED, true, true); + assertThat(connector.getMetadata(SESSION, transaction)).isInstanceOf(ClassLoaderSafeConnectorMetadata.class); + assertThat(connector.getSplitManager()).isInstanceOf(ClassLoaderSafeConnectorSplitManager.class); + assertThat(connector.getPageSourceProvider()).isInstanceOf(ConnectorPageSourceProvider.class); + connector.commit(transaction); + } + + private static void assertCreateConnectorFails(String metastoreUri, String exceptionString) + { + assertThatThrownBy(() -> assertCreateConnector(metastoreUri)) + .isInstanceOf(RuntimeException.class) + .hasMessageContaining(exceptionString); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConnectorParquetColumnNamesTest.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConnectorParquetColumnNamesTest.java new file mode 100644 index 0000000000000..7e938ba3aed1e --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConnectorParquetColumnNamesTest.java @@ -0,0 +1,31 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer; +import io.trino.testing.QueryRunner; + +public class TestHudiConnectorParquetColumnNamesTest + extends TestHudiSmokeTest +{ + @Override + protected QueryRunner createQueryRunner() + throws Exception + { + return HudiQueryRunner.builder() + .addConnectorProperty("hudi.parquet.use-column-names", "false") + .setDataLoader(new ResourceHudiTablesInitializer()) + .build(); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConnectorTest.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConnectorTest.java new file mode 100644 index 0000000000000..84a4cbd604402 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConnectorTest.java @@ -0,0 +1,90 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import io.trino.plugin.hudi.testing.TpchHudiTablesInitializer; +import io.trino.testing.BaseConnectorTest; +import io.trino.testing.QueryRunner; +import io.trino.testing.TestingConnectorBehavior; +import org.junit.jupiter.api.Test; + +import static io.trino.plugin.hudi.testing.HudiTestUtils.COLUMNS_TO_HIDE; +import static org.assertj.core.api.Assertions.assertThat; + +public class TestHudiConnectorTest + extends BaseConnectorTest +{ + @Override + protected QueryRunner createQueryRunner() + throws Exception + { + return HudiQueryRunner.builder() + .addConnectorProperty("hudi.columns-to-hide", COLUMNS_TO_HIDE) + .setDataLoader(new TpchHudiTablesInitializer(REQUIRED_TPCH_TABLES)) + .build(); + } + + @Override + protected boolean hasBehavior(TestingConnectorBehavior connectorBehavior) + { + return switch (connectorBehavior) { + case SUPPORTS_ADD_COLUMN, + SUPPORTS_COMMENT_ON_COLUMN, + SUPPORTS_COMMENT_ON_TABLE, + SUPPORTS_CREATE_MATERIALIZED_VIEW, + SUPPORTS_CREATE_SCHEMA, + SUPPORTS_CREATE_TABLE, + SUPPORTS_CREATE_VIEW, + SUPPORTS_DELETE, + SUPPORTS_DEREFERENCE_PUSHDOWN, + SUPPORTS_INSERT, + SUPPORTS_MERGE, + SUPPORTS_RENAME_COLUMN, + SUPPORTS_RENAME_TABLE, + SUPPORTS_SET_COLUMN_TYPE, + SUPPORTS_TOPN_PUSHDOWN, + SUPPORTS_UPDATE -> false; + default -> super.hasBehavior(connectorBehavior); + }; + } + + @Test + @Override + public void testShowCreateTable() + { + String schema = getSession().getSchema().orElseThrow(); + assertThat((String) computeScalar("SHOW CREATE TABLE orders")) + .matches("\\QCREATE TABLE hudi." + schema + ".orders (\n" + + " orderkey bigint,\n" + + " custkey bigint,\n" + + " orderstatus varchar(1),\n" + + " totalprice double,\n" + + " orderdate date,\n" + + " orderpriority varchar(15),\n" + + " clerk varchar(15),\n" + + " shippriority integer,\n" + + " comment varchar(79)\n" + + ")\n" + + "WITH (\n" + + " location = \\E'.*/orders'\n\\Q" + + ")"); + } + + @Test + public void testHideHiveSysSchema() + { + assertThat(computeActual("SHOW SCHEMAS").getOnlyColumnAsSet()).doesNotContain("sys"); + assertQueryFails("SHOW TABLES IN hudi.sys", ".*Schema 'sys' does not exist"); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiMinioConnectorSmokeTest.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiMinioConnectorSmokeTest.java new file mode 100644 index 0000000000000..5fa1332073cdf --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiMinioConnectorSmokeTest.java @@ -0,0 +1,41 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import io.trino.plugin.hive.containers.Hive3MinioDataLake; +import io.trino.plugin.hudi.testing.TpchHudiTablesInitializer; +import io.trino.testing.QueryRunner; + +import static io.trino.plugin.hive.containers.HiveHadoop.HIVE3_IMAGE; +import static io.trino.plugin.hudi.testing.HudiTestUtils.COLUMNS_TO_HIDE; +import static io.trino.testing.TestingNames.randomNameSuffix; + +public class TestHudiMinioConnectorSmokeTest + extends BaseHudiConnectorSmokeTest +{ + @Override + protected QueryRunner createQueryRunner() + throws Exception + { + String bucketName = "test-hudi-connector-" + randomNameSuffix(); + Hive3MinioDataLake hiveMinioDataLake = closeAfterClass(new Hive3MinioDataLake(bucketName, HIVE3_IMAGE)); + hiveMinioDataLake.start(); + hiveMinioDataLake.getMinioClient().ensureBucketExists(bucketName); + + return HudiQueryRunner.builder(hiveMinioDataLake) + .addConnectorProperty("hudi.columns-to-hide", COLUMNS_TO_HIDE) + .setDataLoader(new TpchHudiTablesInitializer(REQUIRED_TPCH_TABLES)) + .build(); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiPlugin.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiPlugin.java new file mode 100644 index 0000000000000..943a7cb9ca035 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiPlugin.java @@ -0,0 +1,38 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableMap; +import io.trino.spi.connector.ConnectorFactory; +import io.trino.testing.TestingConnectorContext; +import org.junit.jupiter.api.Test; + +import static com.google.common.collect.Iterables.getOnlyElement; + +final class TestHudiPlugin +{ + @Test + void testCreateConnector() + { + ConnectorFactory factory = getOnlyElement(new HudiPlugin().getConnectorFactories()); + factory.create( + "test", + ImmutableMap.builder() + .put("hive.metastore.uri", "thrift://foo:1234") + .put("bootstrap.quiet", "true") + .buildOrThrow(), + new TestingConnectorContext()) + .shutdown(); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSessionProperties.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSessionProperties.java new file mode 100644 index 0000000000000..c711a324b06d9 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSessionProperties.java @@ -0,0 +1,39 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableList; +import io.trino.plugin.hive.parquet.ParquetReaderConfig; +import io.trino.spi.connector.ConnectorSession; +import io.trino.testing.TestingConnectorSession; +import org.junit.jupiter.api.Test; + +import static io.trino.plugin.hudi.HudiSessionProperties.getColumnsToHide; +import static org.assertj.core.api.Assertions.assertThat; + +public class TestHudiSessionProperties +{ + @Test + public void testSessionPropertyColumnsToHide() + { + HudiConfig config = new HudiConfig() + .setColumnsToHide(ImmutableList.of("col1", "col2")); + HudiSessionProperties sessionProperties = new HudiSessionProperties(config, new ParquetReaderConfig()); + ConnectorSession session = TestingConnectorSession.builder() + .setPropertyMetadata(sessionProperties.getSessionProperties()) + .build(); + assertThat(getColumnsToHide(session)) + .containsExactlyInAnyOrderElementsOf(ImmutableList.of("col1", "col2")); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSharedMetastore.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSharedMetastore.java new file mode 100644 index 0000000000000..32994032265fe --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSharedMetastore.java @@ -0,0 +1,178 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import io.trino.Session; +import io.trino.filesystem.Location; +import io.trino.plugin.hive.TestingHivePlugin; +import io.trino.plugin.hudi.testing.TpchHudiTablesInitializer; +import io.trino.testing.AbstractTestQueryFramework; +import io.trino.testing.DistributedQueryRunner; +import io.trino.testing.QueryRunner; +import io.trino.tpch.TpchTable; +import org.junit.jupiter.api.Test; + +import java.nio.file.Path; +import java.util.List; + +import static io.trino.plugin.tpch.TpchMetadata.TINY_SCHEMA_NAME; +import static io.trino.testing.QueryAssertions.copyTpchTables; +import static io.trino.testing.TestingNames.randomNameSuffix; +import static io.trino.testing.TestingSession.testSessionBuilder; +import static io.trino.tpch.TpchTable.NATION; +import static org.assertj.core.api.Assertions.assertThat; + +final class TestHudiSharedMetastore + extends AbstractTestQueryFramework +{ + @Override + protected QueryRunner createQueryRunner() + throws Exception + { + Session hudiSession = testSessionBuilder() + .setCatalog("hudi") + .setSchema("default") + .build(); + Session hiveSession = testSessionBuilder() + .setCatalog("hive") + .setSchema("default") + .build(); + + QueryRunner queryRunner = DistributedQueryRunner.builder(hudiSession).build(); + + Path dataDirectory = queryRunner.getCoordinator().getBaseDataDir().resolve("hudi_data"); + dataDirectory.toFile().deleteOnExit(); + + queryRunner.installPlugin(new HudiPlugin()); + queryRunner.createCatalog( + "hudi", + "hudi", + ImmutableMap.of( + "hive.metastore", "file", + "hive.metastore.catalog.dir", dataDirectory.toString(), + "fs.hadoop.enabled", "true")); + + queryRunner.installPlugin(new TestingHivePlugin(dataDirectory)); + queryRunner.createCatalog("hive", "hive"); + + queryRunner.execute("CREATE SCHEMA hive.default"); + + TpchHudiTablesInitializer tpchHudiTablesInitializer = new TpchHudiTablesInitializer(List.of(NATION)); + tpchHudiTablesInitializer.initializeTables(queryRunner, Location.of(dataDirectory.toString()), "default"); + + copyTpchTables(queryRunner, "tpch", TINY_SCHEMA_NAME, hiveSession, ImmutableList.of(TpchTable.REGION)); + + return queryRunner; + } + + @Test + void testHudiSelectFromHiveTable() + { + String tableName = "test_hudi_select_from_hive_" + randomNameSuffix(); + assertUpdate("CREATE TABLE hive.default." + tableName + "(a bigint)"); + + assertQueryFails("SELECT * FROM hudi.default." + tableName, "Not a Hudi table: default." + tableName); + assertQueryFails("SELECT * FROM hudi.default.\"" + tableName + "$data\"", ".* Table .* does not exist"); + assertQueryFails("SELECT * FROM hudi.default.\"" + tableName + "$timeline\"", ".* Table .* does not exist"); + assertQueryFails("SELECT * FROM hudi.default.\"" + tableName + "$files\"", ".* Table .* does not exist"); + + assertUpdate("DROP TABLE hive.default." + tableName); + } + + @Test + void testHiveSelectFromHudiTable() + { + String tableName = "test_hive_select_from_hudi_" + randomNameSuffix(); + assertQueryFails("CREATE TABLE hudi.default." + tableName + "(a bigint)", "This connector does not support creating tables"); + + // TODO should be "Cannot query Hudi table" once CREATE TABLE is supported + assertQueryFails("SELECT * FROM hive.default." + tableName, ".* Table .* does not exist"); + assertQueryFails("SELECT * FROM hive.default.\"" + tableName + "$partitions\"", ".* Table .* does not exist"); + assertQueryFails("SELECT * FROM hive.default.\"" + tableName + "$properties\"", "Table .* not found"); + } + + @Test + void testHudiCannotCreateTableNamesakeToHiveTable() + { + String tableName = "test_hudi_create_namesake_hive_table_" + randomNameSuffix(); + assertUpdate("CREATE TABLE hive.default." + tableName + "(a bigint)"); + + assertQueryFails("CREATE TABLE hudi.default." + tableName + "(a bigint)", ".* Table .* of unsupported type already exists"); + + assertUpdate("DROP TABLE hive.default." + tableName); + } + + @Test + void testHiveCannotCreateTableNamesakeToHudiTable() + { + String tableName = "test_hive_create_namesake_hudi_table_" + randomNameSuffix(); + assertQueryFails("CREATE TABLE hudi.default." + tableName + "(a bigint)", "This connector does not support creating tables"); + // TODO implement test like testHiveCannotCreateTableNamesakeToIcebergTable when CREATE TABLE supported + } + + @Test + void testHiveSelectTableColumns() + { + assertThat(query("SELECT table_cat, table_schem, table_name, column_name FROM system.jdbc.columns WHERE table_cat = 'hive' AND table_schem = 'default' AND table_name = 'region'")) + .skippingTypesCheck() + .matches("VALUES " + + "('hive', '" + "default" + "', 'region', 'regionkey')," + + "('hive', '" + "default" + "', 'region', 'name')," + + "('hive', '" + "default" + "', 'region', 'comment')"); + + // Hive does not show any information about tables with unsupported format + assertQueryReturnsEmptyResult("SELECT table_cat, table_schem, table_name, column_name FROM system.jdbc.columns WHERE table_cat = 'hive' AND table_schem = 'default' AND table_name = 'nation'"); + } + + @Test + void testHiveListsHudiTable() + { + String tableName = "test_hive_lists_hudi_table_" + randomNameSuffix(); + assertQueryFails("CREATE TABLE hudi.default." + tableName + "(a bigint)", "This connector does not support creating tables"); + // TODO change doesNotContain to contains once CREATE TABLE supported + assertThat(query("SHOW TABLES FROM hive.default")).result().onlyColumnAsSet().doesNotContain(tableName); + } + + @Test + void testHudiListsHiveTable() + { + String tableName = "test_hudi_lists_hive_table_" + randomNameSuffix(); + assertUpdate("CREATE TABLE hive.default." + tableName + "(a bigint)"); + assertThat(query("SHOW TABLES FROM hudi.default")).result().onlyColumnAsSet().contains(tableName); + assertUpdate("DROP TABLE hive.default." + tableName); + } + + @Test + void testHudiSelectFromHiveView() + { + String tableName = "hudi_from_hive_table_" + randomNameSuffix(); + String viewName = "hudi_from_trino_hive_view_" + randomNameSuffix(); + assertUpdate("CREATE TABLE hive.default." + tableName + " AS SELECT 1 a", 1); + assertUpdate("CREATE VIEW hive.default." + viewName + " AS TABLE hive.default." + tableName); + + assertQueryFails("SELECT * FROM hudi.default." + viewName, "Not a Hudi table: .*"); + + assertUpdate("DROP VIEW hive.default." + viewName); + assertUpdate("DROP TABLE hive.default." + tableName); + } + + @Test + void testHiveSelectFromHudiView() + { + assertQueryFails("CREATE VIEW hudi.default.a_new_view AS SELECT 1 a", "This connector does not support creating views"); + // TODO test reading via Hive once Hudi supports CREATE VIEW + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSmokeTest.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSmokeTest.java new file mode 100644 index 0000000000000..24abd8b5509c2 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSmokeTest.java @@ -0,0 +1,376 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import io.trino.Session; +import io.trino.filesystem.Location; +import io.trino.filesystem.TrinoFileSystemFactory; +import io.trino.filesystem.TrinoInputFile; +import io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer; +import io.trino.spi.security.ConnectorIdentity; +import io.trino.testing.AbstractTestQueryFramework; +import io.trino.testing.QueryRunner; +import org.intellij.lang.annotations.Language; +import org.junit.jupiter.api.Test; + +import java.time.ZonedDateTime; + +import static io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer.TestingTable.HUDI_COW_PT_TBL; +import static io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer.TestingTable.HUDI_NON_PART_COW; +import static io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer.TestingTable.STOCK_TICKS_COW; +import static io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer.TestingTable.STOCK_TICKS_MOR; +import static org.assertj.core.api.Assertions.assertThat; + +public class TestHudiSmokeTest + extends AbstractTestQueryFramework +{ + @Override + protected QueryRunner createQueryRunner() + throws Exception + { + return HudiQueryRunner.builder() + .setDataLoader(new ResourceHudiTablesInitializer()) + .build(); + } + + @Test + public void testReadNonPartitionedTable() + { + assertQuery( + "SELECT id, name FROM " + HUDI_NON_PART_COW, + "SELECT * FROM VALUES (1, 'a1'), (2, 'a2')"); + } + + @Test + public void testReadPartitionedTables() + { + assertQuery("SELECT symbol, max(ts) FROM " + STOCK_TICKS_COW + " GROUP BY symbol HAVING symbol = 'GOOG'", + "SELECT * FROM VALUES ('GOOG', '2018-08-31 10:59:00')"); + + assertQuery("SELECT symbol, max(ts) FROM " + STOCK_TICKS_MOR + " GROUP BY symbol HAVING symbol = 'GOOG'", + "SELECT * FROM VALUES ('GOOG', '2018-08-31 10:59:00')"); + + assertQuery("SELECT dt, count(1) FROM " + STOCK_TICKS_MOR + " GROUP BY dt", + "SELECT * FROM VALUES ('2018-08-31', '99')"); + } + + @Test + public void testMultiPartitionedTable() + { + assertQuery("SELECT _hoodie_partition_path, id, name, ts, dt, hh FROM " + HUDI_COW_PT_TBL + " WHERE id = 1", + "SELECT * FROM VALUES ('dt=2021-12-09/hh=10', 1, 'a1', 1000, '2021-12-09', '10')"); + assertQuery("SELECT _hoodie_partition_path, id, name, ts, dt, hh FROM " + HUDI_COW_PT_TBL + " WHERE id = 2", + "SELECT * FROM VALUES ('dt=2021-12-09/hh=11', 2, 'a2', 1000, '2021-12-09', '11')"); + } + + @Test + public void testShowCreateTable() + { + assertThat((String) computeActual("SHOW CREATE TABLE " + STOCK_TICKS_COW).getOnlyValue()) + .matches("CREATE TABLE \\w+\\.\\w+\\.stock_ticks_cow \\Q(\n" + + " _hoodie_commit_time varchar,\n" + + " _hoodie_commit_seqno varchar,\n" + + " _hoodie_record_key varchar,\n" + + " _hoodie_partition_path varchar,\n" + + " _hoodie_file_name varchar,\n" + + " volume bigint,\n" + + " ts varchar,\n" + + " symbol varchar,\n" + + " year integer,\n" + + " month varchar,\n" + + " high double,\n" + + " low double,\n" + + " key varchar,\n" + + " date varchar,\n" + + " close double,\n" + + " open double,\n" + + " day varchar,\n" + + " dt varchar\n" + + ")\n" + + "WITH (\n" + + " location = \\E'.*/stock_ticks_cow',\n\\Q" + + " partitioned_by = ARRAY['dt']\n" + + ")"); + // multi-partitioned table + assertThat((String) computeActual("SHOW CREATE TABLE " + HUDI_COW_PT_TBL).getOnlyValue()) + .matches("CREATE TABLE \\w+\\.\\w+\\.hudi_cow_pt_tbl \\Q(\n" + + " _hoodie_commit_time varchar,\n" + + " _hoodie_commit_seqno varchar,\n" + + " _hoodie_record_key varchar,\n" + + " _hoodie_partition_path varchar,\n" + + " _hoodie_file_name varchar,\n" + + " id bigint,\n" + + " name varchar,\n" + + " ts bigint,\n" + + " dt varchar,\n" + + " hh varchar\n" + + ")\n" + + "WITH (\n" + + " location = \\E'.*/hudi_cow_pt_tbl',\n\\Q" + + " partitioned_by = ARRAY['dt','hh']\n" + + ")"); + } + + @Test + public void testMetaColumns() + { + assertQuery("SELECT _hoodie_commit_time FROM hudi_cow_pt_tbl", "VALUES ('20220906063435640'), ('20220906063456550')"); + assertQuery("SELECT _hoodie_commit_seqno FROM hudi_cow_pt_tbl", "VALUES ('20220906063435640_0_0'), ('20220906063456550_0_0')"); + assertQuery("SELECT _hoodie_record_key FROM hudi_cow_pt_tbl", "VALUES ('id:1'), ('id:2')"); + assertQuery("SELECT _hoodie_partition_path FROM hudi_cow_pt_tbl", "VALUES ('dt=2021-12-09/hh=10'), ('dt=2021-12-09/hh=11')"); + assertQuery( + "SELECT _hoodie_file_name FROM hudi_cow_pt_tbl", + "VALUES ('719c3273-2805-4124-b1ac-e980dada85bf-0_0-27-1215_20220906063435640.parquet'), ('4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0_0-70-2444_20220906063456550.parquet')"); + } + + @Test + public void testPathColumn() + throws Exception + { + String path = (String) computeScalar("SELECT \"$path\" FROM " + HUDI_COW_PT_TBL + " WHERE id = 1"); + assertThat(toInputFile(path).exists()).isTrue(); + } + + @Test + public void testFileSizeColumn() + throws Exception + { + String path = (String) computeScalar("SELECT \"$path\" FROM " + HUDI_COW_PT_TBL + " WHERE id = 1"); + long fileSize = (long) computeScalar("SELECT \"$file_size\" FROM " + HUDI_COW_PT_TBL + " WHERE id = 1"); + assertThat(fileSize).isEqualTo(toInputFile(path).length()); + } + + @Test + public void testFileModifiedColumn() + throws Exception + { + String path = (String) computeScalar("SELECT \"$path\" FROM " + HUDI_COW_PT_TBL + " WHERE id = 1"); + ZonedDateTime fileModifiedTime = (ZonedDateTime) computeScalar("SELECT \"$file_modified_time\" FROM " + HUDI_COW_PT_TBL + " WHERE id = 1"); + assertThat(fileModifiedTime.toInstant().toEpochMilli()) + .isEqualTo(toInputFile(path).lastModified().toEpochMilli()); + } + + @Test + public void testPartitionColumn() + { + assertQuery("SELECT \"$partition\" FROM " + HUDI_COW_PT_TBL + " WHERE id = 1", "VALUES 'dt=2021-12-09/hh=10'"); + assertQuery("SELECT \"$partition\" FROM " + HUDI_COW_PT_TBL + " WHERE id = 2", "VALUES 'dt=2021-12-09/hh=11'"); + + assertQueryFails("SELECT \"$partition\" FROM " + HUDI_NON_PART_COW, ".* Column '\\$partition' cannot be resolved"); + } + + @Test + public void testPartitionFilterRequired() + { + Session session = withPartitionFilterRequired(getSession()); + + assertQueryFails( + session, + "SELECT * FROM " + HUDI_COW_PT_TBL, + "Filter required on tests." + HUDI_COW_PT_TBL.getTableName() + " for at least one of the partition columns: dt, hh"); + } + + @Test + public void testPartitionFilterRequiredPredicateOnNonPartitionColumn() + { + Session session = withPartitionFilterRequired(getSession()); + + assertQueryFails( + session, + "SELECT * FROM " + HUDI_COW_PT_TBL + " WHERE id = 1", + "Filter required on tests." + HUDI_COW_PT_TBL.getTableName() + " for at least one of the partition columns: dt, hh"); + } + + @Test + public void testPartitionFilterRequiredNestedQueryWithInnerPartitionPredicate() + { + Session session = withPartitionFilterRequired(getSession()); + + assertQuery(session, "SELECT name FROM (SELECT * FROM " + HUDI_COW_PT_TBL + " WHERE dt = '2021-12-09') WHERE id = 1", "VALUES 'a1'"); + } + + @Test + public void testPartitionFilterRequiredNestedQueryWithOuterPartitionPredicate() + { + Session session = withPartitionFilterRequired(getSession()); + + assertQuery(session, "SELECT name FROM (SELECT * FROM " + HUDI_COW_PT_TBL + " WHERE id = 1) WHERE dt = '2021-12-09'", "VALUES 'a1'"); + } + + @Test + public void testPartitionFilterRequiredNestedWithIsNotNullFilter() + { + Session session = withPartitionFilterRequired(getSession()); + + assertQuery(session, "SELECT name FROM " + HUDI_COW_PT_TBL + " WHERE dt IS NOT null", "VALUES 'a1', 'a2'"); + } + + @Test + public void testPartitionFilterRequiredFilterRemovedByPlanner() + { + Session session = withPartitionFilterRequired(getSession()); + + assertQueryFails( + session, + "SELECT id FROM " + HUDI_COW_PT_TBL + " WHERE dt IS NOT null OR true", + "Filter required on tests." + HUDI_COW_PT_TBL.getTableName() + " for at least one of the partition columns: dt, hh"); + } + + @Test + public void testPartitionFilterRequiredOnJoin() + { + Session session = withPartitionFilterRequired(getSession()); + @Language("RegExp") String errorMessage = "Filter required on tests." + HUDI_COW_PT_TBL.getTableName() + " for at least one of the partition columns: dt, hh"; + + // ON with partition column + assertQueryFails( + session, + "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_NON_PART_COW + " t2 ON (t1.dt = t2.dt)", + errorMessage); + // ON with partition column and WHERE with same left table's partition column + assertQuery( + session, + "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_NON_PART_COW + " t2 ON (t1.dt = t2.dt) WHERE t1.dt = '2021-12-09'", + "VALUES ('a1', 'a1'), ('a2', 'a2'), ('a1', 'a2'), ('a2', 'a1')"); + // ON with partition column and WHERE with same right table's regular column + assertQuery( + session, + "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_NON_PART_COW + " t2 ON (t1.dt = t2.dt) WHERE t2.dt = '2021-12-09'", + "VALUES ('a1', 'a1'), ('a2', 'a2'), ('a1', 'a2'), ('a2', 'a1')"); + // ON with partition column and WHERE with different left table's partition column + assertQuery( + session, + "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_NON_PART_COW + " t2 ON (t1.dt = t2.dt) WHERE t1.hh = '10'", + "VALUES ('a1', 'a1'), ('a1', 'a2')"); + // ON with partition column and WHERE with different regular column + assertQueryFails( + session, + "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_NON_PART_COW + " t2 ON (t1.dt = t2.dt) WHERE t2.hh = '10'", + errorMessage); + // ON with partition column and WHERE with regular column + assertQueryFails( + session, + "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_NON_PART_COW + " t2 ON (t1.dt = t2.dt) WHERE t1.id = 1", + errorMessage); + + // ON with regular column + assertQueryFails( + session, + "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_NON_PART_COW + " t2 ON (t1.id = t2.id)", + errorMessage); + // ON with regular column and WHERE with left table's partition column + assertQuery( + session, + "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_NON_PART_COW + " t2 ON (t1.id = t2.id) WHERE t1.dt = '2021-12-09'", + "VALUES ('a1', 'a1'), ('a2', 'a2')"); + // ON with partition column and WHERE with right table's regular column + assertQueryFails( + session, + "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_NON_PART_COW + " t2 ON (t1.dt = t2.dt) WHERE t2.id = 1", + errorMessage); + } + + @Test + public void testPartitionFilterRequiredOnJoinBothTablePartitioned() + { + Session session = withPartitionFilterRequired(getSession()); + + // ON with partition column + assertQueryFails( + session, + "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_COW_PT_TBL + " t2 ON (t1.dt = t2.dt)", + "Filter required on tests." + HUDI_COW_PT_TBL.getTableName() + " for at least one of the partition columns: dt, hh"); + // ON with partition column and WHERE with same left table's partition column + assertQuery( + session, + "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_COW_PT_TBL + " t2 ON (t1.dt = t2.dt) WHERE t1.dt = '2021-12-09'", + "VALUES ('a1', 'a1'), ('a2', 'a2'), ('a1', 'a2'), ('a2', 'a1')"); + // ON with partition column and WHERE with same right table's partition column + assertQuery( + session, + "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_COW_PT_TBL + " t2 ON (t1.dt = t2.dt) WHERE t2.dt = '2021-12-09'", + "VALUES ('a1', 'a1'), ('a2', 'a2'), ('a1', 'a2'), ('a2', 'a1')"); + + @Language("RegExp") String errorMessage = "Filter required on tests." + HUDI_COW_PT_TBL.getTableName() + " for at least one of the partition columns: dt, hh"; + // ON with partition column and WHERE with different left table's partition column + assertQueryFails(session, "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_COW_PT_TBL + " t2 ON (t1.dt = t2.dt) WHERE t1.hh = '10'", errorMessage); + // ON with partition column and WHERE with different right table's partition column + assertQueryFails(session, "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_COW_PT_TBL + " t2 ON (t1.dt = t2.dt) WHERE t2.hh = '10'", errorMessage); + // ON with partition column and WHERE with regular column + assertQueryFails(session, "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_COW_PT_TBL + " t2 ON (t1.dt = t2.dt) WHERE t2.id = 1", errorMessage); + + // ON with regular column + assertQueryFails(session, "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_COW_PT_TBL + " t2 ON (t1.id = t2.id)", errorMessage); + // ON with regular column and WHERE with regular column + assertQueryFails(session, "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_COW_PT_TBL + " t2 ON (t1.id = t2.id) WHERE t1.id = 1", errorMessage); + // ON with regular column and WHERE with left table's partition column + assertQueryFails(session, "SELECT t1.name, t2.name FROM " + HUDI_COW_PT_TBL + " t1 JOIN " + HUDI_COW_PT_TBL + " t2 ON (t1.id = t2.id) WHERE t1.dt = '2021-12-09'", errorMessage); + } + + @Test + public void testPartitionFilterRequiredWithLike() + { + Session session = withPartitionFilterRequired(getSession()); + assertQueryFails( + session, + "SELECT name FROM " + HUDI_COW_PT_TBL + " WHERE name LIKE '%1'", + "Filter required on tests." + HUDI_COW_PT_TBL.getTableName() + " for at least one of the partition columns: dt, hh"); + } + + @Test + public void testPartitionFilterRequiredFilterIncluded() + { + Session session = withPartitionFilterRequired(getSession()); + assertQuery(session, "SELECT name FROM " + HUDI_COW_PT_TBL + " WHERE hh = '10'", "VALUES 'a1'"); + assertQuery(session, "SELECT count(*) FROM " + HUDI_COW_PT_TBL + " WHERE hh < '12'", "VALUES 2"); + assertQuery(session, "SELECT count(*) FROM " + HUDI_COW_PT_TBL + " WHERE Hh < '11'", "VALUES 1"); + assertQuery(session, "SELECT count(*) FROM " + HUDI_COW_PT_TBL + " WHERE HH < '10'", "VALUES 0"); + assertQuery(session, "SELECT name FROM " + HUDI_COW_PT_TBL + " WHERE CAST(hh AS INTEGER) % 2 = 1 and hh IS NOT NULL", "VALUES 'a2'"); + assertQuery(session, "SELECT count(*) FROM " + HUDI_COW_PT_TBL + " WHERE hh IS NULL", "VALUES 0"); + assertQuery(session, "SELECT count(*) FROM " + HUDI_COW_PT_TBL + " WHERE hh IS NOT NULL", "VALUES 2"); + assertQuery(session, "SELECT name FROM " + HUDI_COW_PT_TBL + " WHERE hh LIKE '10'", "VALUES 'a1'"); + assertQuery(session, "SELECT name FROM " + HUDI_COW_PT_TBL + " WHERE hh LIKE '1%'", "VALUES 'a1', 'a2'"); + assertQuery(session, "SELECT name FROM " + HUDI_COW_PT_TBL + " WHERE id = 1 AND dt = '2021-12-09'", "VALUES 'a1'"); + assertQuery(session, "SELECT name FROM " + HUDI_COW_PT_TBL + " WHERE hh = '11' AND dt = '2021-12-09'", "VALUES 'a2'"); + assertQuery(session, "SELECT count(*) FROM " + HUDI_COW_PT_TBL + " WHERE hh = '12' AND dt = '2021-12-19'", "VALUES 0"); + + // Predicate which could not be translated into tuple domain + @Language("RegExp") String errorMessage = "Filter required on tests." + HUDI_COW_PT_TBL.getTableName() + " for at least one of the partition columns: dt, hh"; + assertQueryFails(session, "SELECT count(*) FROM " + HUDI_COW_PT_TBL + " WHERE CAST(hh AS INTEGER) % 2 = 0", errorMessage); + assertQueryFails(session, "SELECT count(*) FROM " + HUDI_COW_PT_TBL + " WHERE CAST(hh AS INTEGER) - 11 = 0", errorMessage); + assertQueryFails(session, "SELECT count(*) FROM " + HUDI_COW_PT_TBL + " WHERE CAST(hh AS INTEGER) * 2 = 20", errorMessage); + assertQueryFails(session, "SELECT count(*) FROM " + HUDI_COW_PT_TBL + " WHERE CAST(hh AS INTEGER) % 2 > 0", errorMessage); + assertQueryFails(session, "SELECT count(*) FROM " + HUDI_COW_PT_TBL + " WHERE name LIKE '%1' OR hh LIKE '%1'", errorMessage); + assertQueryFails(session, "SELECT count(*) FROM " + HUDI_COW_PT_TBL + " WHERE name LIKE '%1' AND hh LIKE '%0'", errorMessage); + assertQueryFails(session, "SELECT count(*) FROM " + HUDI_COW_PT_TBL + " WHERE id = 1 OR dt = '2021-12-09'", errorMessage); + assertQueryFails(session, "SELECT count(*) FROM " + HUDI_COW_PT_TBL + " WHERE hh = '11' OR dt = '2021-12-09'", errorMessage); + assertQueryFails(session, "SELECT count(*) FROM " + HUDI_COW_PT_TBL + " WHERE hh = '12' OR dt = '2021-12-19'", errorMessage); + assertQueryFails(session, "SELECT count(*) AS COUNT FROM " + HUDI_COW_PT_TBL + " WHERE CAST(hh AS INTEGER) > 2 GROUP BY name ", errorMessage); + } + + private static Session withPartitionFilterRequired(Session session) + { + return Session.builder(session) + .setCatalogSessionProperty(session.getCatalog().orElseThrow(), "query_partition_filter_required", "true") + .build(); + } + + private TrinoInputFile toInputFile(String path) + { + return ((HudiConnector) getDistributedQueryRunner().getCoordinator().getConnector("hudi")).getInjector() + .getInstance(TrinoFileSystemFactory.class) + .create(ConnectorIdentity.ofUser("test")) + .newInputFile(Location.of(path)); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSystemTables.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSystemTables.java new file mode 100644 index 0000000000000..1bca5dfaa0dfe --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSystemTables.java @@ -0,0 +1,61 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer; +import io.trino.testing.AbstractTestQueryFramework; +import io.trino.testing.QueryRunner; +import org.junit.jupiter.api.Test; + +public class TestHudiSystemTables + extends AbstractTestQueryFramework +{ + @Override + protected QueryRunner createQueryRunner() + throws Exception + { + return HudiQueryRunner.builder() + .setDataLoader(new ResourceHudiTablesInitializer()) + .build(); + } + + @Test + public void testTimelineTable() + { + assertQuery("SHOW COLUMNS FROM tests.\"hudi_cow_pt_tbl$timeline\"", + "VALUES ('timestamp', 'varchar', '', '')," + + "('action', 'varchar', '', '')," + + "('state', 'varchar', '', '')"); + + assertQuery("SELECT timestamp, action, state FROM tests.\"hudi_cow_pt_tbl$timeline\"", + "VALUES ('20220906063435640', 'commit', 'COMPLETED'), ('20220906063456550', 'commit', 'COMPLETED')"); + + assertQueryFails("SELECT timestamp, action, state FROM tests.\"non_existing$timeline\"", + ".*Table 'hudi.tests.\"non_existing\\$timeline\"' does not exist"); + } + + @Test + public void testDataTable() + { + assertQueryFails("SELECT * FROM tests.\"hudi_cow_pt_tbl$data\"", + ".*Table 'hudi.tests.\"hudi_cow_pt_tbl\\$data\"' does not exist"); + } + + @Test + public void testInvalidTable() + { + assertQueryFails("SELECT * FROM tests.\"hudi_cow_pt_tbl$invalid\"", + ".*Table 'hudi.tests.\"hudi_cow_pt_tbl\\$invalid\"' does not exist"); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestingHudiConnectorFactory.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestingHudiConnectorFactory.java new file mode 100644 index 0000000000000..de804a9acd258 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestingHudiConnectorFactory.java @@ -0,0 +1,64 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableMap; +import io.trino.filesystem.TrinoFileSystemFactory; +import io.trino.filesystem.local.LocalFileSystemFactory; +import io.trino.plugin.hive.metastore.file.FileHiveMetastoreConfig; +import io.trino.spi.connector.Connector; +import io.trino.spi.connector.ConnectorContext; +import io.trino.spi.connector.ConnectorFactory; + +import java.nio.file.Path; +import java.util.Map; +import java.util.Optional; + +import static com.google.inject.multibindings.MapBinder.newMapBinder; +import static io.airlift.configuration.ConfigBinder.configBinder; +import static io.trino.plugin.hudi.HudiConnectorFactory.createConnector; + +public class TestingHudiConnectorFactory + implements ConnectorFactory +{ + private final Path localFileSystemRootPath; + + public TestingHudiConnectorFactory(Path localFileSystemRootPath) + { + localFileSystemRootPath.toFile().mkdirs(); + this.localFileSystemRootPath = localFileSystemRootPath; + } + + @Override + public String getName() + { + return "hudi"; + } + + @Override + public Connector create(String catalogName, Map config, ConnectorContext context) + { + ImmutableMap.Builder configBuilder = ImmutableMap.builder() + .putAll(config) + .put("bootstrap.quiet", "true"); + if (!config.containsKey("hive.metastore")) { + configBuilder.put("hive.metastore", "file"); + } + return createConnector(catalogName, configBuilder.buildOrThrow(), context, Optional.of(binder -> { + newMapBinder(binder, String.class, TrinoFileSystemFactory.class) + .addBinding("local").toInstance(new LocalFileSystemFactory(localFileSystemRootPath)); + configBinder(binder).bindConfigDefaults(FileHiveMetastoreConfig.class, metastoreConfig -> metastoreConfig.setCatalogDirectory("local:///managed/")); + })); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestingHudiPlugin.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestingHudiPlugin.java new file mode 100644 index 0000000000000..02744377e2dad --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestingHudiPlugin.java @@ -0,0 +1,43 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableList; +import io.trino.spi.connector.ConnectorFactory; + +import java.nio.file.Path; +import java.util.List; + +import static com.google.common.base.Verify.verify; +import static java.util.Objects.requireNonNull; + +public class TestingHudiPlugin + extends HudiPlugin +{ + private final Path localFileSystemRootPath; + + public TestingHudiPlugin(Path localFileSystemRootPath) + { + this.localFileSystemRootPath = requireNonNull(localFileSystemRootPath, "localFileSystemRootPath is null"); + } + + @Override + public Iterable getConnectorFactories() + { + List connectorFactories = ImmutableList.copyOf(super.getConnectorFactories()); + verify(connectorFactories.size() == 1, "Unexpected connector factories: %s", connectorFactories); + + return ImmutableList.of(new TestingHudiConnectorFactory(localFileSystemRootPath)); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoHudiStorage.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoHudiStorage.java new file mode 100644 index 0000000000000..ae5f98bccfa03 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoHudiStorage.java @@ -0,0 +1,304 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.storage; + +import com.google.common.collect.ImmutableList; +import io.trino.filesystem.TrinoFileSystem; +import io.trino.filesystem.local.LocalFileSystemFactory; +import io.trino.spi.block.TestingSession; +import org.apache.hudi.common.util.Option; +import org.apache.hudi.io.storage.TestHoodieStorageBase; +import org.apache.hudi.io.util.IOUtils; +import org.apache.hudi.storage.HoodieStorage; +import org.apache.hudi.storage.StoragePath; +import org.apache.hudi.storage.StoragePathInfo; +import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Test; + +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URI; +import java.net.URISyntaxException; +import java.nio.file.Path; +import java.util.Comparator; +import java.util.List; + +import static com.google.common.collect.ImmutableList.toImmutableList; +import static org.apache.hudi.storage.HoodieInstantWriter.convertByteArrayToWriter; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +final class TestTrinoHudiStorage + extends TestHoodieStorageBase +{ + private static final byte[] EMPTY_BYTES = new byte[] {}; + + private static TrinoFileSystem fileSystem; + + @BeforeAll + static void setUp() + { + fileSystem = new LocalFileSystemFactory(Path.of("/tmp")) + .create(TestingSession.SESSION); + } + + @Override + protected HoodieStorage getStorage(Object fileSystem, Object config) + { + return new TrinoHudiStorage((TrinoFileSystem) fileSystem, (TrinoStorageConfiguration) config); + } + + @Override + protected TrinoFileSystem getFileSystem(Object config) + { + return fileSystem; + } + + @Override + protected TrinoStorageConfiguration getConf() + { + return new TrinoStorageConfiguration(); + } + + @Override + protected String getTempDir() + { + // As the LocalFileSystemFactory is used, the path should have "local:" as the scheme + return "local:" + this.tempDir.toUri().getPath(); + } + + @Override + @Test + public void testGetUri() + throws URISyntaxException + { + assertThat(getStorage().getUri()).isEqualTo(new URI("")); + } + + // This test is overridden since TrinoHudiStorage does not support globEntries, + // as it is not used in the Trino Hudi connector + @Override + @Test + public void testListing() + throws IOException + { + HoodieStorage storage = getStorage(); + // Full list: + // w/1.file + // w/2.file + // x/1.file + // x/2.file + // x/y/1.file + // x/y/2.file + // x/z/1.file + // x/z/2.file + prepareFilesOnStorage(storage); + + validatePathInfoList( + storage.listDirectEntries(new StoragePath(getTempDir(), "x")), + ImmutableList.builder() + .add(getStoragePathInfo("x/1.file", false)) + .add(getStoragePathInfo("x/2.file", false)) + .add(getStoragePathInfo("x/y", true)) + .add(getStoragePathInfo("x/z", true)) + .build()); + + validatePathInfoList( + storage.listFiles(new StoragePath(getTempDir(), "x")), + ImmutableList.builder() + .add(getStoragePathInfo("x/1.file", false)) + .add(getStoragePathInfo("x/2.file", false)) + .add(getStoragePathInfo("x/y/1.file", false)) + .add(getStoragePathInfo("x/y/2.file", false)) + .add(getStoragePathInfo("x/z/1.file", false)) + .add(getStoragePathInfo("x/z/2.file", false)) + .build()); + + validatePathInfoList( + storage.listDirectEntries( + new StoragePath(getTempDir(), "x"), e -> e.getName().contains("2")), + ImmutableList.builder() + .add(getStoragePathInfo("x/2.file", false)) + .build()); + + validatePathInfoList( + storage.listDirectEntries(ImmutableList.builder() + .add(new StoragePath(getTempDir(), "w")) + .add(new StoragePath(getTempDir(), "x/z")) + .build()), + ImmutableList.builder() + .add(getStoragePathInfo("w/1.file", false)) + .add(getStoragePathInfo("w/2.file", false)) + .add(getStoragePathInfo("x/z/1.file", false)) + .add(getStoragePathInfo("x/z/2.file", false)) + .build()); + + assertThatThrownBy( + () -> storage.listDirectEntries(new StoragePath(getTempDir(), "*"))) + .isInstanceOf(FileNotFoundException.class); + + // TrinoHudiStorage does not support globEntries, as it is not used + // in the Trino Hudi connector + assertThatThrownBy( + () -> storage.globEntries(new StoragePath(getTempDir(), "x/*/1.file"))) + .isInstanceOf(UnsupportedOperationException.class); + } + + // This test is overridden since TrinoHudiStorage always returns true for deletion, + // because TrinoFileSystem does not indicate whether the file to delete exists or not + @Override + @Test + public void testDelete() + throws IOException + { + HoodieStorage storage = getStorage(); + + StoragePath path = new StoragePath(getTempDir(), "testDelete/1.file"); + assertThat(storage.exists(path)).isFalse(); + storage.create(path).close(); + assertThat(storage.exists(path)).isTrue(); + + assertThat(storage.deleteFile(path)).isTrue(); + assertThat(storage.exists(path)).isFalse(); + // TrinoFileSystem does not indicate whether the file to delete exists or not + assertThat(storage.deleteFile(path)).isTrue(); + + StoragePath path2 = new StoragePath(getTempDir(), "testDelete/2"); + assertThat(storage.exists(path2)).isFalse(); + assertThat(storage.createDirectory(path2)).isTrue(); + assertThat(storage.exists(path2)).isTrue(); + + assertThat(storage.deleteDirectory(path2)).isTrue(); + assertThat(storage.exists(path2)).isFalse(); + // TrinoFileSystem does not indicate whether the directory to delete exists or not + assertThat(storage.deleteDirectory(path2)).isTrue(); + } + + // This test is overridden because TrinoFileSystem does not overwrite the file with + // #create so the test logic has to be adapted (not that this behavior does not affect + // product code logic in Trino Hudi connector as it's read-only) + @Override + @Test + public void testCreateWriteAndRead() + throws IOException + { + HoodieStorage storage = getStorage(); + + StoragePath path = new StoragePath(getTempDir(), "testCreateAppendAndRead/1.file"); + assertThat(storage.exists(path)).isFalse(); + storage.create(path).close(); + validatePathInfo(storage, path, EMPTY_BYTES, false); + storage.deleteFile(path); + + byte[] data = new byte[] {2, 42, 49, (byte) 158, (byte) 233, 66, 9}; + + try (OutputStream stream = storage.create(path)) { + stream.write(data); + stream.flush(); + } + validatePathInfo(storage, path, data, false); + + assertThatThrownBy(() -> storage.create(path, false)) + .isInstanceOf(IOException.class); + validatePathInfo(storage, path, data, false); + + assertThatThrownBy(() -> storage.create(path, false)) + .isInstanceOf(IOException.class); + validatePathInfo(storage, path, data, false); + + StoragePath path2 = new StoragePath(getTempDir(), "testCreateAppendAndRead/2.file"); + assertThat(storage.exists(path2)).isFalse(); + assertThat(storage.createNewFile(path2)).isTrue(); + validatePathInfo(storage, path2, EMPTY_BYTES, false); + assertThat(storage.createNewFile(path2)).isFalse(); + + StoragePath path3 = new StoragePath(getTempDir(), "testCreateAppendAndRead/3.file"); + assertThat(storage.exists(path3)).isFalse(); + storage.createImmutableFileInPath(path3, Option.of(convertByteArrayToWriter(data))); + validatePathInfo(storage, path3, data, false); + + StoragePath path4 = new StoragePath(getTempDir(), "testCreateAppendAndRead/4"); + assertThat(storage.exists(path4)).isFalse(); + assertThat(storage.createDirectory(path4)).isTrue(); + validatePathInfo(storage, path4, EMPTY_BYTES, true); + assertThat(storage.createDirectory(path4)).isTrue(); + } + + private HoodieStorage getStorage() + { + Object config = getConf(); + return getStorage(getFileSystem(config), config); + } + + private StoragePathInfo getStoragePathInfo(String subPath, boolean isDirectory) + { + return new StoragePathInfo(new StoragePath(getTempDir(), subPath), + 0, isDirectory, (short) 1, 1000000L, 10L); + } + + private static void validatePathInfo( + HoodieStorage storage, + StoragePath path, + byte[] data, + boolean isDirectory) + throws IOException + { + assertThat(storage.exists(path)).isTrue(); + StoragePathInfo pathInfo = storage.getPathInfo(path); + assertThat(pathInfo.getPath()).isEqualTo(path); + assertThat(pathInfo.isDirectory()).isEqualTo(isDirectory); + assertThat(pathInfo.isFile()).isEqualTo(!isDirectory); + if (!isDirectory) { + assertThat(pathInfo.getLength()).isEqualTo(data.length); + try (InputStream stream = storage.open(path)) { + assertThat(IOUtils.readAsByteArray(stream, data.length)).isEqualTo(data); + } + assertThat(pathInfo.getModificationTime()).isGreaterThan(0); + } + } + + private static void validatePathInfoList( + List actual, + List expected) + { + assertThat(actual).hasSize(expected.size()); + List sortedExpected = expected.stream() + .sorted(Comparator.comparing(StoragePathInfo::getPath)) + .collect(toImmutableList()); + List sortedActual = actual.stream() + .sorted(Comparator.comparing(StoragePathInfo::getPath)) + .collect(toImmutableList()); + for (int i = 0; i < expected.size(); i++) { + // We cannot use StoragePathInfo#equals as that only compares the path + assertThat(sortedActual.get(i).getPath()).isEqualTo(sortedExpected.get(i).getPath()); + assertThat(sortedActual.get(i).isDirectory()).isEqualTo(sortedExpected.get(i).isDirectory()); + assertThat(sortedActual.get(i).isFile()).isEqualTo(sortedExpected.get(i).isFile()); + if (sortedExpected.get(i).isFile()) { + assertThat(sortedActual.get(i).getLength()).isEqualTo(sortedExpected.get(i).getLength()); + } + assertThat(sortedActual.get(i).getModificationTime()).isGreaterThan(0); + } + } + + private void prepareFilesOnStorage(HoodieStorage storage) + throws IOException + { + String directory = getTempDir(); + for (String relativePath : RELATIVE_FILE_PATHS) { + storage.create(new StoragePath(directory, relativePath)).close(); + } + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoStorageConfiguration.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoStorageConfiguration.java new file mode 100644 index 0000000000000..0304e4459ad64 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoStorageConfiguration.java @@ -0,0 +1,51 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.storage; + +import org.apache.hudi.io.storage.BaseTestStorageConfiguration; +import org.junit.jupiter.api.Test; + +import java.util.HashMap; +import java.util.Map; + +import static org.apache.hudi.common.config.HoodieStorageConfig.HOODIE_IO_FACTORY_CLASS; +import static org.apache.hudi.common.config.HoodieStorageConfig.HOODIE_STORAGE_CLASS; +import static org.assertj.core.api.Assertions.assertThat; + +final class TestTrinoStorageConfiguration + extends BaseTestStorageConfiguration> +{ + @Override + protected TrinoStorageConfiguration getStorageConfiguration(Map config) + { + return new TrinoStorageConfiguration(config); + } + + @Override + protected Map getConf(Map config) + { + return config; + } + + @Test + void testConfigOverrides() + { + String overriddenClassName = "NewIoFactoryClass"; + Map providedConfig = new HashMap<>(); + providedConfig.put(HOODIE_IO_FACTORY_CLASS.key(), overriddenClassName); + TrinoStorageConfiguration config = getStorageConfiguration(providedConfig); + assertThat(config.getString(HOODIE_IO_FACTORY_CLASS.key()).get()).isEqualTo(overriddenClassName); + assertThat(config.getString(HOODIE_STORAGE_CLASS.key()).get()).isEqualTo(TrinoHudiStorage.class.getName()); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/HudiTablesInitializer.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/HudiTablesInitializer.java new file mode 100644 index 0000000000000..4c8788c40e283 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/HudiTablesInitializer.java @@ -0,0 +1,23 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.testing; + +import io.trino.filesystem.Location; +import io.trino.testing.QueryRunner; + +public interface HudiTablesInitializer +{ + void initializeTables(QueryRunner queryRunner, Location externalLocation, String schemaName) + throws Exception; +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/HudiTestUtils.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/HudiTestUtils.java new file mode 100644 index 0000000000000..26d8d663237db --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/HudiTestUtils.java @@ -0,0 +1,29 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.testing; + +import com.google.common.collect.ImmutableList; + +import static io.trino.plugin.hudi.testing.TpchHudiTablesInitializer.FIELD_UUID; +import static org.apache.hudi.common.model.HoodieRecord.HOODIE_META_COLUMNS; + +public final class HudiTestUtils +{ + private HudiTestUtils() {} + + public static final String COLUMNS_TO_HIDE = String.join(",", ImmutableList.builder() + .addAll(HOODIE_META_COLUMNS) + .add(FIELD_UUID) + .build()); +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/ResourceHudiTablesInitializer.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/ResourceHudiTablesInitializer.java new file mode 100644 index 0000000000000..55d7c78b22fbf --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/ResourceHudiTablesInitializer.java @@ -0,0 +1,279 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.testing; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import io.trino.filesystem.Location; +import io.trino.filesystem.TrinoFileSystem; +import io.trino.filesystem.TrinoFileSystemFactory; +import io.trino.metastore.Column; +import io.trino.metastore.HiveMetastore; +import io.trino.metastore.HiveMetastoreFactory; +import io.trino.metastore.HiveType; +import io.trino.metastore.Partition; +import io.trino.metastore.PartitionStatistics; +import io.trino.metastore.PartitionWithStatistics; +import io.trino.metastore.PrincipalPrivileges; +import io.trino.metastore.StorageFormat; +import io.trino.metastore.Table; +import io.trino.plugin.hudi.HudiConnector; +import io.trino.spi.security.ConnectorIdentity; +import io.trino.testing.QueryRunner; + +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static com.google.common.io.Resources.getResource; +import static io.trino.hive.formats.HiveClassNames.HUDI_PARQUET_INPUT_FORMAT; +import static io.trino.hive.formats.HiveClassNames.MAPRED_PARQUET_OUTPUT_FORMAT_CLASS; +import static io.trino.hive.formats.HiveClassNames.PARQUET_HIVE_SERDE_CLASS; +import static io.trino.metastore.HiveType.HIVE_DOUBLE; +import static io.trino.metastore.HiveType.HIVE_INT; +import static io.trino.metastore.HiveType.HIVE_LONG; +import static io.trino.metastore.HiveType.HIVE_STRING; +import static io.trino.plugin.hive.HivePartitionManager.extractPartitionValues; +import static io.trino.plugin.hive.TableType.EXTERNAL_TABLE; + +public class ResourceHudiTablesInitializer + implements HudiTablesInitializer +{ + @Override + public void initializeTables(QueryRunner queryRunner, Location externalLocation, String schemaName) + throws Exception + { + TrinoFileSystem fileSystem = ((HudiConnector) queryRunner.getCoordinator().getConnector("hudi")).getInjector() + .getInstance(TrinoFileSystemFactory.class) + .create(ConnectorIdentity.ofUser("test")); + Location baseLocation = externalLocation.appendSuffix(schemaName); + copyDir(new File(getResource("hudi-testing-data").toURI()).toPath(), fileSystem, baseLocation); + + for (TestingTable table : TestingTable.values()) { + String tableName = table.getTableName(); + Location tablePath = baseLocation.appendPath(tableName); + createTable( + queryRunner, + schemaName, + tablePath, + tableName, + table.getDataColumns(), + table.getPartitionColumns(), + table.getPartitions()); + } + } + + private void createTable( + QueryRunner queryRunner, + String schemaName, + Location tablePath, + String tableName, + List dataColumns, + List partitionColumns, + Map partitions) + { + StorageFormat storageFormat = StorageFormat.create( + PARQUET_HIVE_SERDE_CLASS, + HUDI_PARQUET_INPUT_FORMAT, + MAPRED_PARQUET_OUTPUT_FORMAT_CLASS); + + Table table = Table.builder() + .setDatabaseName(schemaName) + .setTableName(tableName) + .setTableType(EXTERNAL_TABLE.name()) + .setOwner(Optional.of("public")) + .setDataColumns(dataColumns) + .setPartitionColumns(partitionColumns) + .setParameters(ImmutableMap.of("serialization.format", "1", "EXTERNAL", "TRUE")) + .withStorage(storageBuilder -> storageBuilder + .setStorageFormat(storageFormat) + .setLocation(tablePath.toString())) + .build(); + HiveMetastore metastore = ((HudiConnector) queryRunner.getCoordinator().getConnector("hudi")).getInjector() + .getInstance(HiveMetastoreFactory.class) + .createMetastore(Optional.empty()); + metastore.createTable(table, PrincipalPrivileges.NO_PRIVILEGES); + + List partitionsToAdd = new ArrayList<>(); + partitions.forEach((partitionName, partitionPath) -> { + Partition partition = Partition.builder() + .setDatabaseName(schemaName) + .setTableName(tableName) + .setValues(extractPartitionValues(partitionName)) + .withStorage(storageBuilder -> storageBuilder + .setStorageFormat(storageFormat) + .setLocation(tablePath.appendPath(partitionPath).toString())) + .setColumns(dataColumns) + .build(); + partitionsToAdd.add(new PartitionWithStatistics(partition, partitionName, PartitionStatistics.empty())); + }); + metastore.addPartitions(schemaName, tableName, partitionsToAdd); + } + + private static Column column(String name, HiveType type) + { + return new Column(name, type, Optional.empty(), Map.of()); + } + + public static void copyDir(Path sourceDirectory, TrinoFileSystem fileSystem, Location destinationDirectory) + throws IOException + { + try (Stream paths = Files.walk(sourceDirectory)) { + for (Iterator iterator = paths.iterator(); iterator.hasNext(); ) { + Path path = iterator.next(); + if (path.toFile().isDirectory()) { + continue; + } + + // hudi blows up if crc files are present + if (path.toString().endsWith(".crc")) { + continue; + } + + Location location = destinationDirectory.appendPath(sourceDirectory.relativize(path).toString()); + fileSystem.createDirectory(location.parentDirectory()); + try (OutputStream out = fileSystem.newOutputFile(location).create()) { + Files.copy(path, out); + } + } + } + } + + public enum TestingTable + { + HUDI_NON_PART_COW(nonPartitionRegularColumns()), + HUDI_COW_PT_TBL(multiPartitionRegularColumns(), multiPartitionColumns(), multiPartitions()), + STOCK_TICKS_COW(stockTicksRegularColumns(), stockTicksPartitionColumns(), stockTicksPartitions()), + STOCK_TICKS_MOR(stockTicksRegularColumns(), stockTicksPartitionColumns(), stockTicksPartitions()), + /**/; + + private static final List HUDI_META_COLUMNS = ImmutableList.of( + new Column("_hoodie_commit_time", HIVE_STRING, Optional.empty(), Map.of()), + new Column("_hoodie_commit_seqno", HIVE_STRING, Optional.empty(), Map.of()), + new Column("_hoodie_record_key", HIVE_STRING, Optional.empty(), Map.of()), + new Column("_hoodie_partition_path", HIVE_STRING, Optional.empty(), Map.of()), + new Column("_hoodie_file_name", HIVE_STRING, Optional.empty(), Map.of())); + + private final List regularColumns; + private final List partitionColumns; + private final Map partitions; + + TestingTable( + List regularColumns, + List partitionColumns, + Map partitions) + { + this.regularColumns = regularColumns; + this.partitionColumns = partitionColumns; + this.partitions = partitions; + } + + TestingTable(List regularColumns) + { + this(regularColumns, ImmutableList.of(), ImmutableMap.of()); + } + + public String getTableName() + { + return name().toLowerCase(Locale.ROOT); + } + + public List getDataColumns() + { + return Stream.of(HUDI_META_COLUMNS, regularColumns) + .flatMap(Collection::stream) + .collect(Collectors.toUnmodifiableList()); + } + + public List getPartitionColumns() + { + return partitionColumns; + } + + public Map getPartitions() + { + return partitions; + } + + private static List nonPartitionRegularColumns() + { + return ImmutableList.of( + column("id", HIVE_LONG), + column("name", HIVE_STRING), + column("ts", HIVE_LONG), + column("dt", HIVE_STRING), + column("hh", HIVE_STRING)); + } + + private static List stockTicksRegularColumns() + { + return ImmutableList.of( + column("volume", HIVE_LONG), + column("ts", HIVE_STRING), + column("symbol", HIVE_STRING), + column("year", HIVE_INT), + column("month", HIVE_STRING), + column("high", HIVE_DOUBLE), + column("low", HIVE_DOUBLE), + column("key", HIVE_STRING), + column("date", HIVE_STRING), + column("close", HIVE_DOUBLE), + column("open", HIVE_DOUBLE), + column("day", HIVE_STRING)); + } + + private static List stockTicksPartitionColumns() + { + return ImmutableList.of(column("dt", HIVE_STRING)); + } + + private static Map stockTicksPartitions() + { + return ImmutableMap.of("dt=2018-08-31", "2018/08/31"); + } + + private static List multiPartitionRegularColumns() + { + return ImmutableList.of( + column("id", HIVE_LONG), + column("name", HIVE_STRING), + column("ts", HIVE_LONG)); + } + + private static List multiPartitionColumns() + { + return ImmutableList.of( + column("dt", HIVE_STRING), + column("hh", HIVE_STRING)); + } + + private static Map multiPartitions() + { + return ImmutableMap.of( + "dt=2021-12-09/hh=10", "dt=2021-12-09/hh=10", + "dt=2021-12-09/hh=11", "dt=2021-12-09/hh=11"); + } + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TpchHudiTablesInitializer.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TpchHudiTablesInitializer.java new file mode 100644 index 0000000000000..d5093550e0946 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TpchHudiTablesInitializer.java @@ -0,0 +1,397 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.testing; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import io.airlift.log.Logger; +import io.trino.filesystem.Location; +import io.trino.filesystem.TrinoFileSystem; +import io.trino.filesystem.TrinoFileSystemFactory; +import io.trino.hdfs.HdfsContext; +import io.trino.hdfs.HdfsEnvironment; +import io.trino.metastore.Column; +import io.trino.metastore.HiveMetastore; +import io.trino.metastore.HiveMetastoreFactory; +import io.trino.metastore.HiveType; +import io.trino.metastore.PrincipalPrivileges; +import io.trino.metastore.StorageFormat; +import io.trino.metastore.Table; +import io.trino.plugin.hudi.HudiConnector; +import io.trino.plugin.tpch.TpchPlugin; +import io.trino.spi.connector.CatalogSchemaName; +import io.trino.spi.security.ConnectorIdentity; +import io.trino.testing.MaterializedResult; +import io.trino.testing.MaterializedRow; +import io.trino.testing.QueryRunner; +import io.trino.tpch.TpchColumn; +import io.trino.tpch.TpchColumnType; +import io.trino.tpch.TpchColumnTypes; +import io.trino.tpch.TpchTable; +import org.apache.avro.Schema; +import org.apache.avro.generic.GenericData; +import org.apache.avro.generic.GenericRecord; +import org.apache.hadoop.fs.Path; +import org.apache.hudi.client.HoodieJavaWriteClient; +import org.apache.hudi.client.common.HoodieJavaEngineContext; +import org.apache.hudi.common.bootstrap.index.NoOpBootstrapIndex; +import org.apache.hudi.common.config.HoodieMetadataConfig; +import org.apache.hudi.common.model.HoodieAvroPayload; +import org.apache.hudi.common.model.HoodieAvroRecord; +import org.apache.hudi.common.model.HoodieKey; +import org.apache.hudi.common.model.HoodieRecord; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.common.table.HoodieTableVersion; +import org.apache.hudi.common.table.marker.MarkerType; +import org.apache.hudi.common.util.Option; +import org.apache.hudi.config.HoodieArchivalConfig; +import org.apache.hudi.config.HoodieIndexConfig; +import org.apache.hudi.config.HoodieWriteConfig; +import org.apache.hudi.index.HoodieIndex; +import org.apache.hudi.storage.StorageConfiguration; +import org.apache.hudi.storage.hadoop.HadoopStorageConfiguration; +import org.intellij.lang.annotations.Language; + +import java.io.IOException; +import java.time.LocalDate; +import java.time.temporal.ChronoField; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Verify.verify; +import static com.google.common.io.MoreFiles.deleteRecursively; +import static com.google.common.io.RecursiveDeleteOption.ALLOW_INSECURE; +import static io.trino.hive.formats.HiveClassNames.HUDI_PARQUET_INPUT_FORMAT; +import static io.trino.hive.formats.HiveClassNames.MAPRED_PARQUET_OUTPUT_FORMAT_CLASS; +import static io.trino.hive.formats.HiveClassNames.PARQUET_HIVE_SERDE_CLASS; +import static io.trino.metastore.HiveType.HIVE_DATE; +import static io.trino.metastore.HiveType.HIVE_DOUBLE; +import static io.trino.metastore.HiveType.HIVE_INT; +import static io.trino.metastore.HiveType.HIVE_LONG; +import static io.trino.metastore.HiveType.HIVE_STRING; +import static io.trino.plugin.hive.HiveTestUtils.HDFS_ENVIRONMENT; +import static io.trino.plugin.hive.TableType.EXTERNAL_TABLE; +import static io.trino.testing.TestingConnectorSession.SESSION; +import static java.lang.String.format; +import static java.nio.file.Files.createTempDirectory; +import static java.util.Collections.unmodifiableList; +import static java.util.Objects.requireNonNull; +import static org.apache.hudi.common.model.HoodieTableType.COPY_ON_WRITE; + +public class TpchHudiTablesInitializer + implements HudiTablesInitializer +{ + public static final String FIELD_UUID = "_uuid"; + private static final CatalogSchemaName TPCH_TINY = new CatalogSchemaName("tpch", "tiny"); + private static final String PARTITION_PATH = ""; + private static final Logger log = Logger.get(TpchHudiTablesInitializer.class); + private static final List HUDI_META_COLUMNS = ImmutableList.of( + new Column("_hoodie_commit_time", HIVE_STRING, Optional.empty(), Map.of()), + new Column("_hoodie_commit_seqno", HIVE_STRING, Optional.empty(), Map.of()), + new Column("_hoodie_record_key", HIVE_STRING, Optional.empty(), Map.of()), + new Column("_hoodie_partition_path", HIVE_STRING, Optional.empty(), Map.of()), + new Column("_hoodie_file_name", HIVE_STRING, Optional.empty(), Map.of())); + private static final HdfsContext CONTEXT = new HdfsContext(SESSION); + + private final List> tpchTables; + + public TpchHudiTablesInitializer(List> tpchTables) + { + this.tpchTables = requireNonNull(tpchTables, "tpchTables is null"); + } + + @Override + public void initializeTables(QueryRunner queryRunner, Location externalLocation, String schemaName) + throws Exception + { + queryRunner.installPlugin(new TpchPlugin()); + queryRunner.createCatalog(TPCH_TINY.getCatalogName(), "tpch", ImmutableMap.of()); + TrinoFileSystem fileSystem = ((HudiConnector) queryRunner.getCoordinator().getConnector("hudi")).getInjector() + .getInstance(TrinoFileSystemFactory.class) + .create(ConnectorIdentity.ofUser("test")); + HiveMetastore metastore = ((HudiConnector) queryRunner.getCoordinator().getConnector("hudi")).getInjector() + .getInstance(HiveMetastoreFactory.class) + .createMetastore(Optional.empty()); + + Location dataLocation = externalLocation.appendPath("tpch"); + + java.nio.file.Path tempDir = createTempDirectory("test"); + try { + for (TpchTable tpchTable : tpchTables) { + java.nio.file.Path tempTableDir = tempDir.resolve(tpchTable.getTableName()); + load(tpchTable, queryRunner, tempTableDir); + + Location tableLocation = dataLocation.appendPath(tpchTable.getTableName()); + ResourceHudiTablesInitializer.copyDir(tempTableDir, fileSystem, tableLocation); + + Table table = createTableDefinition(schemaName, tpchTable, tableLocation); + metastore.createTable(table, PrincipalPrivileges.NO_PRIVILEGES); + } + } + finally { + deleteRecursively(tempDir, ALLOW_INSECURE); + } + } + + public void load(TpchTable tpchTables, QueryRunner queryRunner, java.nio.file.Path tableDirectory) + { + try (HoodieJavaWriteClient writeClient = createWriteClient(tpchTables, HDFS_ENVIRONMENT, new Path(tableDirectory.toUri()))) { + RecordConverter recordConverter = createRecordConverter(tpchTables); + + @Language("SQL") String sql = generateScanSql(TPCH_TINY, tpchTables); + log.info("Executing %s", sql); + MaterializedResult result = queryRunner.execute(sql); + + List> records = result.getMaterializedRows() + .stream() + .map(MaterializedRow::getFields) + .map(recordConverter::toRecord) + .collect(Collectors.toList()); + String timestamp = "0"; + writeClient.startCommitWithTime(timestamp); + writeClient.insert(records, timestamp); + } + } + + private static String generateScanSql(CatalogSchemaName catalogSchemaName, TpchTable table) + { + StringBuilder builder = new StringBuilder(); + builder.append("SELECT "); + String columnList = table.getColumns() + .stream() + .map(c -> quote(c.getSimplifiedColumnName())) + .collect(Collectors.joining(", ")); + builder.append(columnList); + String tableName = format("%s.%s", catalogSchemaName.toString(), table.getTableName()); + builder.append(" FROM ").append(tableName); + return builder.toString(); + } + + private static Table createTableDefinition(String schemaName, TpchTable table, Location location) + { + List columns = Stream.of(HUDI_META_COLUMNS, createMetastoreColumns(table)) + .flatMap(Collection::stream) + .toList(); + StorageFormat storageFormat = StorageFormat.create( + PARQUET_HIVE_SERDE_CLASS, + HUDI_PARQUET_INPUT_FORMAT, + MAPRED_PARQUET_OUTPUT_FORMAT_CLASS); + + return Table.builder() + .setDatabaseName(schemaName) + .setTableName(table.getTableName()) + .setTableType(EXTERNAL_TABLE.name()) + .setOwner(Optional.of("public")) + .setDataColumns(columns) + .setParameters(ImmutableMap.of("serialization.format", "1", "EXTERNAL", "TRUE")) + .withStorage(storageBuilder -> storageBuilder + .setStorageFormat(storageFormat) + .setLocation(location.toString())) + .build(); + } + + private static HoodieJavaWriteClient createWriteClient(TpchTable table, HdfsEnvironment hdfsEnvironment, Path tablePath) + { + Schema schema = createAvroSchema(table); + StorageConfiguration conf = new HadoopStorageConfiguration(hdfsEnvironment.getConfiguration(CONTEXT, tablePath)); + + try { + HoodieTableMetaClient.newTableBuilder() + .setTableType(COPY_ON_WRITE) + .setTableName(table.getTableName()) + .setTableVersion(HoodieTableVersion.SIX) + .setBootstrapIndexClass(NoOpBootstrapIndex.class.getName()) + .setPayloadClassName(HoodieAvroPayload.class.getName()) + .setRecordKeyFields(FIELD_UUID) + .initTable(conf, tablePath.toString()); + } + catch (IOException e) { + throw new RuntimeException("Could not init table " + table.getTableName(), e); + } + + HoodieIndexConfig indexConfig = HoodieIndexConfig.newBuilder().withIndexType(HoodieIndex.IndexType.INMEMORY).build(); + HoodieArchivalConfig archivalConfig = HoodieArchivalConfig.newBuilder().archiveCommitsWith(20, 30).build(); + HoodieWriteConfig cfg = HoodieWriteConfig.newBuilder() + .withPath(tablePath.toString()) + .withSchema(schema.toString()) + .withParallelism(2, 2) + .withDeleteParallelism(2) + .forTable(table.getTableName()) + .withIndexConfig(indexConfig) + .withArchivalConfig(archivalConfig) + .withEmbeddedTimelineServerEnabled(false) + .withMarkersType(MarkerType.DIRECT.name()) + // Disabling Hudi metadata table (MDT) in tests as the support of + // reading MDT is broken after removal of Hudi dependencies from compile time + .withMetadataConfig(HoodieMetadataConfig.newBuilder().enable(false).build()) + .build(); + return new HoodieJavaWriteClient<>(new HoodieJavaEngineContext(conf), cfg); + } + + private static RecordConverter createRecordConverter(TpchTable table) + { + Schema schema = createAvroSchema(table); + List> columns = table.getColumns(); + + int numberOfColumns = columns.size(); + List columnNames = columns.stream() + .map(TpchColumn::getSimplifiedColumnName) + .toList(); + List> columnConverters = columns.stream() + .map(TpchColumn::getType) + .map(TpchHudiTablesInitializer::avroEncoderOf) + .toList(); + + return row -> { + checkArgument(row.size() == numberOfColumns); + + // Create a GenericRecord + GenericRecord record = new GenericData.Record(schema); + for (int i = 0; i < numberOfColumns; i++) { + record.put(columnNames.get(i), columnConverters.get(i).apply(row.get(i))); + } + // Add extra uuid column + String uuid = UUID.randomUUID().toString(); + record.put(FIELD_UUID, uuid); + + // wrap to a HoodieRecord + HoodieKey key = new HoodieKey(uuid, PARTITION_PATH); + HoodieAvroPayload data = new HoodieAvroPayload(Option.of(record)); + return new HoodieAvroRecord<>(key, data, null); + }; + } + + private static Schema createAvroSchema(TpchTable table) + { + List> tpchColumns = table.getColumns(); + List fields = new ArrayList<>(tpchColumns.size() + 1); + for (TpchColumn column : tpchColumns) { + String columnName = column.getSimplifiedColumnName(); + Schema.Type columnSchemaType = toSchemaType(column.getType()); + // Schema.createUnion(Schema.create(Schema.Type.NULL), Schema.create(type)); + fields.add(new Schema.Field(columnName, Schema.create(columnSchemaType))); + } + fields.add(new Schema.Field(FIELD_UUID, Schema.create(Schema.Type.STRING))); + String name = table.getTableName(); + return Schema.createRecord(name, null, null, false, fields); + } + + private static List createMetastoreColumns(TpchTable table) + { + List> tpchColumns = table.getColumns(); + List columns = new ArrayList<>(tpchColumns.size() + 1); + for (TpchColumn c : tpchColumns) { + HiveType hiveType = TpchColumnTypeAdapter.toHiveType(c.getType()); + columns.add(new Column(c.getSimplifiedColumnName(), hiveType, Optional.empty(), Map.of())); + } + columns.add(new Column(FIELD_UUID, HIVE_STRING, Optional.empty(), Map.of())); + return unmodifiableList(columns); + } + + private static Schema.Type toSchemaType(TpchColumnType columnType) + { + return TpchColumnTypeAdapter.of(columnType).avroType; + } + + private static Function avroEncoderOf(TpchColumnType columnType) + { + return TpchColumnTypeAdapter.of(columnType).avroEncoder; + } + + private static String quote(String name) + { + return "\"" + name + "\""; + } + + private enum TpchColumnTypeAdapter + { + INTEGER(Schema.Type.INT, hiveTypeOf(HIVE_INT), Function.identity()), + IDENTIFIER(Schema.Type.LONG, hiveTypeOf(HIVE_LONG), Function.identity()), + DATE(Schema.Type.INT, hiveTypeOf(HIVE_DATE), TpchColumnTypeAdapter::convertDate), + DOUBLE(Schema.Type.DOUBLE, hiveTypeOf(HIVE_DOUBLE), Function.identity()), + VARCHAR(Schema.Type.STRING, TpchColumnTypeAdapter::hiveVarcharOf, Function.identity()), + /**/; + + static TpchColumnTypeAdapter of(TpchColumnType columnType) + { + if (columnType == TpchColumnTypes.INTEGER) { + return INTEGER; + } + else if (columnType == TpchColumnTypes.IDENTIFIER) { + return IDENTIFIER; + } + else if (columnType == TpchColumnTypes.DATE) { + return DATE; + } + else if (columnType == TpchColumnTypes.DOUBLE) { + return DOUBLE; + } + else { + if (columnType.getBase() != TpchColumnType.Base.VARCHAR || columnType.getPrecision().isEmpty()) { + throw new IllegalArgumentException("Illegal column type: " + columnType); + } + return VARCHAR; + } + } + + static HiveType toHiveType(TpchColumnType columnType) + { + return of(columnType).hiveTypeConverter.apply(columnType); + } + + private final Schema.Type avroType; + private final Function hiveTypeConverter; + private final Function avroEncoder; + + TpchColumnTypeAdapter( + Schema.Type avroType, + Function hiveTypeConverter, + Function avroEncoder) + { + this.avroType = avroType; + this.hiveTypeConverter = hiveTypeConverter; + this.avroEncoder = avroEncoder; + } + + private static Function hiveTypeOf(HiveType hiveType) + { + return _ -> hiveType; + } + + private static HiveType hiveVarcharOf(TpchColumnType type) + { + verify(type.getPrecision().isPresent()); + return HiveType.valueOf("varchar(" + type.getPrecision().get() + ")"); + } + + private static Object convertDate(Object input) + { + LocalDate date = (LocalDate) input; + return (int) date.getLong(ChronoField.EPOCH_DAY); + } + } + + private interface RecordConverter + { + HoodieRecord toRecord(List row); + } +} diff --git a/hudi-trino-plugin/src/test/resources/README.md b/hudi-trino-plugin/src/test/resources/README.md new file mode 100644 index 0000000000000..26f65f3fcd78f --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/README.md @@ -0,0 +1,47 @@ +# Hudi Test Resources + +## Generating Hudi Resources + +Follow these steps to create the `hudi_non_part_cow` test table and utilize it for testing. `hudi_non_part_cow` resource is generated using `423` trino version. + +### Start the Hudi environment + +Execute the following command in the terminal to initiate the Hudi environment: + +```shell +testing/bin/ptl env up --environment singlenode-hudi +``` + +### Generate Resources + +* Open the `spark-sql` terminal and initiate the `spark-sql` shell in the `ptl-spark` container. +* Execute the following Spark SQL queries to create the `hudi_non_part_cow` table: + +``` +spark-sql> CREATE TABLE default.hudi_non_part_cow ( + id bigint, + name string, + ts bigint, + dt string, + hh string + ) + USING hudi + TBLPROPERTIES ( + type = 'cow', + primaryKey = 'id', + preCombineField = 'ts' + ) + LOCATION 's3://test-bucket/hudi_non_part_cow'; + +spark-sql> INSERT INTO default.hudi_non_part_cow (id, name, ts, dt, hh) VALUES + (1, 'a1', 1000, '2021-12-09', '10'), + (2, 'a2', 2000, '2021-12-09', '11'); +``` + +### Download Resources + +Download the `hudi_non_part_cow` table from the MinIO client http://localhost:9001/buckets/test-bucket/browse. + +### Use Resources + +Unzip the downloaded `hudi_non_part_cow.zip`. Remove any unnecessary files obtained after unzipping to prepare the resource for testing. diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.commit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.commit new file mode 100644 index 0000000000000..f7993d9cbb863 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.commit @@ -0,0 +1,73 @@ +{ + "partitionToWriteStats" : { + "dt=2021-12-09/hh=10" : [ { + "fileId" : "719c3273-2805-4124-b1ac-e980dada85bf-0", + "path" : "dt=2021-12-09/hh=10/719c3273-2805-4124-b1ac-e980dada85bf-0_0-27-1215_20220906063435640.parquet", + "prevCommit" : "null", + "numWrites" : 1, + "numDeletes" : 0, + "numUpdateWrites" : 0, + "numInserts" : 1, + "totalWriteBytes" : 435204, + "totalWriteErrors" : 0, + "tempPath" : null, + "partitionPath" : "dt=2021-12-09/hh=10", + "totalLogRecords" : 0, + "totalLogFilesCompacted" : 0, + "totalLogSizeCompacted" : 0, + "totalUpdatedRecordsCompacted" : 0, + "totalLogBlocks" : 0, + "totalCorruptLogBlock" : 0, + "totalRollbackBlocks" : 0, + "fileSizeInBytes" : 435204, + "minEventTime" : null, + "maxEventTime" : null + } ] + }, + "compacted" : false, + "extraMetadata" : { + "schema" : "{\"type\":\"record\",\"name\":\"hudi_cow_pt_tbl_record\",\"namespace\":\"hoodie.hudi_cow_pt_tbl\",\"fields\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"dt\",\"type\":\"string\"},{\"name\":\"hh\",\"type\":\"string\"}]}" + }, + "operationType" : "UPSERT", + "writePartitionPaths" : [ "dt=2021-12-09/hh=10" ], + "fileIdAndRelativePaths" : { + "719c3273-2805-4124-b1ac-e980dada85bf-0" : "dt=2021-12-09/hh=10/719c3273-2805-4124-b1ac-e980dada85bf-0_0-27-1215_20220906063435640.parquet" + }, + "totalRecordsDeleted" : 0, + "totalLogRecordsCompacted" : 0, + "totalLogFilesCompacted" : 0, + "totalCompactedRecordsUpdated" : 0, + "totalLogFilesSize" : 0, + "totalScanTime" : 0, + "totalCreateTime" : 512, + "totalUpsertTime" : 0, + "minAndMaxEventTime" : { + "Optional.empty" : { + "val" : null, + "present" : false + } + }, + "writeStats" : [ { + "fileId" : "719c3273-2805-4124-b1ac-e980dada85bf-0", + "path" : "dt=2021-12-09/hh=10/719c3273-2805-4124-b1ac-e980dada85bf-0_0-27-1215_20220906063435640.parquet", + "prevCommit" : "null", + "numWrites" : 1, + "numDeletes" : 0, + "numUpdateWrites" : 0, + "numInserts" : 1, + "totalWriteBytes" : 435204, + "totalWriteErrors" : 0, + "tempPath" : null, + "partitionPath" : "dt=2021-12-09/hh=10", + "totalLogRecords" : 0, + "totalLogFilesCompacted" : 0, + "totalLogSizeCompacted" : 0, + "totalUpdatedRecordsCompacted" : 0, + "totalLogBlocks" : 0, + "totalCorruptLogBlock" : 0, + "totalRollbackBlocks" : 0, + "fileSizeInBytes" : 435204, + "minEventTime" : null, + "maxEventTime" : null + } ] +} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.commit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.commit.requested new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.inflight new file mode 100644 index 0000000000000..5bb738a80f743 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.inflight @@ -0,0 +1,71 @@ +{ + "partitionToWriteStats" : { + "dt=2021-12-09/hh=10" : [ { + "fileId" : "", + "path" : null, + "prevCommit" : "null", + "numWrites" : 0, + "numDeletes" : 0, + "numUpdateWrites" : 0, + "numInserts" : 1, + "totalWriteBytes" : 0, + "totalWriteErrors" : 0, + "tempPath" : null, + "partitionPath" : null, + "totalLogRecords" : 0, + "totalLogFilesCompacted" : 0, + "totalLogSizeCompacted" : 0, + "totalUpdatedRecordsCompacted" : 0, + "totalLogBlocks" : 0, + "totalCorruptLogBlock" : 0, + "totalRollbackBlocks" : 0, + "fileSizeInBytes" : 0, + "minEventTime" : null, + "maxEventTime" : null + } ] + }, + "compacted" : false, + "extraMetadata" : { }, + "operationType" : "UPSERT", + "writePartitionPaths" : [ "dt=2021-12-09/hh=10" ], + "fileIdAndRelativePaths" : { + "" : null + }, + "totalRecordsDeleted" : 0, + "totalLogRecordsCompacted" : 0, + "totalLogFilesCompacted" : 0, + "totalCompactedRecordsUpdated" : 0, + "totalLogFilesSize" : 0, + "totalScanTime" : 0, + "totalCreateTime" : 0, + "totalUpsertTime" : 0, + "minAndMaxEventTime" : { + "Optional.empty" : { + "val" : null, + "present" : false + } + }, + "writeStats" : [ { + "fileId" : "", + "path" : null, + "prevCommit" : "null", + "numWrites" : 0, + "numDeletes" : 0, + "numUpdateWrites" : 0, + "numInserts" : 1, + "totalWriteBytes" : 0, + "totalWriteErrors" : 0, + "tempPath" : null, + "partitionPath" : null, + "totalLogRecords" : 0, + "totalLogFilesCompacted" : 0, + "totalLogSizeCompacted" : 0, + "totalUpdatedRecordsCompacted" : 0, + "totalLogBlocks" : 0, + "totalCorruptLogBlock" : 0, + "totalRollbackBlocks" : 0, + "fileSizeInBytes" : 0, + "minEventTime" : null, + "maxEventTime" : null + } ] +} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.commit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.commit new file mode 100644 index 0000000000000..0b2cacafaf52c --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.commit @@ -0,0 +1,73 @@ +{ + "partitionToWriteStats" : { + "dt=2021-12-09/hh=11" : [ { + "fileId" : "4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0", + "path" : "dt=2021-12-09/hh=11/4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0_0-70-2444_20220906063456550.parquet", + "prevCommit" : "null", + "numWrites" : 1, + "numDeletes" : 0, + "numUpdateWrites" : 0, + "numInserts" : 1, + "totalWriteBytes" : 435204, + "totalWriteErrors" : 0, + "tempPath" : null, + "partitionPath" : "dt=2021-12-09/hh=11", + "totalLogRecords" : 0, + "totalLogFilesCompacted" : 0, + "totalLogSizeCompacted" : 0, + "totalUpdatedRecordsCompacted" : 0, + "totalLogBlocks" : 0, + "totalCorruptLogBlock" : 0, + "totalRollbackBlocks" : 0, + "fileSizeInBytes" : 435204, + "minEventTime" : null, + "maxEventTime" : null + } ] + }, + "compacted" : false, + "extraMetadata" : { + "schema" : "{\"type\":\"record\",\"name\":\"hudi_cow_pt_tbl_record\",\"namespace\":\"hoodie.hudi_cow_pt_tbl\",\"fields\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"dt\",\"type\":\"string\"},{\"name\":\"hh\",\"type\":\"string\"}]}" + }, + "operationType" : "UPSERT", + "writePartitionPaths" : [ "dt=2021-12-09/hh=11" ], + "fileIdAndRelativePaths" : { + "4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0" : "dt=2021-12-09/hh=11/4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0_0-70-2444_20220906063456550.parquet" + }, + "totalRecordsDeleted" : 0, + "totalLogRecordsCompacted" : 0, + "totalLogFilesCompacted" : 0, + "totalCompactedRecordsUpdated" : 0, + "totalLogFilesSize" : 0, + "totalScanTime" : 0, + "totalCreateTime" : 72, + "totalUpsertTime" : 0, + "minAndMaxEventTime" : { + "Optional.empty" : { + "val" : null, + "present" : false + } + }, + "writeStats" : [ { + "fileId" : "4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0", + "path" : "dt=2021-12-09/hh=11/4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0_0-70-2444_20220906063456550.parquet", + "prevCommit" : "null", + "numWrites" : 1, + "numDeletes" : 0, + "numUpdateWrites" : 0, + "numInserts" : 1, + "totalWriteBytes" : 435204, + "totalWriteErrors" : 0, + "tempPath" : null, + "partitionPath" : "dt=2021-12-09/hh=11", + "totalLogRecords" : 0, + "totalLogFilesCompacted" : 0, + "totalLogSizeCompacted" : 0, + "totalUpdatedRecordsCompacted" : 0, + "totalLogBlocks" : 0, + "totalCorruptLogBlock" : 0, + "totalRollbackBlocks" : 0, + "fileSizeInBytes" : 435204, + "minEventTime" : null, + "maxEventTime" : null + } ] +} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.commit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.commit.requested new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.inflight new file mode 100644 index 0000000000000..8ef87d4ed5f61 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.inflight @@ -0,0 +1,71 @@ +{ + "partitionToWriteStats" : { + "dt=2021-12-09/hh=11" : [ { + "fileId" : "", + "path" : null, + "prevCommit" : "null", + "numWrites" : 0, + "numDeletes" : 0, + "numUpdateWrites" : 0, + "numInserts" : 1, + "totalWriteBytes" : 0, + "totalWriteErrors" : 0, + "tempPath" : null, + "partitionPath" : null, + "totalLogRecords" : 0, + "totalLogFilesCompacted" : 0, + "totalLogSizeCompacted" : 0, + "totalUpdatedRecordsCompacted" : 0, + "totalLogBlocks" : 0, + "totalCorruptLogBlock" : 0, + "totalRollbackBlocks" : 0, + "fileSizeInBytes" : 0, + "minEventTime" : null, + "maxEventTime" : null + } ] + }, + "compacted" : false, + "extraMetadata" : { }, + "operationType" : "UPSERT", + "writePartitionPaths" : [ "dt=2021-12-09/hh=11" ], + "fileIdAndRelativePaths" : { + "" : null + }, + "totalRecordsDeleted" : 0, + "totalLogRecordsCompacted" : 0, + "totalLogFilesCompacted" : 0, + "totalCompactedRecordsUpdated" : 0, + "totalLogFilesSize" : 0, + "totalScanTime" : 0, + "totalCreateTime" : 0, + "totalUpsertTime" : 0, + "minAndMaxEventTime" : { + "Optional.empty" : { + "val" : null, + "present" : false + } + }, + "writeStats" : [ { + "fileId" : "", + "path" : null, + "prevCommit" : "null", + "numWrites" : 0, + "numDeletes" : 0, + "numUpdateWrites" : 0, + "numInserts" : 1, + "totalWriteBytes" : 0, + "totalWriteErrors" : 0, + "tempPath" : null, + "partitionPath" : null, + "totalLogRecords" : 0, + "totalLogFilesCompacted" : 0, + "totalLogSizeCompacted" : 0, + "totalUpdatedRecordsCompacted" : 0, + "totalLogBlocks" : 0, + "totalCorruptLogBlock" : 0, + "totalRollbackBlocks" : 0, + "fileSizeInBytes" : 0, + "minEventTime" : null, + "maxEventTime" : null + } ] +} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/hoodie.properties b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/hoodie.properties new file mode 100644 index 0000000000000..4d3a2d67cfc69 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/hoodie.properties @@ -0,0 +1,18 @@ +#Updated at 2022-09-06T06:34:40.904Z +#Tue Sep 06 06:34:40 UTC 2022 +hoodie.table.precombine.field=ts +hoodie.datasource.write.drop.partition.columns=false +hoodie.table.partition.fields=dt,hh +hoodie.table.type=COPY_ON_WRITE +hoodie.archivelog.folder=archived +hoodie.timeline.layout.version=1 +hoodie.table.version=5 +hoodie.table.metadata.partitions=files +hoodie.table.recordkey.fields=id +hoodie.database.name=default +hoodie.datasource.write.partitionpath.urlencode=false +hoodie.table.keygenerator.class=org.apache.hudi.keygen.ComplexKeyGenerator +hoodie.table.name=hudi_cow_pt_tbl +hoodie.datasource.write.hive_style_partitioning=true +hoodie.table.checksum=1395413629 +hoodie.table.create.schema={"type"\:"record","name"\:"hudi_cow_pt_tbl_record","namespace"\:"hoodie.hudi_cow_pt_tbl","fields"\:[{"name"\:"_hoodie_commit_time","type"\:["string","null"]},{"name"\:"_hoodie_commit_seqno","type"\:["string","null"]},{"name"\:"_hoodie_record_key","type"\:["string","null"]},{"name"\:"_hoodie_partition_path","type"\:["string","null"]},{"name"\:"_hoodie_file_name","type"\:["string","null"]},{"name"\:"id","type"\:["long","null"]},{"name"\:"name","type"\:["string","null"]},{"name"\:"ts","type"\:["long","null"]},{"name"\:"dt","type"\:["string","null"]},{"name"\:"hh","type"\:["string","null"]}]} diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=10/.hoodie_partition_metadata b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=10/.hoodie_partition_metadata new file mode 100644 index 0000000000000..92ce82c886b71 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=10/.hoodie_partition_metadata @@ -0,0 +1,4 @@ +#partition metadata +#Tue Sep 06 06:34:49 UTC 2022 +commitTime=20220906063435640 +partitionDepth=2 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=10/719c3273-2805-4124-b1ac-e980dada85bf-0_0-27-1215_20220906063435640.parquet b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=10/719c3273-2805-4124-b1ac-e980dada85bf-0_0-27-1215_20220906063435640.parquet new file mode 100644 index 0000000000000000000000000000000000000000..4785e8c09095c889eb64fd80556196fc9cba2d96 GIT binary patch literal 435204 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 Ee_l0t@Bjb+ literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=11/.hoodie_partition_metadata b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=11/.hoodie_partition_metadata new file mode 100644 index 0000000000000..ed8c619a1362d --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=11/.hoodie_partition_metadata @@ -0,0 +1,4 @@ +#partition metadata +#Tue Sep 06 06:35:03 UTC 2022 +commitTime=20220906063456550 +partitionDepth=2 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=11/4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0_0-70-2444_20220906063456550.parquet b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=11/4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0_0-70-2444_20220906063456550.parquet new file mode 100644 index 0000000000000000000000000000000000000000..f2918fae851c808da3548709452599d8008e40c7 GIT binary patch literal 435204 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 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002.deltacommit.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002.deltacommit.inflight new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002.deltacommit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002.deltacommit.requested new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002_20250429145941217.deltacommit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002_20250429145941217.deltacommit new file mode 100644 index 0000000000000000000000000000000000000000..a1c0d25ce74a80d971c61fa25ea019b26afcab0a GIT binary patch literal 10946 zcmds7%W~Vu6`g3E^{l(FNm30V@#senaMKk-YX{)>16e7S;&}<7<)gE_`;jPhxUi$S1F7Wnc}rc(tn;bUp7 ze8LwXkTpMFEq`FNQlha=)sS>vBSPt{&hPO(Yxa|Tl!NM{ljz!i_k4F4C2B0Esf$iX zgJ)<^nXr&NrE|n3u}$tL5C3Q-|sU9Sk6mxf5o}GgP1jecSwX?uX|r5l?(_;Ac9lvtm@dw%Z9;4TNn>r3Lum{iHU3zF3*XJw-SU(>3t>6ZIJ-}?4;3uJn1)f_4| zm?x;MZ^G&8MvH6;WhKu9G=(ffO+fZOYBX7JBYyY%)qno+hyUt7CN__bkB5Yg&)a%>bw*hdf1EuTF8-^IuQneQph}EMrAV$Xso7w zt6_08jwXXuoU)ru-fi0kDOk}feh!Xa;Sn*SKfwt~Lxq&^uOg2;YM?i1i4?1!8EsKnrURog7txD8{M0r)VUIz?c~cxXkI&>3DVcQFeYuTd6uSS~B#BkYGG`Rtds!Hq&gPAyM)6As`jfPT?-G zAlob*4b}S)kB9Y6`QD{Q_AuX=j_pH2Cfsepb2CLaZ8l=U=k_6_r`#n1o zGWxpI>FaA=Rd1Hjqv#%l3@O|Pr#n?a^U@|NXIhWgF4(scZ;cFozV_@6NaAq zgL@P<*xm=qVN}`W#y|TcUI0KZHcPSQt>MX=7i>6l9c2lh)BJ}NkA_E5{KQW@H> z_d3_vG@}-mCNSTYTAAOgfuPN1B1|s0O--nK)=rwr9p--(j2hPfwbG%g)rUQ zOr5u&v|8vVcIk|j_e#*7g5oyOeji6N}V!c17Y2y|Krmfiam_e(tgY!_V zpF!tCvMz7*{luNZZyj5fj}wJu7bZ?@yfBI!A^U{q0ar_Sod!)oNle5rQh=Jk@R}Qn zn-BtHnU)H07lNi9OXmY{MQT1uzH|uo;|34dHMdqwgyOn9oA_T(T=BaslUTdq3Jany zI742kF_y8Ev1Iqa!4H-6krx*e8`Tjy*fcgTPv?%N>3f)b1OJ@r&Zk-4Ow3tNa6|n5 zw_=1_e$j@3n`x21>A8@R{`PiwPOie%Y#{!WzZLv}|9XC$0v_kFw|OH9tzyLsjjPL{ z`1PWEhZT=YGb3@s(v6+)8{+VeWT;t^D4&Vr^Q+HHi1sPZgN^2>$hQJw3ESq@NX_i$ zY78=2+YnUtL%RAkl~sg#02kUGkhM|$X?^8aFz^KL3=p+ey+Vb@urQ5XD;~}V;w`OZ zVqP{>+r6JrXthikK&H?16ij|q8{2QUhe$TR>&Gu7{DK;$vn!xrAOPCFD^sXB2{{YC zd0l1JIsKKC%&hS6_nN*#`9l3)QIW1?YmuYFalsOlLp|u=NQj3`BG}R^06xCrN ziU`b5P4OEwe-_IMA59g)(WX}>3I7}=RFjnecTwpY1Y3A4XO2JkAkr4 q{AgMZhPD9u0@+Hq(6sFaL*mKy;Na`i+skkNGW_oP;_7Dk0r!6&@}(63 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003.deltacommit.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003.deltacommit.inflight new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003.deltacommit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003.deltacommit.requested new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003_20250429145941430.deltacommit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003_20250429145941430.deltacommit new file mode 100644 index 0000000000000000000000000000000000000000..ead35a4e7a580d86b0a1c8c0b66de52b84de229e GIT binary patch literal 10946 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 MS#LDz2a~DtAClD0>i_@% literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145938324.deltacommit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145938324.deltacommit.requested new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145938324_20250429145943593.deltacommit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145938324_20250429145943593.deltacommit new file mode 100644 index 0000000000000000000000000000000000000000..a986f620b9fdd6732c81c7cac7d5d774f7005d8b GIT binary patch literal 12376 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 YaUNfuou3RYUY`w4&dyGbXFsd?9~&^^_y7O^ literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472.compaction.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472.compaction.inflight new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472.compaction.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472.compaction.requested new file mode 100644 index 0000000000000000000000000000000000000000..25108e73bad303645161555f44178889d4838dc6 GIT binary patch literal 2517 zcmcIl!EVz)5DivO{eX%STKNQ0W2F*Ya)DA(h}4p*i9n)6(Z)N8x2(O^?mBI#@(uh! ze*ide;Xja&xNzVT_ylI{IC0ZD4K3u-dS`at&YL$gt^V;HXM>KE^t2y9NYC9f*NkIu z>#hP{D&}sw5e@D43n>|g9T~>dH(W*sf<{xT#v|(@)zG8(e*j*PFz%&+L&-p(5JirP>b%^B*E8zln0XRn}2(J`92feL z3a^dg(GcxvD#vt0z3EZiZD+PgcY@EIl7y)my2}L|P!rrBtySN+0P|~FWt7xxl_ZL!#Z(!dN(xE4W!Umphk*6+m((PrF@le%NC1`QGMV&+ zmBzBtm&5g?G)M%Eb2a?q#JZDZI)GDz-UmY&3ZfkOV#>4TTBU$Dy;YF4CDOpq4uTTRT{jQf^9Yv*k)I7Usdfa_`lX$Br9i82W7Cj6YN!(c@oh|E z=L0bTHH2#tD>>o}7zscD(Sb|^BUmzs7?}^)#wqxTZHxTvg!U~FzR6;45{yA@yfm&s ztQco98A4>|s#N5J3qh#RGDk#DK%i+{Vxw7FiIF7H;9=HfgC%!8po-!kE~V#xDk`T` zW1{vMU{Fgo=P{w=9gK;R0tk-?vzCxYIJ(J6!2N(^D~nk15T4e6d*G32;gMs4bO|{u z98fFP(T8CQj8Y?F!Yh6pEC|@8Nq+i7u{u@A1lzHMv$%R zD@FhgCIQ*%wyU<-as$)~6xuH2S|f*TT<9#ZJ8e3rm(;&(U!#7mU8I-O>P{-ZzJ31r z_5GLKAK%|T_z-{k=$x-Pj^oxAe~$CYvx`Yrt)*J)EjrXZtgpA#LtC|0aXJ^BtBupJr#33Ync9HnyJ? k4EGm;^xDlgjqFzEi95UX`mot)6t1C%Q>m<_e-;_~1KH9{yZ`_I literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472_20250429145941874.commit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472_20250429145941874.commit new file mode 100644 index 0000000000000000000000000000000000000000..9a8c4ac789088d95670297f03a3d8f336c6aa68e GIT binary patch literal 11138 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 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846.deltacommit.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846.deltacommit.inflight new file mode 100644 index 0000000000000000000000000000000000000000..09610f35bd6be6cda555f1d21bbf3be65d390525 GIT binary patch literal 4140 zcmcIn!EVz)5DgYW72=F~s8Hnt7n;aPQ=#VAHi$}8jgl4)Ra9;4N#b_BYpvH&OO*>p zK7b29!I=yH!x^a(aA0}lufk@1`i1TO`4A3XAX_s*2J zKA1IAfX#(t?wE{t>i=8L9TyI{=ehC(Byor&qtU=8wwl64uSD>@52b$SxFrqjaR(?) z?7Bdmz^q-|jS+n!q$^#{&iDu6N@z(U1DqKVxG-5r(J&_D5g!K!goc1H@n<3gxy1nl z@Fu^{<{vLKlTp{DaIAcuLm`mDWj!3%o?VdvDUCkW%vLluZ10#3bV*31SyLVi(Sy+z z`b75E2QFX`ozB{pV4^_Z)4Q9+_T0yCgS?ANE(z7f2e-Kx z{0FED!9@-q;#hC2GX^xzcf8lsxtoLL7~l;iLSFOeteg=C3`tZ33CXO=a_+}005L-p z7TS&-IiTFW&g;n`7b5f}Zm5P?K5{jSCa1JR?CZQ#lqj{_k8sR#Mla>P_aFik+N1|A zlWA#-rl;L*05WO0DC0XM02M|F%UHQrR8!$gX4RC?%vg8Ytgnm`;y?j)~_qJApRNy1QR4F9TZGv^fnub{VMKR!(oX5u>O9l&e+>tF4T#K13|1AU@89Sa=b) z+>xtjm*-%2Vwh|WZ)c?URJCk Js2@$I%0Htg*f9VA literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846.deltacommit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846.deltacommit.requested new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846_20250429145945066.deltacommit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846_20250429145945066.deltacommit new file mode 100644 index 0000000000000000000000000000000000000000..903465b570d0509e3643068e98bcd8c323cd5c14 GIT binary patch literal 12376 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 k?X0zWCw?m0PEs<63uJP2Sr+d`h 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 BpmP8K literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675.deltacommit.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675.deltacommit.inflight new file mode 100644 index 0000000000000000000000000000000000000000..92781866d5bc30d5a72b3dc6a2d3a3c7298070fa GIT binary patch literal 4571 zcmcInO>Wvi6sA^HMO}2!R#g`LiM$3x2x%HtRT8R3Z4?AayND1P>;Wbj&sgIzf<|1S z>u$T~1+t8kL-Z;=LEntQr5KDc!EB6Y-uHgzdv8u#mk*2=s3&;dv%1(pw>#IS9Jtsl zn*v*0*k;yb$Wi}4a&8lR$Q_5s6D*O9BpR)HF0#}XE;@Mx?_Hel`ZmdHV29h7!p1hi z)b`Bs#q}7`MM4ruI6LEC1(CQek@R3^V8DgRd)NwR)I<5vr?OcO)`pF&Y2!BXsWi*VgCTe@3ZaW+ zcYWXj_k!%KO$GBE9lvOjOv)iHF|LE?5vEu|>ZYTcME2Z;a>HqrOD+-B!Uuy?7W@OK z2*E`PAHrI%uCoTTou7H9rq6B)GsgfQ;2@+G4{~LXY=DvkMvypqs*>dWn0Z*tAccjp zV@D1sx31E9a>#}7T?qlzFw0l2wxY%>f{?fW+|(e^3E45JRsVr2ZYJE zV+*3E?Y4(yRC3XYZy^t>GKxrs%)KI;f^Dmd-ORekd^X zrWF9rT}5)s05syJj4}1;!?6PWj&W)j*~+++v@{C*srYLZQ?TQ%wQ<6D611(vJ~oEK zxDy za~BJw?*!@=GEFrhvnO$5QiUGG8^g@q&zm=YdcR)XksqIKp8mcyzCSZIHZ4wlhc!KQ z|9E6%GRB75Z)Cu?ASTz#0%)ocip%;Bws<~>$}j+fG?O)b1A_K;j1c$Km67tLm- z=)nNZY$OIv!ff1c61(4Y1+nmxbTNA$0_HSe4ghl+P?=ncNiM`AiOEL1hN9M>Ds%EF w=^z;Qq9Lw8??=PCwfnHQ_B`yzXh;~P5fvFP&#U!H?W|d?RjSp>(KNID1#hY#jQ{`u literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675.deltacommit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675.deltacommit.requested new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675_20250429145948126.deltacommit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675_20250429145948126.deltacommit new file mode 100644 index 0000000000000000000000000000000000000000..772c3fe5e7c142a2fee6ba753f817edfa86b9471 GIT binary patch literal 13743 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 p&>UVi`p literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946737.compaction.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946737.compaction.inflight new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946737.compaction.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946737.compaction.requested new file mode 100644 index 0000000000000000000000000000000000000000..50b5aff2de44a1a68747d381080bb29a1b043856 GIT binary patch literal 8675 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� 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 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0001-0_20250429145946675.log.1_1-120-382 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0001-0_20250429145946675.log.1_1-120-382 new file mode 100644 index 0000000000000000000000000000000000000000..1f406400096e938ca00e629c527a4f4d470210bf GIT binary patch literal 15007 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 CkuB{2 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.hoodie_partition_metadata b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.hoodie_partition_metadata new file mode 100644 index 0000000000000..2412b36db19f8 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.hoodie_partition_metadata @@ -0,0 +1,4 @@ +#partition metadata +#Tue Apr 29 14:59:43 UTC 2025 +commitTime=20250429145938324 +partitionDepth=1 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0000-0_10-62-159_20250429145943911.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0000-0_10-62-159_20250429145943911.hfile new file mode 100644 index 0000000000000000000000000000000000000000..5a71b3d4acc31a6880f33068d5bfb1dd52e33f3a GIT binary patch literal 7407 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 PK;VGD|C0dmKL+?e_Ap!! literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0000-0_9-104-299_20250429145946737.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0000-0_9-104-299_20250429145946737.hfile new file mode 100644 index 0000000000000000000000000000000000000000..0747b46b423d609ac56dc8771db6ce5af0ed1307 GIT binary patch literal 9131 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 K2td!T;`|FiRSPfx literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0001-0_10-104-300_20250429145946737.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0001-0_10-104-300_20250429145946737.hfile new file mode 100644 index 0000000000000000000000000000000000000000..6827fcb05de3b5032543cbb00d6792ee8bc7de1c GIT binary patch literal 9113 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 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0001-0_11-62-160_20250429145943911.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0001-0_11-62-160_20250429145943911.hfile new file mode 100644 index 0000000000000000000000000000000000000000..92200f361aafcc533cc481a90a17b942eb56fc91 GIT binary patch literal 8776 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 VfeQi`1TF|%5cq#4fdAbE{TGMNhHC%- literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_00000000000000000.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_00000000000000000.log.1_0-0-0 new file mode 100644 index 0000000000000000000000000000000000000000..8eb3d43d1ccfcca044d51bbe239c6abf62347f1d GIT binary patch literal 80 ncmY%P2zBvPW`F=EAjOD;L85{N=l~=N1e`$348$M}aNq#||3?K( literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_20250429145938324.log.1_5-57-134 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_20250429145938324.log.1_5-57-134 new file mode 100644 index 0000000000000000000000000000000000000000..129abeb0107ea780997db0fb8952f22851da5c40 GIT binary patch literal 14420 zcmeHN3piA1A9txpy6L8TTgOPLG!l|aHsdxzgrXFVnS;a3oN?xiOH#I4w3Tk#{Yq=2 zEw$0TWGkCZ_lxaI{=l+wNLeb1R0gIspMe9!lMk9i&sGxMJR`+tA`-~akD;7)aP zHBg~nR%_1=# zLGoF~EDDJdxVjTNYH4EkHp|qI4(k{a14=4Mtso_0R|oj#W4Y2!m5U}HehIx@f>FxKa|8q-1gKCL**fGcW2+=ead1blBXi&oxDosl>;w)C zjv$bLWlgQnfJ6$jwuOmuW6_Gpw}Rpj9td2@r-tE1LZL#)AjV|>Xd_n<5F(-wg*YT8 z9GH~0vV!F?z|uStLjgfdq+(zKKolj))3`7OP$Jl#`fbdfzpozhsQ{T(G;ac4EzGr0EjH2BD6bG1c;p=<^gD#KLOGB2u>j} zCV+YNpi~(yL8gj8U<4AIMi@G0D0F1WgEfr6%@WO3M76FY$aw9cAWWn!D(4PTRqNWp zgw`JF(TTD}{hS2^+6MSS;j;G7kQUrBgpPz1(5ZD0`SiN>P?C|{vX&f}7g|@6P9N=| zBa@d}v^7%}wyq-+McYA1g$uVOPPcdzkUHAH2)GIn5MekE6|}=~=rX!xH8CD8LFSk^5xJTI&ZWje50KN($+{+;8|548Uofe}F`)S_YB31GmsxeL7% zp`E53a=9#3D#|YpT!agyLRjL$4vZO3kfvC9Do~|MHU07NLO&$TX{g4)2*f}$90QEdrDkZ2f&z&Qov zEgzRef+w3JA1!^V2u#>Ow3Ps^w|yt6(o>*e`diz!p$C<<9kd@J&G(@7(>+|`i-(0% z9ALK=rYwHp7??hSjuVU^K`UYcyboda0H#KP)nTKFKqrR6KuZCnA)t8`5%i!+PJvKV zAi+SmQ;!Tvunz~Ppkub^&GlP{gC~%2=12&5 ziW#(lhMSfJ?HwYI^i!w0Izm%{sTmuYDY8fC516m(mqWsX%mC&#W{4Qaco>|uA>Qt; zh*3lRjAeVc6ERR-#n6p5!U(v7Gt@!8B~&FI?wBw-o)!e>DGBUW;gE@MI~oEa=KmE8 z2w77gVA@x>D>J4dF&OngaDmeUh&Hex9A7ab7+?u{W&rXGiH!ys9yAM59@T^oj%>sp zj%9fCut7H6`#+*q6DSoyrY+r*0&;IT*vxd>6@*o0)-M2sAw8f5(2-vV1#AQaZKf*2 zK+fSqV*%Tk$~?;vzLB{ja6uA{0q@|Qklcw|@EtHBhr?M|%QQJ=q)7B&1?GS!1XK2l}Ht5Z)zh#1+^Q*d5Ll>A(Po+DyOz_ZE>-aRV*s zyT|4W1S%Xb1JI|rYZ{qm;Kq$f8Gu(f37S-ytH`<(*pR@>n&t~UADW}!Hh_+J|Fmvs zD5crbp$%nSgIg}9tozb6mm+G&HI~&?t-;2)B)t4kMh*Z?f5M}JVW@8wj4vK*#sFZGDX z%6@!?3a--7PP*d0v=m9XXgX%>OZA7zrS|q~u>r61yR-XB*(&ZT!CKpU{dIm=)f3)P z(Vs`3j_7o#Z0r5!NYRUBp)q9#&J^w1pnmLZ`h3fKc5b?JZ9dctySPu}^?RY6XAQTU-O$U3KREly+i#zl^uOj3-~#@IpzPzp39gR*-kzSmW5Ka3 z!Oy71$M&s1HZM4FK{ct(si|3HWmVI8k(1$i!}V|D3TkS!Uwzh3?5uK3bj4^C5Yk7@ z zJ#{#RIz4kWzl#liuy+2B)>&G%j_HMyXGU1yzua)O&)8QS6M1Ll(NbQFN%kU^UAO8v zAweLTY&*qN~Hc%oD7g{{l7{|eQ~d1pV%)N|yCynq4bCqH}sRBL5}CcV3M z>1xH!)U4#8-b)Ad-J)Kssk7DcQO3%p+;_&EI6<=~UKyHda=CWpTmCtZ{LZGT1_Q&c zY+tbaw}h_dR0pL&E><= zvW6gkyn4o(yW!)o`_8)7dhZ7a_Vtc7otmV_?rgh0*uc2AZo>O#<4S($@-W}EuDV$G zW?shH+!cA&nK7lOq~9f%t~Sk*pyaOF@_s8E7N;6HxM&rrshc}_=Au)&qz&9ima+z& zsxa){=jU!C{dgZuH6NvJ7Tr$Zd%_YGOeqIjjv;G_k}(9A>1BpkId)0 zky*BDAE};qpYnE^5!NZt)O~bJ+vV{vp5bo!@J`L&+Vt@3=|&PKP{H*M_}JeSTBV zwsV2M+LjEKx%TKI-sdu6-ORfnyHywKTujqm#ihDiygQ(2ym!Nbi5IhVG=IE%OH9~( zSYCVc82?Cr4q1tw)Gxes1pk-VMEqvm<)lmFdmQfeUd`|D1ifn)tOUGwPBS<0>;fmu z9i4n(t=75$SDedcEQwO3hK*QK8Z}Ob9Bw}|W0{KiRCW|BWv04FEJ`tP zvwk?dli72Qlg&wEzm+`pjbrouxuaIwBzf=}oe}aDB#sz3g3L|K);FE(OIIllsj{ou0kjZBl?2dHmsiojzW_ ztks+ED?Z>{viOTf!l{5-A!fv&%WM})x&LDaglYQ^jwbK0pgxk*H8ZQ zA6-vfY$#0*jZemI9VLI;K9se_IMS_OKZ9aq^bae`U+{1H-adXSaP=Y8v+RKm7d1yG z4=*tE`F+3BHUr&s{;t?i&Qu4-JLia$P`$0*3#PCiS)Q#t?=9VKRN|ihVDGu1i{ru~ z^aq7i*hi^l1B$NR>+yEyt~;V5kNs0?2s>o68*#j0I&nd1r=Ps{v$`qe zW!ZSY{w3bv$9pl?2XZZ*Xd1siJfvjARPC1oh7O3&IXy!AV0CGV`oi0G>YFldBpBHy zR-ZOAV~>wmJ}h;DZNQ!@kIRnU^O(o8LZk;S2t2|b=$mVg(@T7EZIkaM#Kdgt*i5Uu z&FSGU5R1>5sxMmdj8`+UpuR({uMX68BLjV`qc8sOMPbsa(YKR z&NH!^AwKHhQ+$u(pH+SPtl!hu(Gih{qh?i|KWEwf1t;Qs@5R}Nk-o={5SMGV*>CZD zbv?(cOv-oKFfh6Qi70B$!kZ;;s;bon{N;e2%Ij`C*>;VSAhSdet5v35H1I%CFuOo} zqI{=+M1bp>%Ht(l1l=~Q=vmf>x)hnqosRh zX7AouxBiK+^k*|Cw=E04(KQr?{AzOGxs$*2ft4~zrs(7i)7~A+?{&0dV8~w4F2@@Ai%-yCrfPo@PqF_i8 z4F4CgvKDM0@5vBEK{1FlDXY>$69ina0YfstK#~cQ31tzNwE!+IwpHwk zt_l|P2^OrZ$S#Uv#{wweD*7zQihb30?@ST`NZEbzKmYR%IfnyD?tJ&Vzwh_eiy>#a zi-(~S{hH_uekp^WUf@TC{zyq_;DqrLtj1eTur;@|vbD6BXlc!Ssc(?Pq7p?I%Z^22 zT!Q4WOj$xy0N-;6f`?;17=`js3iVg~RxCofa0x+1vQhAN6vmE{@NhO7M-prS!Nd4K z43FS~C5{Lq7ZIaz7!QfZsVH2CP*E5nlZ*tS;d~4{5P@TSo|t7fD@mq8XcVnOD3=fj za4M9-fnugoeP^+R5XDbSSW4T{{}$C1ImdbHGnCLHh(l4hq9#~*|7o`<0LB> zfu@^G2^KD-puuRa1Og%=L z2?>SB$t6ZmA&=fjtmv1}+r=2AsJs)OAOrvv3L`s*ykl$?M9B~C0(N8$91b^ve}bLB zp}`UOVz8{O6GOYzh&+=wYu02#!X>~C%4Ap}B%6e1Ug z#76;>(pHwUJRVq@OJXP>h?ztLOaO?YKzSM$#sG3O*|5qva~1=uJjoQxNUhmeOQKrc|VCEznbA}F7aKz2zv zC(Q#AF|aiy%>nI2ZfAlo5eNe)loHE!k^>>j1aj+i%s>TEa`2iN$fY+zfXOIaOyS(m z(+_&*RG21Z%xI%SSEwil4_FpMU~r~kijTs%Q4BxYXoH|45g%vF-cFKZp80~>F@SwB z{RFu18yJt<$F8;goR~lvM1sR(q}*uo(jp#y0crq58c`A2ohbsuP7w0|w9KD?Xgma` zka#n|JV#Kfj20u)g&;5jiESecoipS*vSh&;M&Ndd<{_jyR}y5r?obdW(himL2C1rZ z?O;Od4)y3n*`a=Jd;;wPd=YS2cW6ip?ifNBLIUX2Ify)ZU3VzSNbXomCzuyHSCUR2 z-Jv6smpZgHQx`x??plE-pa% zokQ-zEbK;Q<=8VsF=a_{31s?E9-{yVy&{kZa4`(fb{6A7qX)19U8lKKa)&1k1ZA5K z&LxR1_yAlxPCzgIzc{e8TWEP+SQkolV0C^nx*+{4$D<$U{xbq2f=;MI!*~isS zLT{BmTc@g4NuhNBZfO>23}_A(pYtjB*=O0<#?H+^qX}OOXi&)gHJEAZIujCl;6R(i zPFA%u#}j^yxw{VFS@t47lF)og@lRfrjZXZQF$&RN8jXeu%W+gEmk1aB(0W z8AUk(yLB*S35vqN^bvHNU<3(T5i{U@2(t$;H43Z_8%+c{F%$+`3Lp&u&8v{02URi( zM4)^z2Ev`3G_tm|xdE1nYHlU}+a{Rli|7Vhwp$xc$dha9CW;y7`qN`vT12}OF8P4y z3-*xySOiAWff3>^-+^f=;YW2&XZh+1u+ln0rvbWd`~{bgV?(`^qBR+(8p9~6f4fEqwYekK&K5fHSQ zstf};hX;)XY-29W;t#Ni-h3gLgtQC+@&^z=#|UXJIYV=9I0f0#^|M$8umL zbaVmE=i_1!O+j{O!6F#UnENVbEf`iXY?4MeIO#=sJo+M_y`;!A$M~KBZ9DFgQ3m5@o$ap&Nn6nYzW_`i@3&uKy(B@*wEK^+522h#Z7&T!8`>cJ& zn*u2)59C@{AcGT2xKgJ8v5sWs{2-1?1D7mJ%EEffIN2ipjaQhAiwH4&Qzi$go#IFV zF4-gS7&4T32-j8{?Aj@O&qb!T!F!ffK-)Y{1Xh z)@KfEJ~KBgWq}!~<&|llB zRJ(tH#`g(f_p|2zWS6Vy;Ig%J>g;GMeD_Tc$L$9y;$!ZvI9AP#H_Kbhn$)*puJuWk z^H1(pRJPrZ)$?(1F2TTZ07HkEH)n)mMr?fiF+bIg6moH{vcnC0nDzCSnF+M}uOu3frX zw<|L@ZKVH?!v}9tt`DnK?ee11dqq1}L zk+UzKvF5G&FzR&a@?@Zvh7 zuLkYtJ0^(x!Cd2EdiI74j|<-6H6ka{m*K6&^9NsiMZ)tF;){C7<>i(%qe#m`0 z23>eBF7N3)Z9kvhOZwF9OxhP38g$flX>Io4R5H7dx_zL_K<|b9c;TFWY@eLxdyzQ~ zSr3&jcu#x#jWO0M#N2yaeBwc(?;f&v>G<-B8s)q?L(>J9!<=&J-LiXaJ-BR5AHfjU z+Ie-3bz^4!_{dFfc*)^G*9I23=&Z;$yqD5v*!_Rp=cX6z)LDcy82!svuz%++Ezgj$ z=N9JPH|lR&)Xd-2$5GR1)z+0(*}>tz?w>zkqI1<l4%TjCHQUCMX6TB>YBYTxIv@d3Bt>jQ&S-m@?VY+|af+-jCv^9RJy)7ap{kg2^ z)^Xm^p-yBydfK4$_EG#FA~VsOHJ4K_P3%|L_q|F`;n#ZC%5C}FcdoNHa3_U)J#SoE zd6wpyVOQMl%v=(yOpP*GQXOlpO^$Y)y?v>Y#X?3>5u2Xn@*vQPCtINRPds?zV`&~u(2Mx?FCt2t?~Lg4INc4TIW z;o6k__wC-T7V3H0m0zEEXg_<8D0mrvtb0ktcF!SmGH2v%^YWbKN1k|aP6-j-a$s;vitZ1mOy2AVB85}l`GO$@%8)&d+a%^M`z!{$l?O_gT*$M8Eo3x#`wr-4NcDN56!Zzj-atF}y%N>un>+ z2uSmMcAMksUSn;)WWbsFcj3CPEo#qd9N3#WU=Q2Gnr@@D(_+=f{qdx6 zTG-5*JDP{gRD0(H2ushDjM#88u(!*?2%F&!XG*p51{eKUwAY;zP!P#+zOc)zC_ii4 ztdRM0Ru}wv_m%csJM3Sg)2sTYTPLJBV9pyedh7|Alq9KZmzxm ztKCV4Ki!MJuFJ7{tYP}TP`}D#y4H(fBZnpBpE1!o+)$may0CJR>W1w%lZ_ox8qQc) zuqQ?@8oN*9^E;1&*wX?Eh0Ho&i9GDZ(ylqt(Wrn+J?YOh?&La2|2bWH*Ssk z1F`y)Q)7{-#@$e@7vLLo-N0tU(+eLC1WvMj8eDg?ukkd`GsVkdE)AX?;xsV&(MdDg znWAIP0TuV0f^!=x&jmew6&D>-7(3_5h4VIF{oxdSVPHmHAu{;*QQ~sr7ROD#FR$nO z-I4HI*XgDWJrzsMU3jbN&65U|VgGhUi%))KI@MvdD?g`-pP+e1t4#M$Ss1%SbgE`o zaP%yX)%7Q;Hu3weTdr1;{E-t`WN5VV=Fk{7EAXCjn9QE)%u@}t{PMx-!@qJhA zi!4Fxf-n`)&xhYw`0To+wtiwzN_^qE5v%m{V}^2bW6V9T|Nc#~^V+i06=?Oo*?D`{ zzh3)TP`$&#)oas&e`=oAFV>!)|FF_1b8hknGZT*Pr6zqPrHYk{UIhBX`i3>qM`Mxd zfF@;~vB)N_vGRDOiKam2Z8?=2!JVj^PpX6qQ`##89MYW literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_20250429145946675.log.1_3-120-384 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_20250429145946675.log.1_3-120-384 new file mode 100644 index 0000000000000000000000000000000000000000..8b1fe5425d255063bab45434ceb515c791f904ef GIT binary patch literal 14483 zcmeHN2{=@1A0MemyIUdO&1tl#7zvf7y4DCOOGMH!b8wiMGtQi`Tq%`s)2dsltA!SH zOA9KkZsk%++f54!-L|jN=4;XRz3(|QW02+EFW>V$-^26FW6Zqg|Nh_K|My>Cx(=SU zj=C)RXW~-uO9{NXf>#&%BNnUwxUu6*$C`{YGcqwXGZ{aAf+_Q*&d_K!6(z#h=4=w< z5+skU&laKr__qT=@Nmopqfj17p>B%bibW_FE+NPu4hr4}W1L_K59graB*767Jd6*- z@CYtgVudhr5iuH$@sJ3d3dV&96^tP=$%qFUz{kJ?fjGwJiP`49(J~eMgJ~W7xr9J~ zQ~neV6w{aL>&q5O_;4RFMdHFBwx4WAxHT4tO86Ap94?8`Z%LjQ3lkFGL?ClU|4=OI zn}`#kB!yErA@moaRPZ+u8Hn>Sf7-JD34n?RloLm40DU%X{tz@A+_)4ZfR8moCTx^T+F$#kYCUv*~g5YDQ zQ2w|FDZvmN9v>GY@OdN{6(a!{CPaWo(a*;C#k2~u+zD(5A%)^XF@l40kOCBv2|)u0 z35CeXB}PyokKRbE=$Fvj#TcciyfvR71OOEZBin|&b!-(x$q#M|c4Q7505^hf!A{`N z;0Sy%Sk~MMjYuRnYkQa|GZw9gY%3@Z;ex=Wcxo7K#1txk3}Q_7w>EMV0wF>Qk&8nj zf`LhCE6Z6P0W8fWF%%HQP$B{*07OxsJdF!u0J$>kfG7%(`m5&&z=bFog}@aEN|I=l zqOf*Qu@N|!kOH!R58*sRDG`xCJ{rUZY?KpD#tXzz$ipI`7bw~i@R=YHl+Q;XyQG|x z<^hQq*qV~&fR-Y+4Z)WPgzgkdiDf&gLB{I{1z{p>RXJyns@m2L zCbW)Fk4}`W>Sxa<(00HV2$yw)hP2?;A+#kVfKF|L$fMVFgp!Qp*0r>Td7*73>GaVN zIx=~wRa-MM2UG}}2Vpoyg2V)yH&AbYii9LYBo6(aZXQ6L-a^49KqJ3i5V4yTK8*?t=SB&= zN&0M>s+uH)rUAIIS)?(bAy|CPr{HH_Wn(itHvo-Belws!A@|o{rmbs3Na%qBZ4z@? z)y|MtuBHb;fhf&|OJO5JKS(!PEf^3^nf{Jo_*~o4DX0w`Ey#<}R@D|$1c?S=2%J+u z-tus9D0s3Z^3l>ggFV*jHCl2#9h7v(^SHb7(6eU^CNgM-Wz-Sw9~XhV+0MKu3Nh6mSp_w3(_5 z138BWjRkCDB=sy?_=nUTfeVso1o#Wy3CWze72g3PayXoYwM?^9HmM5iLWMNVk)*HvkM)7Z~!em@Ti0PX$IY=!OM+$Js z9)ZV@8HKr)l-@!Fk%UAAQ@9)+P zjit0$I<%v#Yjn%SlyzUb=8{JZna0w(sx8x$6_`t#CqDYxYb1J@Zv`&WwB|s52S5EO^0&fU1Wd-m|LISlQKpyb2p6-{HI%!jJ{N@9Dc$18@J6igGPy6Q}GE zqx;0Hi7WdlpxDRAednUw9}UPj`{+&1xnFEYoSR~o+~=u4^k}}?)@yMavx?kowBk0- zuhP9%xxoCX?Q-5Ta{Nsv*WeGE#%7Ezo^9zEDB-QT9O?R6Wli5?q1d?^`~!mb`$$zs zTW>d4SC4T3n2F#urU_^)&j!%A^J10k-OakEy?b{yHTB)%v+2nfk}rHbUh^(8zWz(U zf-bB>Q=Ib004eovUJg|dtSLnu{8BQNT7zZUAXr)ceTmlfG`cGtGXz1-u;xtKbvQ%S=y!-PoERACfD=nj%{wUpB&30 z&Q;bPIHqyKcG0EN7F$>BV;LWdczEpQAN_4{ka ze5f5?v8?-p0>`({%LMNhrlsVrIcc65QF%tPD4}wlQI;4b_taGlTw{~8QqN|pT1gjW z6Fb*jbY}N7tzXDW_TV!$!+U?XtLJDh?k6MFM~P{vNsbp6j>*)S7Mg$UR8OakpEG$g z@$6OJ#l2oM$%x+P@8@;YY*lsIfOs;khl+)V zZGY#uKD+>jJ{*_K7kd#u%alh-7oBImpQVR&oonQ55D}F}^xQ+9Sv9t_tV$`nMpu8y zm3h{g5AD;srsu8R&_giLu6jX@Rn2Ih6_4$;2Nxdx?vMTjwwlQ~y7yvxXx#tDeQsiI zhUQY_`S1g-g8do0drg~L^1|52`NqTB##M`V_pnm4UYEYsG|fBU_x+3eO|+@F>$J!r zeyH6M7p0V-*DGJ#3bpK3=-p+@PPR!egQIR2c1AjxbVv3oC8=LZ>$TQ_>TOzoNL7FT zrX@dI%2rqXx%#$V| zr)Zn@jpDkh>d6)EvE5aN%=i0#^^m&RBP-m=rN*(jZ*`qM`fH}%8Fc>5rmQ|r+saDJ zizOFwv=0&Y)OvjOUi|3#%B10vguv(o?DjG8x9!8&>-9sO1`gCMLkyNBSH0qudz7EJ zJ$Ky^rSlvun@g$&2_p-KyZ@eNw@p_wowp}4(Av|+*8dWb7^uC~ZOKf|qY399UUZXe z*Q;(^XEbn*rVSRwsTjT0;st5PR_uIo6HR`F4 z*Hg8K%XPQW>X~6G2CtsJoH@^@>W{Ndgi>B={)PQG8(YhH?WZoZjcQBh>ygI%fc zGBdU?qzsvov@5!Lea4@vk&#xWQ4Rs6mKr73?)7<}zUQv+=wt7dFNw)ij@3K$;WwkW zBh;h()6PEm;AM78!p*X9d-H3w?$7rQU)ORleWI%WAz!CrlxMHk8pAZAbIy+Hb@+K@ zqH-x|Msn0HcI_NRk?3s7X&7OKQ zr=2~sI`r~@IdiT1hde%MXyzk2X5(IV&)PfddHH#-XK%toLi5A?o?g5#q4%pfAs726 zW#=OUjvpniyxeBB#pPeub7tI;@a#5eB@8+hM$M1ARq^iW^DY|yv_a3D?5#iDa=jft zvw|O~cBfZ~)}fMloI=s5s@>ipzK-i3o~YQu@40DBx5Aju4nYOF!`I#%6l!m(@+nIt zXvPEwm4F^$mkbey8g+ZU`*!M=*n+Sn^SX$39DZl)vinxIUnY9RM&xfAvQAqkbPzWy z)M(oEKWD|*Y%DolhF0#IlfCzsw;P|hRPHjibK0`xd$rR#XVe$xJSrc)a=zq~;lrC$ zaGef|<@@pKCl5DRA+d+Ks1_;r%j=>!206mhQyR;fsQiPH18WA$XI#_&7{m#VbaKdH z22>7k;O;cb2FxQ-5(P7sdGKEuJAXP6=tQ6sfldTE5$Hsq6M;?yIuYnZpc8>k1UeDu SMBsk{0Wf867__q{CjA?ss2-*O literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.hoodie_partition_metadata b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.hoodie_partition_metadata new file mode 100644 index 0000000000000..dd262cf6908e3 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.hoodie_partition_metadata @@ -0,0 +1,4 @@ +#partition metadata +#Tue Apr 29 14:59:39 UTC 2025 +commitTime=00000000000000000 +partitionDepth=1 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/files-0000-0_0-28-69_20250429145941472.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/files-0000-0_0-28-69_20250429145941472.hfile new file mode 100644 index 0000000000000000000000000000000000000000..8c2fab87878dd853312eefa9f118e4f5de3313d5 GIT binary patch literal 6993 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 Fe*k^cpD6$U literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/files-0000-0_12-104-302_20250429145946737.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/files-0000-0_12-104-302_20250429145946737.hfile new file mode 100644 index 0000000000000000000000000000000000000000..8856fa4bbfcf37c262af94f3fc76ba645c101a8b GIT binary patch literal 7419 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 Jz&|CZ{{{BMZIl22 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.hoodie_partition_metadata b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.hoodie_partition_metadata new file mode 100644 index 0000000000000..2412b36db19f8 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.hoodie_partition_metadata @@ -0,0 +1,4 @@ +#partition metadata +#Tue Apr 29 14:59:43 UTC 2025 +commitTime=20250429145938324 +partitionDepth=1 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_00000000000000003.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_00000000000000003.log.1_0-0-0 new file mode 100644 index 0000000000000000000000000000000000000000..1206af68cd60adc1d9f89f7f76e9c360e5bda524 GIT binary patch literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXuudG3Iv=$%nZaJ4RGKA0RN!{PXGV_ literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_20250429145938324.log.1_4-57-133 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_20250429145938324.log.1_4-57-133 new file mode 100644 index 0000000000000000000000000000000000000000..b03743b5305d5225e1caca0f1c98ee02c5c6a13c GIT binary patch literal 14691 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 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_20250429145946675.log.1_2-120-383 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_20250429145946675.log.1_2-120-383 new file mode 100644 index 0000000000000000000000000000000000000000..0104ebf34e545f573abca3cc699155c465967d4c GIT binary patch literal 14753 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 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/partition-stats-0000-0_11-104-301_20250429145946737.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/partition-stats-0000-0_11-104-301_20250429145946737.hfile new file mode 100644 index 0000000000000000000000000000000000000000..a03f32fe54ed0c443de2e81cb140241ce02a0f09 GIT binary patch literal 8858 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 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0005-0_00000000000000002.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0005-0_00000000000000002.log.1_0-0-0 new file mode 100644 index 0000000000000000000000000000000000000000..b6c72b73252e9bbefcb225811cfeb2b5e506a88d GIT binary patch literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut?03Iv=$%nZaJ4RGKA0RMvpP5=M^ literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0005-0_20250429145938324.log.1_0-57-129 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0005-0_20250429145938324.log.1_0-57-129 new file mode 100644 index 0000000000000000000000000000000000000000..c6f2e736ab6ac6aeb345db31034aa6816492f47d GIT binary patch literal 14310 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 w2Z0_0dJyPApa+2-1bPtYL7)eL9t3(2=s}Vmj{ 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 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0008-0_00000000000000002.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0008-0_00000000000000002.log.1_0-0-0 new file mode 100644 index 0000000000000000000000000000000000000000..b6c72b73252e9bbefcb225811cfeb2b5e506a88d GIT binary patch literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut?03Iv=$%nZaJ4RGKA0RMvpP5=M^ literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0009-0_00000000000000002.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0009-0_00000000000000002.log.1_0-0-0 new file mode 100644 index 0000000000000000000000000000000000000000..b6c72b73252e9bbefcb225811cfeb2b5e506a88d GIT binary patch literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut?03Iv=$%nZaJ4RGKA0RMvpP5=M^ literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/record-index-0004-0_4-104-294_20250429145946737.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/record-index-0004-0_4-104-294_20250429145946737.hfile new file mode 100644 index 0000000000000000000000000000000000000000..2727a2bf20bcd3bb2fcb56f520469f97756cea8d GIT binary patch literal 7040 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 JfcZCqiGnlxuDY(@CM+ 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 T0yF|N0yF~uM*`HJ6X1UVAWFxN literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.hoodie_partition_metadata b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.hoodie_partition_metadata new file mode 100644 index 0000000000000..db3bc46b51ee2 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.hoodie_partition_metadata @@ -0,0 +1,4 @@ +#partition metadata +#Tue Apr 29 14:59:45 UTC 2025 +commitTime=00000000000000004 +partitionDepth=1 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0000-0_00000000000000004.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0000-0_00000000000000004.log.1_0-0-0 new file mode 100644 index 0000000000000000000000000000000000000000..0c17a367d8e6cac128f20e82fa4cf415d57f135a GIT binary patch literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut#{3Iv=$%nZaJ4RGKA0RO)QPyhe` literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0001-0_00000000000000004.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0001-0_00000000000000004.log.1_0-0-0 new file mode 100644 index 0000000000000000000000000000000000000000..0c17a367d8e6cac128f20e82fa4cf415d57f135a GIT binary patch literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut#{3Iv=$%nZaJ4RGKA0RO)QPyhe` literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0001-0_20250429145946675.log.1_6-120-387 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0001-0_20250429145946675.log.1_6-120-387 new file mode 100644 index 0000000000000000000000000000000000000000..267f13f56a4b64e00bbcb7955398891aeaf40d93 GIT binary patch literal 8107 zcmds6-EP}96z;OUz@DI-T3{RCI!>B&Xm*v_qE?jijQ)SER3gP2VR*s~KdC>}V;<8I zRa~?=K959uR3@^`FALSqR3cJ{NmPs_hs?=knqP{9O{5vgoSBhem1K6t2dTgdLn+ck zM+fh2Di!)8t3y9lStd>2NGR6w`o4?uGNpaADP(>Ty{~qpt;LX+sfi9~$+Wdho)&-Q z>Rtr8Gxk4->w6J5=7o_)s=PnuW^^wihcXp?>)FpSVEuprINkxR$h!Yee#zVZtAps& zIcHjPf`wb9L?m-V4zpM}0}z=ST6AO{cOE`bO#mH5Uuz?>3PKAO3c6){jE9#zEd`Jj zzHY|)D{RoqhXjp9OltY}41`gt0KH28Q#`8lCnf7jOWhTzFoFWi2i!oZRPa2!epZx% zNjkpNjNWG>uGv6{oFSs@yVLj6Ml**Xc%gE`Wv-dTIf{%Em>3_Z(y#z7&3K;JjdVRO zDcZF#b>)vzr7~E>h+?(Ln{8VY6%O9Tj_$w%+K4`4Cmb3_NHvx%dSMPk!L92cv2vDG zq}qzau^7ZvKQ+;fHasH)IhTFXM!g(Da>If+HW|UC*2@9q6L>l<1P4I2%Q0L4pwu95 z?cy8|l!*q{2B5z4JOi2Y;+oM4#*2bq*M+SC#W~}M+&~s$NG97Jh-{ehiwI~8fU9u9 zdU+zQC<^Mn1fEsFc$zXom&csX1Eq$qjn4tgnEQoF%Pc=N+~{hjV2COc1n)E>uqG-P zZ-&6wZp7d+Bejw7-SDI6{DsnFg^UFq)`4O$9y}`;k+U_^WF+H}!^eU)jE~2ubZ%dg zf{sx|*2KU|f!52-Y9*2JHlZLT(njTuk*Zc} zM+t2c>e)ousNbtp@iojhq-C4X&Tp@O0x*kUG{t1g&DJx{xtXH*g$VMmMV|Vwv%DwaL3~;Rclr zws$~jMcyuFt`AL|0-)Y85`ol2&<9UDX!Kw^be%i<)5epYp=^62<3gIT5 zOz*9hZb%y%ErepUQEhEh!7l`(IR)W1k@^GPTn0WX{XEBn4Q#7{_4RiuYj2@p`lxN! z=s|tkVdIc3??GqNJ*m&+#mF4NZw*tHwx*oIUG27jiI7}xH&Je!dt%49 zR>aZ?R~Qi8V-I;EhN7^w#QodO+5O4{3bmMlkS%of#m{6ygaoJeq|vHVb&@w%H+#Wnw#Q z@YB672wDrK3?#Eo_Y_QiQW@J#w|k&fH|tMP7}^0fOjq1N1#Je>c2$``&Pm8w@Xd~o ztS&l(h)yDV9>W@Vc;`%P&rY4GJr7mR=f>saF1 zX|rEv`eOb?TvwyEZp$sJuURl?9in)C&;x_AmhYk?1KVaSGYMpc-#|L zMUxe+&-3IQ|8;7U@v+kOrYsm~NpVy&SM>@VqjHM7mh`s}7lkUvHdzasM<_fG)Y3%E&Rc3P`NtYjW%fZkE zh<=P{C0?l8c7-9|PyG%0&-nW_exGh_J>Knf+MUNTIoNH{)c%0)ZtaGR`xX&>nOybJ O|Ha}PFTnnJ`0s!I2f*C` literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0002-0_00000000000000004.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0002-0_00000000000000004.log.1_0-0-0 new file mode 100644 index 0000000000000000000000000000000000000000..0c17a367d8e6cac128f20e82fa4cf415d57f135a GIT binary patch literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut#{3Iv=$%nZaJ4RGKA0RO)QPyhe` literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0002-0_20250429145946675.log.1_5-120-386 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0002-0_20250429145946675.log.1_5-120-386 new file mode 100644 index 0000000000000000000000000000000000000000..3e5ea3ab9d58897a6ed3cf6629b7521c830fa1e5 GIT binary patch literal 14281 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 N=IxCmcb47h{{XGu!yy0w literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0003-0_00000000000000004.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0003-0_00000000000000004.log.1_0-0-0 new file mode 100644 index 0000000000000000000000000000000000000000..0c17a367d8e6cac128f20e82fa4cf415d57f135a GIT binary patch literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut#{3Iv=$%nZaJ4RGKA0RO)QPyhe` literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0004-0_00000000000000004.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0004-0_00000000000000004.log.1_0-0-0 new file mode 100644 index 0000000000000000000000000000000000000000..0c17a367d8e6cac128f20e82fa4cf415d57f135a GIT binary patch literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut#{3Iv=$%nZaJ4RGKA0RO)QPyhe` literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0004-0_20250429145946675.log.1_4-120-385 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0004-0_20250429145946675.log.1_4-120-385 new file mode 100644 index 0000000000000000000000000000000000000000..325a9b386df6cba2d393b07b665763b4018e33c6 GIT binary patch literal 22389 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 E3sK6j3IG5A literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0009-0_00000000000000004.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0009-0_00000000000000004.log.1_0-0-0 new file mode 100644 index 0000000000000000000000000000000000000000..0c17a367d8e6cac128f20e82fa4cf415d57f135a GIT binary patch literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut#{3Iv=$%nZaJ4RGKA0RO)QPyhe` literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0009-0_20250429145946675.log.1_9-120-390 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0009-0_20250429145946675.log.1_9-120-390 new file mode 100644 index 0000000000000000000000000000000000000000..67102c23a2c6e5d8bb4e9f2ae2f00329547711cc GIT binary patch literal 8107 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 XU^BpGfXx7#0X75w2Mn-&l5qYPmKnVJ literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0004-0_14-104-304_20250429145946737.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0004-0_14-104-304_20250429145946737.hfile new file mode 100644 index 0000000000000000000000000000000000000000..7c97079db0971a96e70622fadb55e4c37a6a2b62 GIT binary patch literal 7029 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 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0004-0_4-100-274_00000000000000004.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0004-0_4-100-274_00000000000000004.hfile new file mode 100644 index 0000000000000000000000000000000000000000..1d1169f256a9f746ab4f69a2928c630805ec1ed1 GIT binary patch literal 7016 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 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0009-0_22-104-312_20250429145946737.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0009-0_22-104-312_20250429145946737.hfile new file mode 100644 index 0000000000000000000000000000000000000000..5586af8ae964dfa78015209e9c1b1b728c9614e9 GIT binary patch literal 7029 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 L?jCfG7gOpV;yh=4 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846.deltacommit.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846.deltacommit.inflight new file mode 100644 index 0000000000000000000000000000000000000000..c52713f594381cd9e40315a1f10f6e7c291b9c25 GIT binary patch literal 3496 zcmcInv5wO~5DgYW6qJY$aD9q|=prGZga9XTx>KA$aY`|-t*hq|x-D0s zFIC{4xB^1+{zl4xVMm4`(`Tq501eC4I0D~nk!sQedY)o)ngpzA6^AlFP8-Jzc@Vp; z%iBz21WGf_r0C1{ifQyT=$Lk<04`mTa1zV`g%Hu=40wX1CjSgd!JHOILAd&TGydGr zMnq%A@znUd1wyP96BAmuo?XEVn#)fu*GtzH!xJ~aF(h2OE#tw0JXnS>0zEyRa)q<> zbdF|1B%zI8@sM0DDJ~_hljuw2sOjj|qgzFG5K+2eUE^A6;8wUjuZ7^Bg050h)$k$D z^^0TXfW`S%PI|U>YrxDDyrM#=E1sTJu*5(qNsOSeSXEWd{Zz!LHju(j+02nPm;QBK zPdZYmB+?X6t7iYqwJ3U$^AY&hb)gti^4JGF6*aS$%gH-bF%fOi115A?*^=n_cpRfH zO75!o5yWWHs34g$_knCm*fytWZeUw$sA71X#Y?!&5B$AaSDL(KO=J(_5z&78*r5)Y z=+02+KBG}!Z~hM9<^XAx2u)^pM0j(z@BJ@Z96@Y>dOnDHo>}pZLh4NiC>TVBa)dh0R3iqdI*65cUG51i9Zd09RdZz=%|g8#*?&dRrYbXSd>+8*#Y_6TjEGc zjv&e?8E>?Ll>vOqsJdlZu10;^$J;%aX;$btrrFT{gc<8s>GbK!h%6&iVE+lsU&uPu z6+3hs4 in;y(FEv0uOyOyuCoNE|(H8rHVokxQUuiNXd!~6@|s*bS$ literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846.deltacommit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846.deltacommit.requested new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846_20250429145945109.deltacommit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846_20250429145945109.deltacommit new file mode 100644 index 0000000000000000000000000000000000000000..44a94eba5fbfc5e8863e98152f8f6f13868d2687 GIT binary patch literal 4180 zcmcIn&2G~`5Kb+SIFuXW0enNkX>9Uai32SKDp7%w1`bseZR~Mku)SuzjwmP+2ZY3x zcR=FGl^YMhoj2emI54|TOcE!q<0z>VrMo*n-|oyeGtUOE_LSRX%xF0@N8phk_ui}g zG63~ZWnfZfsdrVMc;f#jlv)lPQ_pkw8E|3|PNutIKumFjvSFFv?-7(ok>!-7Vvkzj z;z8R1*9z6ci}y2)0b$(X4)xFJOXhIsaKb}889Q*H`jLx*i9;R|^U%?4uloh~`#QO7H#(?zmDIK!L`GDPvK<@j|7V%_CQO(Wb6DAm;0$t_V`z&JF|e*Q(;0BQed*H`U1{>d18e(qo^urYsoN@D2*b23jW&074U+c7EWwW z;H0i`YwKZ}y#EoWq|0bkRquIZNZQQ!LZb^~S_r)rKUHaJg+ zwtk*Y^|=@d__M$BOc_s@H6yLrrTyooLlsy`?n=En6Gtwr=SyyU~KWR#Cp~{g*n(C)2NJ zjizQ)^uAFsYL%+d(yO&r^`6Zn%FBEC^`8php{>h-&BOojf%{{kvb)4(P)4zRfb@ZW_cRPX>;rR#7t6@{qFP5 KN&9>`rTzh?vtHc* literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145945334.indexing.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145945334.indexing.inflight new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145945334.indexing.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145945334.indexing.requested new file mode 100644 index 0000000000000000000000000000000000000000..638a4c955ebb06b700eb812ce3599b71eced691b GIT binary patch literal 828 zcmb_au};G<5G`KWk-B=WqBf+6W?^jyL?vJlrc&1k%2JzLwGT?c(!$(eY^8Vc@5ZWA+tPn(J4OQx z3=FsQLong-#K# zHQVuVVn{5QL6l$GR8SE7&Po zC$#dhCGQ0jiUQ$c2l`%dtfxJ(G(m$Lc5(65T+b;&+rt$opvfU`fyt zm}3SLNvylSXx6;ipoNey2<<+xm%Ki$Qo)fGYV6}>8&@!eq&n)d^JQ%D$yJ65)(RCt z@w%O!%Cy^FE?5h59~Oj#m$`1^m0>=E_E$eJqD}f1l{;$qK2W~B@b~JxqS_?VA49sQ z96@QIm7P8~&@DtbBMWQJ-@;OW@x4w#PH=q;@9FYQt39i1xY%gFR4W3ZmP;bMXW~rT z82whpX0;i9fq>$%rns~ihFz~$rPO!0Xnec9`F(fa+WXqe{yzMBJc>*sYDD2_JO6`F m9PE5l-X94*8yPE7j99zXK5TW`C;Oellg`0$=O}8tK>80ISc_2r literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145946675.deltacommit.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145946675.deltacommit.inflight new file mode 100644 index 0000000000000000000000000000000000000000..c220106896c9b55922ce0500c23e6b28da729eeb GIT binary patch literal 3920 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 Nf#G5mxLqXOF#bg*G^g}$C5*H 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 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/.06b93bb0-c6c1-4cfa-baf6-2b6716b29514-0_20250429145946675.log.1_2-110-337 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/.06b93bb0-c6c1-4cfa-baf6-2b6716b29514-0_20250429145946675.log.1_2-110-337 new file mode 100644 index 0000000000000000000000000000000000000000..d00ab2b1ec93c01c597edd513c47c5213a57eee2 GIT binary patch literal 1004 zcmb_bPfvp|6rW}H#l(Y0)7=ahsK5e=i3bmwcw2T_mZr32YXpi=4$I=j58!9>6L|82 zSUNOWaP#0uO7kA?_j^CypYi?d?qNJIkM*Ii6MZawfN>25r^rQt>!Zl?gUAoVNwEEB zjW$rNOAcdLaVjeYZCH@JwO0)jIBzl~aJs~$!nv&QPEcJEY9gg%f?xdx&~&Nb8LMGD z-+VLUl>uNX^IRybgwAJoGUl*ovP_$`szkAb3mY;?wH)nYJSAEWjN6bGdmmrTp9^^u z!tLMUC%!%kT}dh>l#m53iCP_nG8GxereXgnplI8^9fP0xi$a;=@2UBpIrreoO6ZyC zWn;2QGJYtbs{5!+b`!EE8I?_;s>99Ofi7OUeReN}PnGp@Wie;)Mx{0?&6`Fa$%5G%_y4EqEV+ M;cRM5^Rhm_0AqnJng9R* literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/.a9d27485-57a8-4561-b21c-ef8ed6221782-0_20250429145946675.log.1_3-110-338 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/.a9d27485-57a8-4561-b21c-ef8ed6221782-0_20250429145946675.log.1_3-110-338 new file mode 100644 index 0000000000000000000000000000000000000000..7f9f6b8582c17dd08d7889153bef93ea65ade510 GIT binary patch literal 1004 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 Zfz0`>Ppt@oS^fks{kkc*y#I>S{{et7#1#Ml literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.commit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.commit new file mode 100644 index 0000000000000..9fc9470ff41a2 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.commit @@ -0,0 +1,37 @@ +{ + "partitionToWriteStats" : { + "" : [ { + "fileId" : "05b0f4ec-00fb-49f2-a1e2-7f510f3da93b-0", + "path" : "05b0f4ec-00fb-49f2-a1e2-7f510f3da93b-0_0-27-28_20231127051653361.parquet", + "prevCommit" : "null", + "numWrites" : 2, + "numDeletes" : 0, + "numUpdateWrites" : 0, + "numInserts" : 2, + "totalWriteBytes" : 435338, + "totalWriteErrors" : 0, + "tempPath" : null, + "partitionPath" : "", + "totalLogRecords" : 0, + "totalLogFilesCompacted" : 0, + "totalLogSizeCompacted" : 0, + "totalUpdatedRecordsCompacted" : 0, + "totalLogBlocks" : 0, + "totalCorruptLogBlock" : 0, + "totalRollbackBlocks" : 0, + "fileSizeInBytes" : 435338, + "minEventTime" : null, + "maxEventTime" : null, + "runtimeStats" : { + "totalScanTime" : 0, + "totalUpsertTime" : 0, + "totalCreateTime" : 856 + } + } ] + }, + "compacted" : false, + "extraMetadata" : { + "schema" : "{\"type\":\"record\",\"name\":\"hudi_non_part_cow_record\",\"namespace\":\"hoodie.hudi_non_part_cow\",\"fields\":[{\"name\":\"id\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"name\",\"type\":[\"null\",\"string\"],\"default\":null},{\"name\":\"ts\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"dt\",\"type\":[\"null\",\"string\"],\"default\":null},{\"name\":\"hh\",\"type\":[\"null\",\"string\"],\"default\":null}]}" + }, + "operationType" : "UPSERT" +} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.commit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.commit.requested new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.inflight new file mode 100644 index 0000000000000..dad745d91bd72 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.inflight @@ -0,0 +1,31 @@ +{ + "partitionToWriteStats" : { + "" : [ { + "fileId" : "", + "path" : null, + "prevCommit" : "null", + "numWrites" : 0, + "numDeletes" : 0, + "numUpdateWrites" : 0, + "numInserts" : 2, + "totalWriteBytes" : 0, + "totalWriteErrors" : 0, + "tempPath" : null, + "partitionPath" : null, + "totalLogRecords" : 0, + "totalLogFilesCompacted" : 0, + "totalLogSizeCompacted" : 0, + "totalUpdatedRecordsCompacted" : 0, + "totalLogBlocks" : 0, + "totalCorruptLogBlock" : 0, + "totalRollbackBlocks" : 0, + "fileSizeInBytes" : 0, + "minEventTime" : null, + "maxEventTime" : null, + "runtimeStats" : null + } ] + }, + "compacted" : false, + "extraMetadata" : { }, + "operationType" : "UPSERT" +} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/hoodie.properties b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/hoodie.properties new file mode 100644 index 0000000000000..aa323696b299e --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/hoodie.properties @@ -0,0 +1,17 @@ +#Updated at 2023-11-27T05:16:58.380652Z +#Mon Nov 27 05:16:58 UTC 2023 +hoodie.table.type=COPY_ON_WRITE +hoodie.table.metadata.partitions=files +hoodie.table.precombine.field=ts +hoodie.archivelog.folder=archived +hoodie.table.create.schema={"type"\:"record","name"\:"hudi_non_part_cow_record","namespace"\:"hoodie.hudi_non_part_cow","fields"\:[{"name"\:"_hoodie_commit_time","type"\:["string","null"]},{"name"\:"_hoodie_commit_seqno","type"\:["string","null"]},{"name"\:"_hoodie_record_key","type"\:["string","null"]},{"name"\:"_hoodie_partition_path","type"\:["string","null"]},{"name"\:"_hoodie_file_name","type"\:["string","null"]},{"name"\:"id","type"\:["long","null"]},{"name"\:"name","type"\:["string","null"]},{"name"\:"ts","type"\:["long","null"]},{"name"\:"dt","type"\:["string","null"]},{"name"\:"hh","type"\:["string","null"]}]} +hoodie.timeline.layout.version=1 +hoodie.table.checksum=2968816715 +hoodie.datasource.write.drop.partition.columns=false +hoodie.table.recordkey.fields=id +hoodie.table.name=hudi_non_part_cow +hoodie.datasource.write.hive_style_partitioning=true +hoodie.table.keygenerator.class=org.apache.hudi.keygen.NonpartitionedKeyGenerator +hoodie.database.name=default +hoodie.datasource.write.partitionpath.urlencode=false +hoodie.table.version=5 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie_partition_metadata b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie_partition_metadata new file mode 100644 index 0000000000000..e9de1b96c3ff3 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie_partition_metadata @@ -0,0 +1,4 @@ +#partition metadata +#Mon Nov 27 05:16:59 UTC 2023 +commitTime=20231127051653361 +partitionDepth=0 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/05b0f4ec-00fb-49f2-a1e2-7f510f3da93b-0_0-27-28_20231127051653361.parquet b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/05b0f4ec-00fb-49f2-a1e2-7f510f3da93b-0_0-27-28_20231127051653361.parquet new file mode 100644 index 0000000000000000000000000000000000000000..c8368bd7c33cdbd5bedde73daab1af052e537fb6 GIT binary patch literal 435338 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 Ry2PL8-Ct^pZX3Bh|NkKDp;Q0> literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_v6_composite_key.zip b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_v6_composite_key.zip new file mode 100644 index 0000000000000000000000000000000000000000..9cf37b3e92d045464600e664ce8e061e3e3e8d7f GIT binary patch literal 284603 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%0A-3KSGFPAsaAhtfr6x zLvlI><*`k!N(HC|9$|4TeTW-!BrxADw0vQ2c2j5I;8LEj*xYefX;j4YL2_%i4 zld=Z*aC1ndt{kAvSBeA?tM!qXj8*!rJn0Q=JqHj-7@TsBRI+^F2P2P2f85QdCJC)w z^_u0Tto?D=8)C{|*xIn-#GtV*k4e822pyiQNrpUa?WN|B&*;MkLojhKJ1jmWa%5rT zOiR^TrT&Yq4^ZS9z4a`51f0fTo|W5H(vQl%){{8+Psw^7~sfVwq4Q{pEj2 zRRy14*E=D;@uP{z^q4@Ahw$*Sm zr;)yFUm+qji#C?iA0Ers4jbeWSBVLq zNH5VudaHod&%L3IV%2Q3O1Ug<0H`lkFHK_{ICVEPE*!nm)SFgy$Et zMgz@{&I&aQhbVM&8W;%a-J8{ZHS7yZoPN&VS?{}JdAO@X(up?*JC~nuTd>}SyJ(dm zXZOoH#m|E(_zBQ$I%ePc4liX0b<_1G8 z4Rx>ZqAaz5?0!MrNYK&qq`7uhwLv)KtmZNi|JmF83tN*P8uv2=%ykf(R^t%PCns;m zN;x2zzx{WxN`_u(q&PVxWT~>f3YACP@xVy2(*61$(L_GWU=UaWNu{h-ub7}&&}GnQ zyjUM3E%k1k?)#e^uq@2`kSkrkq^KVU@+X7GHxb$98&(OyeBp0zCut74;%(r7^qB}H za^I3}p@zQXKUbCNnCd9Oo=Z=y;S{qPdQoGfy!%GLVK9q%@fK?I5gOF(oNu7cQ#bOe zh2 zQ%Ku#fviw;ipVx$E?_opMWfjUS_eXiHk+6W^i+qZ?9NtV<8lH+@=OO;>tzEJ@+1xC zyX_&{Ne!Ij4qVM~OoHDp&$|BxD!@tzWYK_NQReAdA4Zuoyqo(4`7);P>kbd2m-}MA zG9k=|F7J)&vo}48KBxY-FVJ=}63jDyO-;N#-#R=_YSRY8+%-|bBEAU&97Te$D zux#S7C~cpcA&=}dpzovT3Kgh88&Xh!?H-eKjv%4In0vVCfb(HX?pEjD*=6rzF9JkZ ztNVRHtUwoaTLXT!z1gtKt*;!QBp8)at~No_Yy)zX4V)9A3KOW5(w$>oSp})3I9@rX+Ot!)nPQ;qDGe>XTDu)#tYO_6}QJPm-6$Jp*TxLC@PK z^>bRHZXxU9C$J3@Oj}!itXts9sml|FajoZl7+9Oq#ULQzs&qH_Uf+<}yi=UGmOX0? zay7opvH{>A#?yCW_!zoB8Q|8ZT5vXF zoIBATvQT`Y2T(JrJ%4Sk+qfitbngZedGlHOV3t^TGSGxXQtTIc8m<(ST_ zZ&S$wu`=Ca>{C@wU;5a$fx*_%AqGi!5%yyQE!3kT5ALr%uV6zLqZCotF&Zk4q}#`L zKgcIj!LQ}P51?sLImD8ks+JlSIFK7;tb@gtYN}$WJ^oG+g3q&c1d^h&Bq=GZ0>Y(2 zbAkOBn+xo+SKnS!DYMeZ4u|oPUyUpnva3u@+t3L@YO(o~fZBfE$U@v*MwXzMzXecJ z7Pq>qUuU)Bf^z@UQQKi6=g?6A;_1I#(FYwg;EZX_N~k?xrjfFy1=?KBPDs+iPcL7C z%;Ae8EJQ9bkoIy+1GMMp*Oeei3#|`(ITh@y;lLAVnd;N$2WMkA0C=sE^bn_?C}mm9#}MO1BG^+7kx>wsJ(j^D;hZB8Y=` zcm@fyDt4`a;1EwNcp2ln{7h%qdUybe@J=p&P!Ged@&mhxhf~9|son!;=XoXSRaBU4DcS;h%z`x6SP4 zvy6p9d+*jU;K@?g3yX)efbL$d@bal!vS$Vgw9QBH3)!p}^C$I~9=*K$^)7jfXpWoS z?a-e8#9s@bq8p`<-#iD7Sxww(;R8ozzYf_efkaKPowC7X%x^bv0CkzbZ5{^IzoEocuYXnfsf#R5vh4;YL=2i9aw zK=cKbX_8Vs%`!T<#J7T3;czdU{)q$(6}zY76v&_;DyoZmb>PTQ@@3%yf&X=Wxk!$i z->u;9FE+hDnPCKqpL^WQ*5JQtN2l&ktxG=w)8IlVo{XUuV5&Qd9!Hp5&s;yU=I@`q zsu7lf0*^~{{GsHhGW3=*{FL{eRSohScX9;@F#LimyXn#g=Ai}?KGE^=f2*R2qL4>` z+b8KR$3t;8U$kxtRFGd%P+3yx@gP|R^Zj|F8%N0V71cz6BAFyPI)4dE!7lF7?cErgG@#Sgws;>zIm9fU`EW*3NeJ z@jhIB-Do(`JUyqn8kt1|+Tn%VLUZLQKt>%Q#wzA@JTjCuCQC0Nr8T!yBh_B-@O}cS zTobhgApKf`;J%|MnT6qG*k^K_{G%Qf^>kzk8S}RB8AnU9@kB|jwQLvVQ#u~2>&)cr zEzHF61*q$_aCknb`Z1s5(^8_8l0I%tU?;WgWw3A*U6C^71z`mW+FTLX%DC&`r-*{` zra1u-3I6ty23IO@!d=flge41z5V@^tqvV=;>3DlMFvdesW48N|y3(lPFBUVears z=1&zSK*@v%#B23B6A=$@uv$rYERXYxpX4Nqxo1{H#ntDguE9V>yAE=%t}fooM$ek6 zP|)0bB5m4MM!5G_*!dzqvH4i0bY|&steJ+KNS11h+R3X56njJ?-dZcft^IObEIG2N04+jt%804tu!#_jby~bUxv>tgU|k_#Ymo&ws|Yw- z1Js!7C#>fy6-pYjHko{sZ`W;j%c3hiC%TMYge?-xY77#o(TY8-)6cLbBFr!ba7BGI zs_f(@wMZ20I9yZ?gC-OsIA|c~$f9>f4hJ1{qba|{SZiQ39(O^EHB?my3+>Yo-HkJ! z-pz`FW@>n%oonQ8bb%|^(w81)G1*kjHTWNfpOmW6K1E+1H=ebEUDIc&BR9w zb{=y-U+4HXw^V|N(PMB=)6jHF9>!Mtxz8|?K^p9TnVWcG&m%B7&Q)>}pJz89e||_~ zk+*Q(A{?*rVDY=YA!qG(7^IR|FYLBIJ652wmgB9X4qzM6G2jTxV+0N~<8P=&!EeJM z&BYm;OKKO;T0KBwL%9z0FZ|X(3b~8ahE0TW^HvqoXxzejmC9V&D@w=70W0dl)h78J zQj+HB!7#GMP&U*s5}98^iGRCcG&RhUfq9I*H){WOJ3#`?QR%cS3a79;K33fUQynoC zrM9g)G=5I%uq0awFX?`$)}erU)vHykieU*kS+t>C&<5NIUaj0LZ2oLn-eAHfyrTWI z?I*GK;kuC3g<0G{>Qe)(`nZu!`oME$Gb9zhIu>bAnoVj6YDRJe&H`J{gRggM7OrO%XQqnaw7X zS>*}2&&xkoBNY@r3*?RZb{3jb_9&?}I&CW@M=>ThvR^s-0?7)Rq+fw1xD3_qw3Bv= zGTKyidJm1~J~`GT9(H`if^MB0@Tv0Nr&mJsiC85_p#LB#Jyw%>3`8H|j;`f25a&Nk z4WmymH=W%u4=|3V!_g6}D@{MQkWl)a-S@bVplo=aHSU=eT0;!O&qrV*@8|OTjr6|4 zEReOXhPxm`o%0oC6;^jKt&(|1SBkKS;CwG%AYrc!OXL>m_lhMt%W3NDa?M@c$-F{!FjksUUtSQ&(DpETK*S3ecu7 zJS~t7m4-VkPpwFjT&THnAeGQBxA$Uog9 zJl!`pfM*qqq~u^%W7l0wk;6@&8pNi3*^;|4^DIgZ`D-tNY4U$QK7IInc|Sq_Yg@Vh z-d42YO!elGfPnT`|4%U)O#eBl{O3JcMg|5NW|n{7v9b6bS2+JSQtL29LZG$8iBed8oY3qE zsrGbExWs7F(|9xK0{es4)}2rLRGz8H)kEcjrp3qRL+4qBBOVuplD5B@nv&j^n7&W# za#sB_mVR<*O=!!Fks(uU&56<+g%OJ3&6s=@N$5Kytx!GSmXM>@5D_i}H#*YCg%1%N zmR-;@8u*sK>C#4?R%}QZQHLI?pNEMES+Uz!T<;eGQ4JD!fA0@0NIaAp@P2n-RM=ol zU&KQuefVxu0lr|9ZqWQ1LQ4Te*cwdonOU}4PyrytKqBA2)hqP8z6f=8>83 z7ulZp<4~lpE^7VKg8bRO17sSz#FDU``3Qe{e+?tZlRq*LqJ}*aoi-CjA>8Q)26*i< z`GkxTCWC>6WPadSZQz{)zL^YQ`S?#ndR%}wzB=;8070VT98u~*P9UVibB5MUH$Jdf zbO_!#{5O=bA`N^AjqP_!Q`$H^h*iD`MTozPUy&{5cOH8W29j z&xjJ|a|GDqz-~xDw7|Yx_?R~tO6NJSyVnfb%h>){BFMxb{M3j=nixAAW$X!kzUaGU z*&ehEJS1E|Mm0kJCNqG;$iB%8&ywq9Vrt;Dy-A3d<1S-8Hf1mRXj*p|z0lo0a)QDq zX9`}F<8XUyq(V+2*n zP2}zUc;UVbC4KiK;Dqs93Pn8ZwgkpO9C5;ZbR{IiBnD+p9u0-!uQ^Xy)h-pz zdw?D*n|mZRWH#*7{anUS?26v2EcS=-QB$f>^3jzN7O_I|D>l7CQn_RdO-tfszYDh%HM)!rmKEG?N1}Is#MES zgKb%hPg^ZMrG5ml%Gldu%kd>K=b(JByseAOp7oGIK4c%)8R{3Te1YT@U1 zr3AN1BN$Q?ao!H*X?vnF)?5Qf?+BjI?CHU zBfhahK`YxJ=Q}F~&dgMTChUA80`|tWxBnhz7$*EMeZAxsri{-6(pGZxt7->5cpNm(_O%W@WXrd zEF!=);g+yHQ1480o?yoXs`|L4S$-%YoYk3HjcXXO>;tn4%<NbDRf?kkC*bMHWj6Ee^` z=7~Oi$@ZWGE>p*IXK3mB8yIVOFo+<7J_^jSn8c8u>jusg!|m4%%A}(_x>`XEy!{=CFp~hRC=)9zVhj0m5R}M#&&%KYAFH zX!*HN)#!I$H4QhqdUtgG&fl65nm0(TlKHF~#XPdf@w#!BJFimgbJ3IN`&cEp^MQ42 zgQmeh)ar31iJQ{HIHt1|J2-brmxx$eTFd^dgMo4|B;S;s%*KqPbHP2uS*M+y{ z?$S&|H*H@c8d-S5DES`i<}>UY6_mKpLIiusjo5ljgq`|#twZZ{bL`T}*W8rN-3%+G zR8%4^D|M$fFw_<*1XR4VGSP93MgTZ9<-kabDr+!vj%(zM`y6fcYQm2YpKGTr>NHciBbD~5uD4kI`} zIM?NQC`{>+S@T>uO3TEjaBh9$WRSP&K@QLy8ED;Kz$gXnrL`gO)+*)rwRZzA%XHZe z<1x>);*o84N@cL&rJ6DMpziSEw%uSS+{WT09b^LdTBR*(s=KF)ti|S~H6+a@QL6Oe zidT)zRzhspy8&q!xthnMUVR|~|NVNR@FodCFyGp);InQvr561gi61LV0>3fGU_qJ1 zDAw)Zupx85P3LF8LsD6!?laOaTbV_6;&}ic*+s%>qJL>#jRnD^#aNn>2v7VIAw^jH zO;aKLcF=5HzO8XlSj5GZ=Ft+Y*Zk}1j%68PrQY!?r%K9GVgIXfV3e9_QPcbR*fdrV z3w|v8Nt3Q*bsDv5+*ct*fpf|D-0AMBq4FV;MCtD3} z`;$GIO;W&Ke%S?7-`<7a2qn{v%gyXvb(!gpFcO!=kNKo8FGrMFZl#EjJp+cP zCGjuTw6yr7m=_(@yyjKL{CsVRVBEIfvgk57dkO%QBoEn(C51Q`NOuAj;>u}BmMuB{ z+Ve|>+n^9vH_hXP<>E@YByUZ(7WYpmm+n?V#RcV2K2(rsu6;>zru3QN*WAQ8q`*=1 z%sIWqrm;%l-9ru>PtKzf8Rw~%hh^?M6o|f~AziyYnl{SSr!z*&cP*(gg4I9_bh%mY zAc95uC;HKk()a1}dPrIt!RUA#kH`5OaY0Y#v%jidjjM+BF?M5d7#zwmy(&hDM5<%d>>rLl5im}A3}Mr7zt^m%OR!J zeqAm8Myc=HYc9OV+e**Jo%4Fbn^=jcgUJ6;8J{3aIKX%z9)lwxp>t;A&UH4g>}Fvj z*=<#xG}FFhM~0Pj7Y6=OQqjh7Ja~!436p0Ej$t%7LK0Hy@1wr0D2eh1g-)P;PJzz* zSE1b|7;|-`L!qf-z3-<|?PI|a-->%3-{E5qgW8biqD zz5IZaO+&3+k`h<0x&I(domK1|2fHgbdu3E~S(Js8B5AlCl##PxOK3@Qgo@s~jBvFjc2b!9`v)JV{$z$MwJhzf@7KsdUIU(s^nAn~ z>k0hKTJ!7cUlx;jsuSqb;1Q1~Z@C3&$xd{u2SzW*>@4K8-)(|Nlc}I=X%A=CvL!Dh zXBoYd0?C@k74e3aO>0R~q;#uB_?lfBq|OQ*FNyLe)ij}!+qTJqW)WSs&98p}yB78>uI$36^P zveC#U6q{-*nf*eg!9-m6Iiu_V3>&PrGN2L#QE{hEkH~`F_#+P*t+Yxev!~Aw9Rc#` zP63U{TI*SRXwPM-V);r-48GYdm-NGImJPkI@*~zgU6XdTW?=|p$_T95WJR6pGEvu( z^{l3(n&2Plb#YZT)?U09W_<`GcBD{nGnl8E=GW z&ti6UkN2l&iVzGYV2v0J1N)n@Xj-e6?!PoQ8^B;AeyhGtkzkg?C(FA6IQHc#Ec=U_ zRP%6n0T%6TweB6UtioaAZ6MeeUdgR5qx76EdyykP=jo-1x!^{srGJ@1#c}lq)9~2D zNdUEB)t{YBneWTFZGB5fxJ!|q9mOe9U(A2B?5Ou-D&jn#)AUmDz0b294o2gG$W$&| z_N8?zd=9H#@C~W{4qcJaF;25gP~<7iYYc2|77vt5&b5(lNReMNeasiy%hL^!eZ^}3 z?)$(?`Me&+Dei5oknLVRXD)N!$4F`M~7za#DPcF7ojsi!P8 z+hmCh^;oqs&1x5FaV23qaDw&{&OHlb)7Lb}P_0>D@RD?Vj@Gkzg`LHF{if zE7FCsq^)D3q2$6mZraOzBpOFMIOSE2+%V$`F$rp5iBu&>*zZtS zIy+aW8&F(3tWvvtG=FL72h+HH`P)b}G}4H>)mj-^@42>StNJ4PR%;ctTwffh#v;Af z@u>I^NLe%ynVe#sZ( zZtyt*nv81Ex;cUpE21eNF6mF0e8TiwTtM-t`O@)a-eLBfTu%a5W?vAz!$ zW5=5>SNSQWBsSc<3y;sQMmPY^PsN#EAFs&Q>L0xGgV?NK8sc9v5aKl>>c3^6C9Nh< z@a0~JMv2EM7ZQFJ# zwr$&~*tYGQ)VKEe_uBic%l}-=+1h*m&erDWqxa{@_<1CNE!(o+Niq&2-QyqYV-iXY zEFK6`kbk0Hsc#*d_mO}^Bo0j#89K#tKy6^271ztU zp0&Kk!acyBHW*~ZWk{g*CC%`n$bP%PV<(y31;?3F;U{SHf~cHz+q?zl6q1OzV>`3& z&j2vMA%WN5pk6!(6s{x6y!;=J3)c{`xuj|_JUl*&OdLmHzV@wk1RUz3BWM7OM1}O7 znGn$P(xLlF_k{SEX#5bO3eml| z@mOXl+t|Iz4`zSIK-7Q7Kq=4X&*<+MJ5WS}T_F78c1!S9^z?L(W`D;(8sB3em#De) zbu{k3W1y{n#y~0GW1u^;NJqI>Q2g%m>s4aX9_ zg+u58jRpQkqTCyp8yfl>4hw+jS|TtgRMwtZOv5+k8`VqvZ4%<$~R9O&aXx5;%lnd{&3NTnD~VDzUW+$o@&1tQ2l$Jup|8hgHr4HRE{eQa~bt@0E@H ztfNYTMA5bZ0wr0-)>~f@qz95qpQRF~l+$n8P zJp_cMZ%y{}0;B2FW*6QCahK+lzpK$VI6k}zKE~28{QuV;Xs!0&_CV%b`u+`lnlz0s zjyR8L@;Ylz6nHVl7M7~9P{Dg-qeAXJA-eEN0^vBqR3oi0w4Ve?FsAfwX>dRkJ_^%^ z@l0n-Ji(yfuwIaV!FnUuL@kDZgzjNXu-w}B?c0$toog=;IRRqsZYVv?5dGumR)KmV z!&kwVcYbyo1bY&G!+IMJm(^P})HtSar*+8;>Cnf9sONG=bSLnA1gS7v)sa!5kIcBcuT+^-B#%;I=RCa4Tr)Vg{G%C>fFY1V{u2|!&cW*&U;)C09m6m=D_tWC zmo8Un-ihy4*XZ{&$Iy6qeI6G%EH1}Y77`M5Ej?PEN~4`N#pzDAo7+5k_VcK)>!^9@ zFcS${RU?62V{cV|i&*MzA?fKO4^fHRqbYjBETCswYLMKo@lr+MF&*4E61M=i&ugA; zFR?F4Nwj8c8E+|k59A%tvtPli7DT~a={M=khV#nfbXY*_t#H(>Ze!qNhEG?`t&#V5 zSQtxQNP_gymFCUraQ|vjlG%mkCGoWZGD}UfOx2yX8zsx2=lZ5nlu7olE*>`T(S{1) zPMxQ&olJOYM)UL65bY6{m8qZ5G!62o|VX)eiTYLZg8mjW(?SuMiGfKXac+J9SJhSY9=|G2L zWMBkJn5SLR-;{NAdVX#VUAGVMxr|dc(z8}KqJ~~*8*H#B5_E8I)I4gCIksBRr%7EM zS^H$&YqQ|#o@e1Fex8;sHP3pRf(oqs$<9LN4xc6H5G-f zXwI;0md^P+v&?ix7QBvoVNp}#QKGDkW$n{R<9CYqq!!EKzU~`xbIFYagLTP+p@u?} zb`bmFeEtv!6f_3|+JBZJroDxcjebba+;QTh2EDlUwc(%af9BC_Q_b0x53%ue?q-+e z;_CV=^8@OkTyEMZW&$_Kon=c1stRgQnHCE)ga^y*T1mlaMl0k^ecaqdyQ;kiDWFtr z=)-Z_Z8EC@qw}MhG<(wXfKKs`r^Vv@y@7UA3U*UFExe@p?xH}%CRg|MT|Ju{PvFAy zDhroK!{g1I)$mAkOI)IP4c?aOCR&5qNRc9y4)f#(2Xj&RN>;XLmA z2VI}fHRWd5bJE}$2^La0NV0zJPv< zG8|r*nNCVXGvNkP0-`{|LX4Uul_P_wK(!$Wj{5fzCzUz(XTAAYNxs>EloH7LeNKIF za{G26h8(+-f0_ZU5$Kmw|Ki)&s9}VORF%)Ub=c#Zz-w+SRXCjO3>X&L(RC&+%lu zGm|Yg<#(3`hiW6PCbATFq7FNzIK!h;!$hOP{cmF+(yoJDe#+g`+c{EHMOn%`^P*a+ z4(|dI<5k4EF!We&3h z9_>^N4C6OlLeWQEPBye@`p?+UAHzhO$98+?j~=ZD7Y(+fH;@L5~+Gm9*j78qbbBC3hNAoEjb1YmitDQ!iXGVu=2Uo@q=;g0jQ3s7q zH`c`D2c_mPA4Jt`6AwXCV*F8gkz?<2+%SYh%ElQoz-BNdR?!d4ZFsV*_07WFOLC$U zA1_i4xgZ*7VH=7-8>Cc{2gtBBGF?Z$U>KbaZfcpR*A_k*62Ep5^6RQ9dGV;YGwxUh zhYoxDGM<})YuoDr98|Ovcffv8)KMLgYE$1;Pk0k3Q`7Sa%V^CUrOox(2}3yLs(@0> z)!tG{XVRNFgeq9xg}ra0UO}bug?HMZn7wlJMk6XsXJ9Y}tK-SDJ&ogkijJJe%Y;h5 za8KVW)V7*SJWh1FaCA67Ry#*YwY8d4o}WzLS!C}!zX?iF=}&2D*ne2hAeGIJMLMzc<`x>8!T z&{DEp2dMn%jCWy>9|2Z|lQw3u%(Eb)-E|pF=dG+bw8AYlo{eF*se!I^Xslgr=eS0p zn`#(%h-=%1>0!ygS=L!Ev^5+R^L`8)@^H?8Q`aq5oUx%@ImpA${Cp!cGHFDAZXIBnx^h-yk5-}Q+Zvp3F~tn zf`_xtb_63({oehno6dTU-lp>Xr=Bcf*`OAckMw^%{T3R*57jrDENcMLPvjIr4 z>eKi9aq5s%Qs@}mRIl~Im*MV&xhswKW1Hhj?QYZsca{zYg?=$aOUTkAc0nRtggCfz ze=a4jJ9*}WX)etAVi_^LYb2pbgYW%Z4o_#W0=vFu&|OW)OEwf7Ol#F5!$u20wNm(+ zCG4OZ1-IFwoUM{qerub~PyG_I+OitE47K3h z(pOz%h}!Xd;-=T-W_$JVYA@)}RAzH$@iaLm$Gil!`M5aDU<5a_kssVC=Et~oGIk}_ zkSjesJe zorQd7BiaA|Wh0CXbc}yzPXEeA=&9+M7^xXpnf}Q}OuuuHzn}k4Hu5in5q>CPI21mG zC>9RLps${stf5HWd0lATG7(I}x5VfdFz~yb9x{p@$UZsQv!WvKAc&Bi&dPuha<7)I zZLin*@Yi2`(a+P!&o7Sur7vO~SQ++X4CI5UKiI|txn2T!C!d=}?_3$OWZa`4D$0+N zqLP#xPLC|of%U`~CekN_FCtb5w53OgF&jbd1G;Tz48D;aKq1h@mF&^JwYdRLl?d0( z`>QVsA*{G2!yWU_7ebfty@BV3-`CT`*N2*QC%}#tc8x_R?vo=B3?z(IWZZ`dxkjKP zKo)xD%rs-;l7=K;&Fq7p7z74N1SgRNBp2DsnnD)75#wMb;1AN9;4KxJV?u-!xq&Dm zCXd&BCiY@QBp>h&7Vdv115OE8r(eqQ1&pRcwn#}}W!He^#>?j{zL5c}E_fD;z5Ok>4!A=I+-H%7 z<*(-njM~&f8_tiPm>Io0?@5OJkHCnZb96nhClK~;Fv9h}f)Q|3q5qqq#9k}`<@M-u@kfCx)S=vtRzg<6(hUFe&VqWT?-T)ZOre+MH}{|ZKiy-86t z{!cK%7!QvCdC*U^p$<-3euzx~7e=7s=Sc&YLyrJ__k!F`l$mf%4M~cGzw)C?(e<3( zJCT<)=wAjSX(bNmefj^_V6?{lAu8AW7=GgNZ^6i}Z6cQR-zp9~HbU<=CB=u}8@7iR z8V$P)*H6kD)Md!^`S`vvdw!1ucwlcN;M@S8Knq|j%5UJ#hJ;>{1wTqT`Yl+-4MdDx z2B(`wW#z^W@eKS8-;}X?tc-3%8CcPy13ZR+sPhjcW%w^81-7@hPNIAYlfV};J5H18NXaUt&9LaPbY6z$2{Hefs2>8C% zolpRlz=3TdP!@X{l1O1eV6SBWd_SF^RQ!SQ&buCE1-)ily)4y6%5DDJlQr zqynD$2Tr(Ez>d2Uo}bj5y*vKS55ZX)D&H=GKB4i&wg34Xo%vEb-J^$n`2Znl?aXS zCqUT#v7;m)9HBoj*kGqIV4#`>zCkGhT@9(QV2t<<3Nw31tX^7zTP$|G7vDcTGnng} z9ai4^4LB%B_|-YM<0a}{qNAQ4=pmB7!I5|7TJP<5cwZ}TFvLk(b@gw{&rd_e{Q=GV z+L#m4iJXSxP?3ZOM+Xp9b^d}&5kES`g}~MLza7i3gty<0 z~zvr=lH5W4UzwXQsgvu>)}~z@HOh(j^s6h_oGj{Nz*&4!lyYzV^c1&9IZO{kNc$~W zHWTu_eIbL5^^a}VM+l4mObSc}(JNjd`X?CS#QhFNu$@K1sw@AtZxk@UEk=I-W-&_D zA2vnZ-}FcO${Y)BNbQ&~0Zi)twit<~H)h}&2>b>)^oxq(WCx7NZwX~G$o=_kF$(Iy zv2Rs^jN({!4zmS_c{`x=6hky7sBHl8#XxCJ(v$8m1a03p= ztx4#WHTH>z76R=Len+U4v;yo0`gKPP~VA%q?f+FG>tqQ~wam(F= z$^53BT%cmyp2>KEgyryZG;6n;MC4+r5G)6$V!&cX2nigrU{a>KU7MtZ12#d-dz&x<8ljbLX81C}r zv^|WqHsCczHomAB8yQ~njPX5lW32ZfO}eFG!jCTNP<`0l>kTuP#@zEU9kpVvsk9X) z&f*a}N$C%a;L^jR4J{I*!@pARmiX3}^gX*;Zux?)I^S$4u!?1JvMbfh6-^p1`lTYQ z+&!w{s#7};h5`n77O^h6EpV={mFyN?n1!NjZm&zjdH2+S&D14)>i=`SJ4M37BN>_9oiSN z-K5Rj;n|zbIE>y?8O00JvFn6*7B-vjT&h>Il|w`i^OwD^CM}R5I*J=>*^I|YKKtHQ zj{{qQ?H$aLF`K8SPPSQ>rb|6mC8HiWDsFda=QqL%`k$HV^+folcb+j!g(OYdDLqAk zM+K!JIAti;4&x?;&eOH_rwX;BjfQ=mM&)C!JW@B6zB(Ri#yIWpqh}~~`R*N2gYipM z*|11e9_pLj9>-BHRYDmb3R&W6lWZmtPc4QaoNBVoBbNltcG}@?Q_?PPkoAs(6i*8?aXSee@hj7H-g7;_Hwlb9Nv7wSU!-Q4V>4L~v9;uRNGE#`Q%?uumrZ!o1hO zzHtmq{~X(g;z&uipZd^HayUAcYTtUos3XX?*Y4$@P0~(B8Loz|5=UWu;S4>w@vr{l zxkT&Dw_x>WcWo`0s=oz$^Mg39qsH)9`4z>DOQrKH*| zjc=vz;Mg{MXiT838px!oA>G67W7llBUM0|)vMYA-)THc>2eV<>;=M@G6MOX^C`BMB zG}M&iN39zMZ~B{R?TYtcTo-4VDupTt*$LsyW^N30FY}G~W_3^+7AJADbTtSmq@&>c zwW^lK>Ff0jR+p7Eu~?JCk?@CN?Nya62hIokbWD>^{(~San7^(n2sRe?FdvuafG9Mqg^x+okX_1MO zcn95HD(5WmfazHicTCiD+_DdrVRX`{E_&C~bw?q;(;Yy8X-UdRsgA=)yg!X=+|-3f zJ!k&;B;@Db&657K={Viy-Q|lUn)$Qd!)yzMFU4Qzw!f48(wPr0!6CB8s8?;NbE@6Q zwV0k?ee(cY^GPmDICDC$&3!YZ_+|_i#D=ZaSspzf$UlVXnu}i-2`RJ*4U#9wz?FV& zCZSy*u4LKWHTLm#R}P#RaE-&@6AvzZDV$t#*39|nYc;tiC_I1Oxy49QvMYjWTd@MX@q`G z%?}JVISw+6tp%jAx##+8A!q7^xSDB%xR5>fYqb%gzX|5eP`2x;E=o*gShP||D`(M! z+k!Lys^M|WiE&Y~;OxwIIAJW=WJQM(uiD!zQm6aEqs}L-WLK`F)=aq1aC(MP4uwM` zhnrc`GAF&vqnhAh5!7D{ZF+@g(3va%<$hm&ZD0h!fI;K|He>?)V z`6{_oyYS=Jt}=udM(Sj_P z)~I1mJ4Jh?enZeSRpnA`f0ekg!oX|gROFsgk%Bg?4Tasqg01OV@YCC`MPnoP3PLy9lv?aaVPIghDXgaD@73bz&WvRbPq;o`up&8m>qh^e#;lz zhW6HQ5c{<3wN#>-g4ha{32s(}&N%YIJb!!QT36Db`D0q)+uF1aPv{f<)}|Mp#51hnt28}JwR&SLjg`9b zWMSZX+o_Tgvlb2?06rdoZ!z8n2r>W)Z;9r9BoRnAMx;mams${sq;P0o z>SW0_HkkCcY7U1dPo2+@$u{Tb7iU!RNUYWH-^#U#^pJhK4ZAr?Q<( zu`QtvUj;K-Kg&9*@9#o#toZ#7tzLm{U{CbeLb>8F-5#N{B62W0p!)X3yMFEtZi4pL zvO6^MMI=OCLhqU4l-{ytt_@7TcqjEV*xR*o`RvhOv6W`+OFnY{@_4z92=OvWV@pZo zsG~ERUD!zWS8`B6dK{QhD>f-MaUb)aqy*qeZD4!ee$8J`25SA8*HE1Y4dpH9#%F?B z5wvI_`^XhAW#T4o0bfydq-PV^nq{3~M@}f4LHlYCTUKqjBu+@#dG-sHViC<*8?w

O-AS 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�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 z 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⪙_viXU#Nxa!r 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 UY(PN`e{&~OQhMj%cUdX_0YCc05&!@I literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/20211216071453747.commit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/20211216071453747.commit new file mode 100644 index 0000000000000..18cf55cc1bfd3 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/20211216071453747.commit @@ -0,0 +1,51 @@ +{ + "partitionToWriteStats" : { + "2018/08/31" : [ { + "fileId" : "871677fb-e0e3-46f8-9cc1-fe497e317216-0", + "path" : "2018/08/31/871677fb-e0e3-46f8-9cc1-fe497e317216-0_0-28-26_20211216071453747.parquet", + "prevCommit" : "null", + "numWrites" : 99, + "numDeletes" : 0, + "numUpdateWrites" : 0, + "numInserts" : 99, + "totalWriteBytes" : 440747, + "totalWriteErrors" : 0, + "tempPath" : null, + "partitionPath" : "2018/08/31", + "totalLogRecords" : 0, + "totalLogFilesCompacted" : 0, + "totalLogSizeCompacted" : 0, + "totalUpdatedRecordsCompacted" : 0, + "totalLogBlocks" : 0, + "totalCorruptLogBlock" : 0, + "totalRollbackBlocks" : 0, + "fileSizeInBytes" : 440747, + "minEventTime" : null, + "maxEventTime" : null + } ] + }, + "compacted" : false, + "extraMetadata" : { + "schema" : "{\"type\":\"record\",\"name\":\"stock_ticks\",\"fields\":[{\"name\":\"volume\",\"type\":\"long\"},{\"name\":\"ts\",\"type\":\"string\"},{\"name\":\"symbol\",\"type\":\"string\"},{\"name\":\"year\",\"type\":\"int\"},{\"name\":\"month\",\"type\":\"string\"},{\"name\":\"high\",\"type\":\"double\"},{\"name\":\"low\",\"type\":\"double\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"string\"},{\"name\":\"close\",\"type\":\"double\"},{\"name\":\"open\",\"type\":\"double\"},{\"name\":\"day\",\"type\":\"string\"}]}", + "deltastreamer.checkpoint.key" : "stock_ticks,0:1668" + }, + "operationType" : "UPSERT", + "fileIdAndRelativePaths" : { + "871677fb-e0e3-46f8-9cc1-fe497e317216-0" : "2018/08/31/871677fb-e0e3-46f8-9cc1-fe497e317216-0_0-28-26_20211216071453747.parquet" + }, + "totalRecordsDeleted" : 0, + "totalLogRecordsCompacted" : 0, + "totalLogFilesCompacted" : 0, + "totalCompactedRecordsUpdated" : 0, + "totalLogFilesSize" : 0, + "totalScanTime" : 0, + "totalCreateTime" : 750, + "totalUpsertTime" : 0, + "minAndMaxEventTime" : { + "Optional.empty" : { + "val" : null, + "present" : false + } + }, + "writePartitionPaths" : [ "2018/08/31" ] +} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/20211216071453747.commit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/20211216071453747.commit.requested new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/20211216071453747.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/20211216071453747.inflight new file mode 100644 index 0000000000000..6dc689a285d97 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/20211216071453747.inflight @@ -0,0 +1,48 @@ +{ + "partitionToWriteStats" : { + "2018/08/31" : [ { + "fileId" : "", + "path" : null, + "prevCommit" : "null", + "numWrites" : 0, + "numDeletes" : 0, + "numUpdateWrites" : 0, + "numInserts" : 99, + "totalWriteBytes" : 0, + "totalWriteErrors" : 0, + "tempPath" : null, + "partitionPath" : null, + "totalLogRecords" : 0, + "totalLogFilesCompacted" : 0, + "totalLogSizeCompacted" : 0, + "totalUpdatedRecordsCompacted" : 0, + "totalLogBlocks" : 0, + "totalCorruptLogBlock" : 0, + "totalRollbackBlocks" : 0, + "fileSizeInBytes" : 0, + "minEventTime" : null, + "maxEventTime" : null + } ] + }, + "compacted" : false, + "extraMetadata" : { }, + "operationType" : "UPSERT", + "fileIdAndRelativePaths" : { + "" : null + }, + "totalRecordsDeleted" : 0, + "totalLogRecordsCompacted" : 0, + "totalLogFilesCompacted" : 0, + "totalCompactedRecordsUpdated" : 0, + "totalLogFilesSize" : 0, + "totalScanTime" : 0, + "totalCreateTime" : 0, + "totalUpsertTime" : 0, + "minAndMaxEventTime" : { + "Optional.empty" : { + "val" : null, + "present" : false + } + }, + "writePartitionPaths" : [ "2018/08/31" ] +} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/hoodie.properties b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/hoodie.properties new file mode 100644 index 0000000000000..4754c1c23eb2e --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/hoodie.properties @@ -0,0 +1,13 @@ +#Properties saved on Thu Dec 16 07:14:51 UTC 2021 +#Thu Dec 16 07:14:51 UTC 2021 +hoodie.table.precombine.field=ts +hoodie.table.partition.fields=date +hoodie.table.type=COPY_ON_WRITE +hoodie.archivelog.folder=archived +hoodie.populate.meta.fields=true +hoodie.timeline.layout.version=1 +hoodie.table.version=3 +hoodie.table.recordkey.fields=key +hoodie.table.base.file.format=PARQUET +hoodie.table.keygenerator.class=org.apache.hudi.keygen.SimpleKeyGenerator +hoodie.table.name=stock_ticks_cow diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/2018/08/31/.hoodie_partition_metadata b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/2018/08/31/.hoodie_partition_metadata new file mode 100644 index 0000000000000..1aaf9e64d9332 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/2018/08/31/.hoodie_partition_metadata @@ -0,0 +1,4 @@ +#partition metadata +#Thu Dec 16 07:14:56 UTC 2021 +commitTime=20211216071453747 +partitionDepth=3 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/2018/08/31/871677fb-e0e3-46f8-9cc1-fe497e317216-0_0-28-26_20211216071453747.parquet b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/2018/08/31/871677fb-e0e3-46f8-9cc1-fe497e317216-0_0-28-26_20211216071453747.parquet new file mode 100644 index 0000000000000000000000000000000000000000..b97391697e6242ef36b01b70fde44dfc50bf01b3 GIT binary patch literal 440747 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 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211221030120532.deltacommit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211221030120532.deltacommit new file mode 100644 index 0000000000000..f9e28873d5244 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211221030120532.deltacommit @@ -0,0 +1,51 @@ +{ + "partitionToWriteStats" : { + "2018/08/31" : [ { + "fileId" : "167a0e3e-9b94-444f-a178-242230cdb5a2-0", + "path" : "2018/08/31/167a0e3e-9b94-444f-a178-242230cdb5a2-0_0-28-26_20211221030120532.parquet", + "prevCommit" : "null", + "numWrites" : 99, + "numDeletes" : 0, + "numUpdateWrites" : 0, + "numInserts" : 99, + "totalWriteBytes" : 440746, + "totalWriteErrors" : 0, + "tempPath" : null, + "partitionPath" : "2018/08/31", + "totalLogRecords" : 0, + "totalLogFilesCompacted" : 0, + "totalLogSizeCompacted" : 0, + "totalUpdatedRecordsCompacted" : 0, + "totalLogBlocks" : 0, + "totalCorruptLogBlock" : 0, + "totalRollbackBlocks" : 0, + "fileSizeInBytes" : 440746, + "minEventTime" : null, + "maxEventTime" : null + } ] + }, + "compacted" : false, + "extraMetadata" : { + "schema" : "{\"type\":\"record\",\"name\":\"stock_ticks\",\"fields\":[{\"name\":\"volume\",\"type\":\"long\"},{\"name\":\"ts\",\"type\":\"string\"},{\"name\":\"symbol\",\"type\":\"string\"},{\"name\":\"year\",\"type\":\"int\"},{\"name\":\"month\",\"type\":\"string\"},{\"name\":\"high\",\"type\":\"double\"},{\"name\":\"low\",\"type\":\"double\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"string\"},{\"name\":\"close\",\"type\":\"double\"},{\"name\":\"open\",\"type\":\"double\"},{\"name\":\"day\",\"type\":\"string\"}]}", + "deltastreamer.checkpoint.key" : "stock_ticks,0:1668" + }, + "operationType" : "UPSERT", + "fileIdAndRelativePaths" : { + "167a0e3e-9b94-444f-a178-242230cdb5a2-0" : "2018/08/31/167a0e3e-9b94-444f-a178-242230cdb5a2-0_0-28-26_20211221030120532.parquet" + }, + "totalRecordsDeleted" : 0, + "totalLogRecordsCompacted" : 0, + "totalLogFilesCompacted" : 0, + "totalCompactedRecordsUpdated" : 0, + "totalLogFilesSize" : 0, + "totalScanTime" : 0, + "totalCreateTime" : 1402, + "totalUpsertTime" : 0, + "minAndMaxEventTime" : { + "Optional.empty" : { + "val" : null, + "present" : false + } + }, + "writePartitionPaths" : [ "2018/08/31" ] +} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211221030120532.deltacommit.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211221030120532.deltacommit.inflight new file mode 100644 index 0000000000000..6dc689a285d97 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211221030120532.deltacommit.inflight @@ -0,0 +1,48 @@ +{ + "partitionToWriteStats" : { + "2018/08/31" : [ { + "fileId" : "", + "path" : null, + "prevCommit" : "null", + "numWrites" : 0, + "numDeletes" : 0, + "numUpdateWrites" : 0, + "numInserts" : 99, + "totalWriteBytes" : 0, + "totalWriteErrors" : 0, + "tempPath" : null, + "partitionPath" : null, + "totalLogRecords" : 0, + "totalLogFilesCompacted" : 0, + "totalLogSizeCompacted" : 0, + "totalUpdatedRecordsCompacted" : 0, + "totalLogBlocks" : 0, + "totalCorruptLogBlock" : 0, + "totalRollbackBlocks" : 0, + "fileSizeInBytes" : 0, + "minEventTime" : null, + "maxEventTime" : null + } ] + }, + "compacted" : false, + "extraMetadata" : { }, + "operationType" : "UPSERT", + "fileIdAndRelativePaths" : { + "" : null + }, + "totalRecordsDeleted" : 0, + "totalLogRecordsCompacted" : 0, + "totalLogFilesCompacted" : 0, + "totalCompactedRecordsUpdated" : 0, + "totalLogFilesSize" : 0, + "totalScanTime" : 0, + "totalCreateTime" : 0, + "totalUpsertTime" : 0, + "minAndMaxEventTime" : { + "Optional.empty" : { + "val" : null, + "present" : false + } + }, + "writePartitionPaths" : [ "2018/08/31" ] +} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211221030120532.deltacommit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211221030120532.deltacommit.requested new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211227092838847.deltacommit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211227092838847.deltacommit new file mode 100644 index 0000000000000..f1cc26fecc7b8 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211227092838847.deltacommit @@ -0,0 +1,55 @@ +{ + "partitionToWriteStats" : { + "2018/08/31" : [ { + "fileId" : "167a0e3e-9b94-444f-a178-242230cdb5a2-0", + "path" : "2018/08/31/.167a0e3e-9b94-444f-a178-242230cdb5a2-0_20211221030120532.log.1_0-28-29", + "prevCommit" : "20211221030120532", + "numWrites" : 99, + "numDeletes" : 0, + "numUpdateWrites" : 99, + "numInserts" : 0, + "totalWriteBytes" : 22220, + "totalWriteErrors" : 0, + "tempPath" : null, + "partitionPath" : "2018/08/31", + "totalLogRecords" : 0, + "totalLogFilesCompacted" : 0, + "totalLogSizeCompacted" : 0, + "totalUpdatedRecordsCompacted" : 0, + "totalLogBlocks" : 0, + "totalCorruptLogBlock" : 0, + "totalRollbackBlocks" : 0, + "fileSizeInBytes" : 22220, + "minEventTime" : null, + "maxEventTime" : null, + "logVersion" : 1, + "logOffset" : 0, + "baseFile" : "167a0e3e-9b94-444f-a178-242230cdb5a2-0_0-28-26_20211221030120532.parquet", + "logFiles" : [ ".167a0e3e-9b94-444f-a178-242230cdb5a2-0_20211221030120532.log.1_0-28-29" ] + } ] + }, + "compacted" : false, + "extraMetadata" : { + "schema" : "{\"type\":\"record\",\"name\":\"stock_ticks\",\"fields\":[{\"name\":\"volume\",\"type\":\"long\"},{\"name\":\"ts\",\"type\":\"string\"},{\"name\":\"symbol\",\"type\":\"string\"},{\"name\":\"year\",\"type\":\"int\"},{\"name\":\"month\",\"type\":\"string\"},{\"name\":\"high\",\"type\":\"double\"},{\"name\":\"low\",\"type\":\"double\"},{\"name\":\"key\",\"type\":\"string\"},{\"name\":\"date\",\"type\":\"string\"},{\"name\":\"close\",\"type\":\"double\"},{\"name\":\"open\",\"type\":\"double\"},{\"name\":\"day\",\"type\":\"string\"}]}", + "deltastreamer.checkpoint.key" : "stock_ticks,0:3336" + }, + "operationType" : "UPSERT", + "totalRecordsDeleted" : 0, + "totalLogRecordsCompacted" : 0, + "totalLogFilesCompacted" : 0, + "totalCompactedRecordsUpdated" : 0, + "totalLogFilesSize" : 0, + "totalScanTime" : 0, + "totalCreateTime" : 0, + "totalUpsertTime" : 187, + "minAndMaxEventTime" : { + "Optional.empty" : { + "val" : null, + "present" : false + } + }, + "writePartitionPaths" : [ "2018/08/31" ], + "fileIdAndRelativePaths" : { + "167a0e3e-9b94-444f-a178-242230cdb5a2-0" : "2018/08/31/.167a0e3e-9b94-444f-a178-242230cdb5a2-0_20211221030120532.log.1_0-28-29" + } +} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211227092838847.deltacommit.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211227092838847.deltacommit.inflight new file mode 100644 index 0000000000000..724ce56ff0d6d --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211227092838847.deltacommit.inflight @@ -0,0 +1,71 @@ +{ + "partitionToWriteStats" : { + "2018/08/31" : [ { + "fileId" : "", + "path" : null, + "prevCommit" : "null", + "numWrites" : 0, + "numDeletes" : 0, + "numUpdateWrites" : 0, + "numInserts" : 0, + "totalWriteBytes" : 0, + "totalWriteErrors" : 0, + "tempPath" : null, + "partitionPath" : null, + "totalLogRecords" : 0, + "totalLogFilesCompacted" : 0, + "totalLogSizeCompacted" : 0, + "totalUpdatedRecordsCompacted" : 0, + "totalLogBlocks" : 0, + "totalCorruptLogBlock" : 0, + "totalRollbackBlocks" : 0, + "fileSizeInBytes" : 0, + "minEventTime" : null, + "maxEventTime" : null + }, { + "fileId" : "167a0e3e-9b94-444f-a178-242230cdb5a2-0", + "path" : null, + "prevCommit" : "20211221030120532", + "numWrites" : 0, + "numDeletes" : 0, + "numUpdateWrites" : 99, + "numInserts" : 0, + "totalWriteBytes" : 0, + "totalWriteErrors" : 0, + "tempPath" : null, + "partitionPath" : null, + "totalLogRecords" : 0, + "totalLogFilesCompacted" : 0, + "totalLogSizeCompacted" : 0, + "totalUpdatedRecordsCompacted" : 0, + "totalLogBlocks" : 0, + "totalCorruptLogBlock" : 0, + "totalRollbackBlocks" : 0, + "fileSizeInBytes" : 0, + "minEventTime" : null, + "maxEventTime" : null + } ] + }, + "compacted" : false, + "extraMetadata" : { }, + "operationType" : "UPSERT", + "totalRecordsDeleted" : 0, + "totalLogRecordsCompacted" : 0, + "totalLogFilesCompacted" : 0, + "totalCompactedRecordsUpdated" : 0, + "totalLogFilesSize" : 0, + "totalScanTime" : 0, + "totalCreateTime" : 0, + "totalUpsertTime" : 0, + "minAndMaxEventTime" : { + "Optional.empty" : { + "val" : null, + "present" : false + } + }, + "writePartitionPaths" : [ "2018/08/31" ], + "fileIdAndRelativePaths" : { + "" : null, + "167a0e3e-9b94-444f-a178-242230cdb5a2-0" : null + } +} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211227092838847.deltacommit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211227092838847.deltacommit.requested new file mode 100644 index 0000000000000..e69de29bb2d1d diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/hoodie.properties b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/hoodie.properties new file mode 100644 index 0000000000000..33392aa182f21 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/hoodie.properties @@ -0,0 +1,14 @@ +#Properties saved on Tue Dec 21 03:01:13 UTC 2021 +#Tue Dec 21 03:01:13 UTC 2021 +hoodie.table.precombine.field=ts +hoodie.table.partition.fields=date +hoodie.table.type=MERGE_ON_READ +hoodie.archivelog.folder=archived +hoodie.populate.meta.fields=true +hoodie.compaction.payload.class=org.apache.hudi.common.model.OverwriteWithLatestAvroPayload +hoodie.timeline.layout.version=1 +hoodie.table.version=3 +hoodie.table.recordkey.fields=key +hoodie.table.base.file.format=PARQUET +hoodie.table.keygenerator.class=org.apache.hudi.keygen.SimpleKeyGenerator +hoodie.table.name=stock_ticks_mor diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/2018/08/31/.167a0e3e-9b94-444f-a178-242230cdb5a2-0_20211221030120532.log.1_0-28-29 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/2018/08/31/.167a0e3e-9b94-444f-a178-242230cdb5a2-0_20211221030120532.log.1_0-28-29 new file mode 100644 index 0000000000000000000000000000000000000000..da3c7bc07ee1189212243e811d255fb1f0cafecc GIT binary patch literal 22220 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 G@P7gDfMlQm literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/2018/08/31/.hoodie_partition_metadata b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/2018/08/31/.hoodie_partition_metadata new file mode 100644 index 0000000000000..340533d6e6809 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/2018/08/31/.hoodie_partition_metadata @@ -0,0 +1,4 @@ +#partition metadata +#Tue Dec 21 03:01:25 UTC 2021 +commitTime=20211221030120532 +partitionDepth=3 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/2018/08/31/167a0e3e-9b94-444f-a178-242230cdb5a2-0_0-28-26_20211221030120532.parquet b/hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/2018/08/31/167a0e3e-9b94-444f-a178-242230cdb5a2-0_0-28-26_20211221030120532.parquet new file mode 100644 index 0000000000000000000000000000000000000000..9fe2112d09bb41e59909e7ea3a3a7b9f24d39300 GIT binary patch literal 440746 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

hr@rx0g~n^tOqV3 zhmB)JhrKvb0a#|aEuyPGJUCpkf#*7CtGs`&lo7Ea8kP}yT>8XrZlc*yvpm392zYoX zo?_ce>QNUa7iswBNw3fvHy$lqy+Qyg*$uJOOBlZVo zn9B!@6~ctX2197TZ8=MUV;?4N0EEo(DBBp(35mqPNks}lLNx2!{OsV>*F#9vBmh3erUKB^*S*O#FlpKNCb(kDXT718{9}3P!GsTXLrCGIy*vH7TjA6ZAx53FDp>L z`gNr;$Ok`T!d!V{w2ix61q`@YgS(F3xf;*qho@~p4B>$ZuEgmh<5wK?m{i=U6~-wm zz7(J+(E7WDSatN2(SGa@Lk#8y_b-L#OyGKQ zY~jRjas_D!!%e@~v|#MwwIpz&=S38iUCf?~Xx|MOnFy~52OEZnUn|^A|y=E*^?Pw?CD0DL6ZBLSd$fCKf+e9W!D6Fd*cT=0SxD7(5^nOw$w! zfqBGIuCZ?S1Y?nO?-fRQ!8au~_Nto{0vf!M;a$Kk!gz60akTIU!W zgf0=#Z>83_Z1yexTtpBP0Bv7@EQHG3!x>Px2%OEPW~vr z(gOcvDPpCgbtsL<{Sf3v{k1alcg zFoXeET?+j=N0m80vOvDFtc*#1LviQc&dqP}LM#wPC za_ZYR)K8dfVGs&~7&NSmqp^m2L39N8iMs<}yxN?)42by_(~1RDfS8mK0H!`?ynOKL z&|ZG!%@ZGDKu|pjlmQmuDGn4*#0)oWMm%tT2tWwjIihf&X{8`dsV#~h50c<9^lGf^ zy4nxL?79HUh0`MO=ZJFmEGJsX#+2=OJZmL@c_hm^$!b2uOM<}fYgLe&$8{crV(2(o z8@#f;jh<~k7b9yr=~<)QsQ}v|>Xw!sy-yGWbd5|)M^Jj=-3{`pj+}t`&jJY@C{`Dq z4cmWbP`rsNm|e?LnDLfo9j|5}t{4#40jx)&JINMQbk|IG2MW$wVy45#{Te}%L%I;S z?BW4Cn5qnBR9r*_VU*}r$&wqqy?Co20 zW7X;%?E{a50^9ex)q401eY%>|KvdCT%R>L6$r1`fJ!k0rs)to0LNK6y{ULx$8jj@) zuVqSt%jTA@^~F-ehJxd69v?a!;o_J!ovk>_^%^?^PW4Pz2zJZ*osa=@D&&@`83|z! zYAlx&fY~i7gZA^n{a)!lE0=6gYy~k*2SuRVp!s;Wi-M0AIacj?405cv4BI)u-G^Qm zQ$FaWkr^Ll!rWOS_}w397;(3#XXB6oj8gSlf?sFOpEH$8#y1n(G=bhZf=iQvk(o26 zert9vL?vi76A1uFcNG8<{b~YOOMayR7dL(1qPV}}f(raPde#F^4S0Y~S6P*tgcDu} zQWT0=At)@&Dtx0N3#;1U+ zj~HGzo>-t#M#{tUlr?W?j?D9RN^KusQPeIX8#y!MA9a%xL8)pX=Z_F45fQOGkn@h= z4K#fFnQMQ?z{9x2xr!+D$B0F5*9?#`Fc70)TnpB9k_?MpEt7%YCuF1*mzEZm6b%_u zGIq#>q7kJN3WwZSG%e$d{QLnI4e5}b)3sf8*LEFqvU0LbYlls>tiAfet1h>%{nNN% z6UI*}Dr+}pLe}J>2@^|7$7bcU&&h6|lhtbYq>|BvS;M;K6^`sWGB2-VhvA)zMt1Jp xv14I&=j_gTMV+!o Date: Tue, 29 Apr 2025 00:42:26 +0800 Subject: [PATCH 02/25] Initial commit for adding trinohudi connector --- .../main/java/io/trino/plugin/hudi/HudiSplit.java | 14 ++++++++++++++ .../io/trino/plugin/hudi/HudiTableProperties.java | 7 +++++++ .../query/HudiReadOptimizedDirectoryLister.java | 6 +++--- pom.xml | 1 + 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplit.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplit.java index 5899ef8936b8c..c36d8ce0984ee 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplit.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplit.java @@ -14,6 +14,7 @@ package io.trino.plugin.hudi; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import io.trino.plugin.hive.HiveColumnHandle; import io.trino.plugin.hive.HivePartitionKey; import io.trino.spi.SplitWeight; @@ -21,6 +22,7 @@ import io.trino.spi.predicate.TupleDomain; import java.util.List; +import java.util.Map; import static com.google.common.base.MoreObjects.toStringHelper; import static com.google.common.base.Preconditions.checkArgument; @@ -54,6 +56,18 @@ public record HudiSplit( requireNonNull(splitWeight, "splitWeight is null"); } + @Override + public Map getSplitInfo() + { + return ImmutableMap.builder() + .put("location", location) + .put("start", String.valueOf(start)) + .put("length", String.valueOf(length)) + .put("fileSize", String.valueOf(fileSize)) + .put("fileModifiedTime", String.valueOf(fileModifiedTime)) + .buildOrThrow(); + } + @Override public long getRetainedSizeInBytes() { diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableProperties.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableProperties.java index 842d1c3a85d44..ddb2c01e8bc22 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableProperties.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableProperties.java @@ -20,6 +20,8 @@ import java.util.Collection; import java.util.List; +import java.util.Map; +import java.util.Optional; import static com.google.common.collect.ImmutableList.toImmutableList; import static io.trino.spi.session.PropertyMetadata.stringProperty; @@ -60,4 +62,9 @@ public List> getTableProperties() { return tableProperties; } + + public static Optional getTableLocation(Map tableProperties) + { + return Optional.ofNullable((String) tableProperties.get(LOCATION_PROPERTY)); + } } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java index 051b9d89bd211..e51e93c7836d9 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java @@ -61,10 +61,10 @@ public HudiReadOptimizedDirectoryLister( List hivePartitionNames, boolean ignoreAbsentPartitions) { - this.fileSystemView = fileListingBasedFileSystemView( - new HoodieLocalEngineContext(metaClient.getStorageConf()), + this.fileSystemView = new HoodieTableFileSystemView( metaClient, - metaClient.getActiveTimeline().getCommitsTimeline().filterCompletedInstants()); + metaClient.getActiveTimeline().getCommitsTimeline().filterCompletedInstants(), + ignoreAbsentPartitions); this.partitionColumns = hiveTable.getPartitionColumns(); this.allPartitionInfoMap = hivePartitionNames.stream() .collect(Collectors.toMap( diff --git a/pom.xml b/pom.xml index f0790c63cf305..e96e5ff85741f 100644 --- a/pom.xml +++ b/pom.xml @@ -65,6 +65,7 @@ packaging/hudi-kafka-connect-bundle packaging/hudi-cli-bundle hudi-tests-common + hudi-trino-plugin From 68bf1f6ea85d32487b17236a6d8316f778317f6b Mon Sep 17 00:00:00 2001 From: Y Ethan Guo Date: Fri, 9 May 2025 10:54:06 +0800 Subject: [PATCH 03/25] Fix build error --- .../query/HudiReadOptimizedDirectoryLister.java | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java index e51e93c7836d9..311ade99b7c98 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java @@ -13,6 +13,12 @@ */ package io.trino.plugin.hudi.query; +import org.apache.hudi.common.engine.HoodieLocalEngineContext; +import org.apache.hudi.common.model.HoodieBaseFile; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.common.table.view.HoodieTableFileSystemView; +import org.apache.hudi.storage.StoragePathInfo; + import io.airlift.log.Logger; import io.airlift.units.DataSize; import io.trino.filesystem.Location; @@ -24,11 +30,6 @@ import io.trino.plugin.hudi.HudiTableHandle; import io.trino.plugin.hudi.partition.HiveHudiPartitionInfo; import io.trino.plugin.hudi.partition.HudiPartitionInfo; -import org.apache.hudi.common.engine.HoodieLocalEngineContext; -import org.apache.hudi.common.model.HoodieBaseFile; -import org.apache.hudi.common.table.HoodieTableMetaClient; -import org.apache.hudi.common.table.view.HoodieTableFileSystemView; -import org.apache.hudi.storage.StoragePathInfo; import java.util.List; import java.util.Map; @@ -61,7 +62,9 @@ public HudiReadOptimizedDirectoryLister( List hivePartitionNames, boolean ignoreAbsentPartitions) { - this.fileSystemView = new HoodieTableFileSystemView( + this.fileSystemView = HoodieTableFileSystemView + .fileListingBasedFileSystemView( + new HoodieLocalEngineContext(metaClient.getStorageConf()), metaClient, metaClient.getActiveTimeline().getCommitsTimeline().filterCompletedInstants(), ignoreAbsentPartitions); From 23f62debb8a3c065e6a1636eab71a5159ae2564d Mon Sep 17 00:00:00 2001 From: voon Date: Thu, 26 Jun 2025 21:07:08 +0800 Subject: [PATCH 04/25] Exclude hudi-trino-plugin --- .github/workflows/bot.yml | 6 +++--- azure-pipelines-20230430.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/bot.yml b/.github/workflows/bot.yml index 36daf72144b01..f0cd54fccac05 100644 --- a/.github/workflows/bot.yml +++ b/.github/workflows/bot.yml @@ -1002,7 +1002,7 @@ jobs: if [ "$SCALA_PROFILE" == "scala-2.13" ]; then mvn clean package -T 2 -D"$SCALA_PROFILE" -D"$SPARK_PROFILE" -DdeployArtifacts=true -DskipTests=true $MVN_ARGS -pl packaging/hudi-hadoop-mr-bundle,packaging/hudi-spark-bundle,packaging/hudi-utilities-bundle,packaging/hudi-utilities-slim-bundle,packaging/hudi-cli-bundle -am else - mvn clean package -T 2 -D"$SCALA_PROFILE" -D"$SPARK_PROFILE" -DdeployArtifacts=true -DskipTests=true $MVN_ARGS + mvn clean package -T 2 -D"$SCALA_PROFILE" -D"$SPARK_PROFILE" -DdeployArtifacts=true -DskipTests=true $MVN_ARGS -pl '!hudi-trino-plugin' # TODO remove the sudo below. It's a needed workaround as detailed in HUDI-5708. sudo chown -R "$USER:$(id -g -n)" hudi-platform-service/hudi-metaserver/target/generated-sources mvn clean package -T 2 -D"$SCALA_PROFILE" -D"$FLINK_PROFILE" -DdeployArtifacts=true -DskipTests=true $MVN_ARGS -pl packaging/hudi-flink-bundle -am -Davro.version="$FLINK_AVRO_VERSION" -Dparquet.version="$FLINK_PARQUET_VERSION" -Dparquet.version="$FLINK_PARQUET_VERSION" @@ -1111,7 +1111,7 @@ jobs: SPARK_PROFILE: ${{ matrix.sparkProfile }} SCALA_PROFILE: '-Dscala-2.12 -Dscala.binary.version=2.12' run: - mvn clean install -T 2 $SCALA_PROFILE -D"$SPARK_PROFILE" -Pintegration-tests -DskipTests=true $MVN_ARGS + mvn clean install -T 2 $SCALA_PROFILE -D"$SPARK_PROFILE" -Pintegration-tests -DskipTests=true $MVN_ARGS -pl !hudi-trino-plugin - name: 'UT integ-test' env: SPARK_PROFILE: ${{ matrix.sparkProfile }} @@ -1132,7 +1132,7 @@ jobs: export SPARK_HOME=$GITHUB_WORKSPACE/${SPARK_ARCHIVE_BASENAME%.*} rm -f $GITHUB_WORKSPACE/$SPARK_ARCHIVE docker system prune --all --force - mvn verify $SCALA_PROFILE -D"$SPARK_PROFILE" -Pintegration-tests -pl !hudi-flink-datasource/hudi-flink $MVN_ARGS + mvn verify $SCALA_PROFILE -D"$SPARK_PROFILE" -Pintegration-tests -pl !hudi-flink-datasource/hudi-flink,!hudi-trino-plugin $MVN_ARGS build-spark-java17: runs-on: ubuntu-latest diff --git a/azure-pipelines-20230430.yml b/azure-pipelines-20230430.yml index 13ec2d62bd617..602e566ed7470 100644 --- a/azure-pipelines-20230430.yml +++ b/azure-pipelines-20230430.yml @@ -519,9 +519,9 @@ stages: -v $(Build.SourcesDirectory):/hudi -i docker.io/apachehudi/hudi-ci-bundle-validation-base:$(Build.BuildId) /bin/bash -c "mvn clean install $(MVN_OPTS_INSTALL) -Phudi-platform-service -Pthrift-gen-source - && mvn test $(MVN_OPTS_TEST) -Punit-tests -DfailIfNoTests=false -DargLine="-Xmx4g" $(JACOCO_AGENT_DESTFILE1_ARG) -pl $(JOB10_UT_MODULES) - && mvn test $(MVN_OPTS_TEST) -Punit-tests $(JACOCO_AGENT_DESTFILE2_ARG) -Dtest="!TestHoodie*" -DfailIfNoTests=false -DargLine="-Xmx4g" -pl hudi-utilities - && mvn test $(MVN_OPTS_TEST) -Pfunctional-tests -DfailIfNoTests=false -DargLine="-Xmx4g" $(JACOCO_AGENT_DESTFILE3_ARG) -pl $(JOB10_FT_MODULES)" + && mvn test $(MVN_OPTS_TEST) -Punit-tests -DfailIfNoTests=false -DargLine="-Xmx4g" $(JACOCO_AGENT_DESTFILE1_ARG) -pl $(JOB10_UT_MODULES),!hudi-trino-plugin + && mvn test $(MVN_OPTS_TEST) -Punit-tests $(JACOCO_AGENT_DESTFILE2_ARG) -Dtest="!TestHoodie*" -DfailIfNoTests=false -DargLine="-Xmx4g" -pl hudi-utilities,!hudi-trino-plugin + && mvn test $(MVN_OPTS_TEST) -Pfunctional-tests -DfailIfNoTests=false -DargLine="-Xmx4g" $(JACOCO_AGENT_DESTFILE3_ARG) -pl $(JOB10_FT_MODULES),!hudi-trino-plugin" - task: PublishTestResults@2 displayName: 'Publish Test Results' inputs: From d0a051ff94cac4876354ff01547b512fd6b78023 Mon Sep 17 00:00:00 2001 From: voon Date: Fri, 27 Jun 2025 19:15:30 +0800 Subject: [PATCH 05/25] Add stage to test trino individually --- .github/workflows/bot.yml | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/.github/workflows/bot.yml b/.github/workflows/bot.yml index f0cd54fccac05..e9374134a2b33 100644 --- a/.github/workflows/bot.yml +++ b/.github/workflows/bot.yml @@ -1208,3 +1208,36 @@ jobs: FLINK_PROFILE: ${{ matrix.flinkProfile }} run: mvn test -Punit-tests -Djava17 -Djava.version=17 -D"$SCALA_PROFILE" -D"$FLINK_PROFILE" -pl hudi-examples/hudi-examples-flink $MVN_ARGS + + test-hudi-trino-plugin: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Set up JDK 8 + uses: actions/setup-java@v3 + with: + java-version: '8' + distribution: 'temurin' + architecture: x64 + cache: maven + - name: Build and Install All Dependencies with JDK8 + run: | + # This command builds everything EXCEPT the trino-hudi module. + # The 'install' goal puts the compiled .jar files into the local .m2 repository, + # making them available for the next stage. + mvn clean install -DskipTests $MVN_ARGS -pl '!hudi-trino-plugin' + - name: Set up JDK 23 + uses: actions/setup-java@v3 + with: + # Note: We are not caching here again, as we want to use the .m2 + # repository populated by the previous step. + java-version: '23' + distribution: 'temurin' + architecture: x64 + + - name: Build and Test hudi-trino-plugin with JDK 23 + run: | + # Build only the trino-hudi plugin. + # It will find its already-compiled dependencies in the local .m2 repo. + mvn clean install $MVN_ARGS -pl hudi-trino-plugin -am From d1b8f362b567da48c6c537275c3f5b0a367f1ce3 Mon Sep 17 00:00:00 2001 From: voon Date: Fri, 27 Jun 2025 19:49:16 +0800 Subject: [PATCH 06/25] Only build and install what is required --- .github/workflows/bot.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/bot.yml b/.github/workflows/bot.yml index e9374134a2b33..9cac58cc4e903 100644 --- a/.github/workflows/bot.yml +++ b/.github/workflows/bot.yml @@ -1223,10 +1223,11 @@ jobs: cache: maven - name: Build and Install All Dependencies with JDK8 run: | - # This command builds everything EXCEPT the trino-hudi module. - # The 'install' goal puts the compiled .jar files into the local .m2 repository, - # making them available for the next stage. - mvn clean install -DskipTests $MVN_ARGS -pl '!hudi-trino-plugin' + # This command resolves the dependency tree for hudi-trino-plugin (-pl hudi-trino-plugin -am) + # but then excludes hudi-trino-plugin itself from the build (,!hudi-trino-plugin). + # The result is that only the necessary dependencies are built and installed + # to the local .m2 repository, making them available for the next stage. + mvn clean install -DskipTests $MVN_ARGS -pl 'hudi-trino-plugin,!hudi-trino-plugin' -am - name: Set up JDK 23 uses: actions/setup-java@v3 with: From eec3ae02e4ef4c36695982fb202d0ebe1a702ca9 Mon Sep 17 00:00:00 2001 From: voon Date: Fri, 27 Jun 2025 20:26:36 +0800 Subject: [PATCH 07/25] Do not rebuild dependencies in stage 2 --- .github/workflows/bot.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/bot.yml b/.github/workflows/bot.yml index 9cac58cc4e903..33d2b9eb4f0ee 100644 --- a/.github/workflows/bot.yml +++ b/.github/workflows/bot.yml @@ -1236,9 +1236,10 @@ jobs: java-version: '23' distribution: 'temurin' architecture: x64 - - name: Build and Test hudi-trino-plugin with JDK 23 run: | # Build only the trino-hudi plugin. # It will find its already-compiled dependencies in the local .m2 repo. - mvn clean install $MVN_ARGS -pl hudi-trino-plugin -am + # Exclude -am flag so that dependencies are not built. + # Not passing $MVN_ARGS as there are profiles that are not found in hudi-trino-plugin + mvn clean install -pl hudi-trino-plugin From 2acd448d58a7248117892caffea8c2475fb5f3b7 Mon Sep 17 00:00:00 2001 From: voon Date: Fri, 27 Jun 2025 21:43:19 +0800 Subject: [PATCH 08/25] Exclude hudi-trino-plugin files for licensing checks --- scripts/release/validate_source_copyright.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/release/validate_source_copyright.sh b/scripts/release/validate_source_copyright.sh index deb7966626904..64f3f98535d9e 100755 --- a/scripts/release/validate_source_copyright.sh +++ b/scripts/release/validate_source_copyright.sh @@ -46,10 +46,11 @@ echo -e "\t\tNotice file exists ? [OK]\n" ### Licensing Check echo "Performing custom Licensing Check " -numfilesWithNoLicense=`find . -iname '*' -type f | grep -v NOTICE | grep -v LICENSE | grep -v '.jpg' | grep -v '.json' | grep -v '.hfile' | grep -v '.data' | grep -v '.commit' | grep -v emptyFile | grep -v DISCLAIMER | grep -v KEYS | grep -v '.mailmap' | grep -v '.sqltemplate' | grep -v 'banner.txt' | grep -v '.txt' | grep -v "fixtures" | xargs grep -L "Licensed to the Apache Software Foundation (ASF)" | wc -l` +# Exclude the 'hudi-trino-plugin' directory +numfilesWithNoLicense=`find . -path 'hudi-trino-plugin' -prune -o -type f -iname '*' | grep -v NOTICE | grep -v LICENSE | grep -v '.jpg' | grep -v '.json' | grep -v '.hfile' | grep -v '.data' | grep -v '.commit' | grep -v emptyFile | grep -v DISCLAIMER | grep -v '.sqltemplate' | grep -v KEYS | grep -v '.mailmap' | grep -v 'banner.txt' | grep -v '.txt' | grep -v "fixtures" | xargs grep -L "Licensed to the Apache Software Foundation (ASF)" | wc -l` if [ "$numfilesWithNoLicense" -gt "0" ]; then echo "There were some source files that did not have Apache License [ERROR]" - find . -iname '*' -type f | grep -v NOTICE | grep -v LICENSE | grep -v '.jpg' | grep -v '.json' | grep -v '.hfile' | grep -v '.data' | grep -v '.commit' | grep -v emptyFile | grep -v DISCLAIMER | grep -v '.sqltemplate' | grep -v KEYS | grep -v '.mailmap' | grep -v 'banner.txt' | grep -v '.txt' | grep -v "fixtures" | xargs grep -L "Licensed to the Apache Software Foundation (ASF)" + find . -path 'hudi-trino-plugin' -prune -o -type f -iname '*' | grep -v NOTICE | grep -v LICENSE | grep -v '.jpg' | grep -v '.json' | grep -v '.hfile' | grep -v '.data' | grep -v '.commit' | grep -v emptyFile | grep -v DISCLAIMER | grep -v '.sqltemplate' | grep -v KEYS | grep -v '.mailmap' | grep -v 'banner.txt' | grep -v '.txt' | grep -v "fixtures" | xargs grep -L "Licensed to the Apache Software Foundation (ASF)" exit 1 fi echo -e "\t\tLicensing Check Passed [OK]\n" From 504d24ae3bef09a6a7b1dfd0539005b1a37e31ea Mon Sep 17 00:00:00 2001 From: voon Date: Fri, 27 Jun 2025 21:49:24 +0800 Subject: [PATCH 09/25] Exclude hudi-trino-plugin files for licensing checks --- scripts/release/validate_source_copyright.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/release/validate_source_copyright.sh b/scripts/release/validate_source_copyright.sh index 64f3f98535d9e..a565fa5e51b45 100755 --- a/scripts/release/validate_source_copyright.sh +++ b/scripts/release/validate_source_copyright.sh @@ -46,11 +46,11 @@ echo -e "\t\tNotice file exists ? [OK]\n" ### Licensing Check echo "Performing custom Licensing Check " -# Exclude the 'hudi-trino-plugin' directory -numfilesWithNoLicense=`find . -path 'hudi-trino-plugin' -prune -o -type f -iname '*' | grep -v NOTICE | grep -v LICENSE | grep -v '.jpg' | grep -v '.json' | grep -v '.hfile' | grep -v '.data' | grep -v '.commit' | grep -v emptyFile | grep -v DISCLAIMER | grep -v '.sqltemplate' | grep -v KEYS | grep -v '.mailmap' | grep -v 'banner.txt' | grep -v '.txt' | grep -v "fixtures" | xargs grep -L "Licensed to the Apache Software Foundation (ASF)" | wc -l` +# Exclude the 'hudi-trino-plugin' directory, then ignore ./hudi-trino-plugin directory from results +numfilesWithNoLicense=`find . -path './hudi-trino-plugin' -prune -o -type f -iname '*' | grep -v './hudi-trino-plugin' | grep -v NOTICE | grep -v LICENSE | grep -v '.jpg' | grep -v '.json' | grep -v '.hfile' | grep -v '.data' | grep -v '.commit' | grep -v emptyFile | grep -v DISCLAIMER | grep -v '.sqltemplate' | grep -v KEYS | grep -v '.mailmap' | grep -v 'banner.txt' | grep -v '.txt' | grep -v "fixtures" | xargs grep -L "Licensed to the Apache Software Foundation (ASF)" | wc -l` if [ "$numfilesWithNoLicense" -gt "0" ]; then echo "There were some source files that did not have Apache License [ERROR]" - find . -path 'hudi-trino-plugin' -prune -o -type f -iname '*' | grep -v NOTICE | grep -v LICENSE | grep -v '.jpg' | grep -v '.json' | grep -v '.hfile' | grep -v '.data' | grep -v '.commit' | grep -v emptyFile | grep -v DISCLAIMER | grep -v '.sqltemplate' | grep -v KEYS | grep -v '.mailmap' | grep -v 'banner.txt' | grep -v '.txt' | grep -v "fixtures" | xargs grep -L "Licensed to the Apache Software Foundation (ASF)" + find . -path './hudi-trino-plugin' -prune -o -type f -iname '*' | grep -v './hudi-trino-plugin' | grep -v NOTICE | grep -v LICENSE | grep -v '.jpg' | grep -v '.json' | grep -v '.hfile' | grep -v '.data' | grep -v '.commit' | grep -v emptyFile | grep -v DISCLAIMER | grep -v '.sqltemplate' | grep -v KEYS | grep -v '.mailmap' | grep -v 'banner.txt' | grep -v '.txt' | grep -v "fixtures" | xargs grep -L "Licensed to the Apache Software Foundation (ASF)" exit 1 fi echo -e "\t\tLicensing Check Passed [OK]\n" From a92cb2b00839c7628686705421e65038debcf83a Mon Sep 17 00:00:00 2001 From: voon Date: Fri, 27 Jun 2025 21:54:46 +0800 Subject: [PATCH 10/25] Fix build error again --- .../hudi/query/HudiReadOptimizedDirectoryLister.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java index 311ade99b7c98..4ed50630b39bb 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java @@ -13,12 +13,6 @@ */ package io.trino.plugin.hudi.query; -import org.apache.hudi.common.engine.HoodieLocalEngineContext; -import org.apache.hudi.common.model.HoodieBaseFile; -import org.apache.hudi.common.table.HoodieTableMetaClient; -import org.apache.hudi.common.table.view.HoodieTableFileSystemView; -import org.apache.hudi.storage.StoragePathInfo; - import io.airlift.log.Logger; import io.airlift.units.DataSize; import io.trino.filesystem.Location; @@ -30,6 +24,11 @@ import io.trino.plugin.hudi.HudiTableHandle; import io.trino.plugin.hudi.partition.HiveHudiPartitionInfo; import io.trino.plugin.hudi.partition.HudiPartitionInfo; +import org.apache.hudi.common.engine.HoodieLocalEngineContext; +import org.apache.hudi.common.model.HoodieBaseFile; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.common.table.view.HoodieTableFileSystemView; +import org.apache.hudi.storage.StoragePathInfo; import java.util.List; import java.util.Map; From c5b21b135d015d94d9cd28e5f8802ab9f71414f4 Mon Sep 17 00:00:00 2001 From: voon Date: Fri, 27 Jun 2025 22:37:30 +0800 Subject: [PATCH 11/25] Fix build error again --- .../main/java/org/apache/hudi/client/BaseHoodieClient.java | 3 ++- .../java/org/apache/hudi/client/BaseHoodieWriteClient.java | 2 +- .../io/trino/plugin/hudi/storage/TestTrinoHudiStorage.java | 4 ++-- .../trino/plugin/hudi/testing/TpchHudiTablesInitializer.java | 3 ++- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieClient.java b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieClient.java index 27f18c95758eb..64e25a3a1ac09 100644 --- a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieClient.java +++ b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieClient.java @@ -193,7 +193,8 @@ protected void initWrapperFSMetrics() { // no-op. } - protected HoodieTableMetaClient createMetaClient(boolean loadActiveTimelineOnLoad) { + @VisibleForTesting + public HoodieTableMetaClient createMetaClient(boolean loadActiveTimelineOnLoad) { return HoodieTableMetaClient.builder() .setConf(storageConf.newInstance()) .setBasePath(config.getBasePath()) diff --git a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java index 3cad79476da80..3d5407a4df07d 100644 --- a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java +++ b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java @@ -1008,7 +1008,7 @@ public String startDeletePartitionCommit(HoodieTableMetaClient metaClient) { * @return the requested instant time for the commit that was started */ @VisibleForTesting - String startCommit(Option providedInstantTime, String actionType, HoodieTableMetaClient metaClient) { + public String startCommit(Option providedInstantTime, String actionType, HoodieTableMetaClient metaClient) { if (needsUpgrade(metaClient)) { // unclear what instant to use, since upgrade does have a given instant. executeUsingTxnManager(Option.empty(), () -> tryUpgrade(metaClient, Option.empty())); diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoHudiStorage.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoHudiStorage.java index ae5f98bccfa03..ba379496118b4 100644 --- a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoHudiStorage.java +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoHudiStorage.java @@ -20,6 +20,7 @@ import org.apache.hudi.common.util.Option; import org.apache.hudi.io.storage.TestHoodieStorageBase; import org.apache.hudi.io.util.IOUtils; +import org.apache.hudi.storage.HoodieInstantWriter; import org.apache.hudi.storage.HoodieStorage; import org.apache.hudi.storage.StoragePath; import org.apache.hudi.storage.StoragePathInfo; @@ -37,7 +38,6 @@ import java.util.List; import static com.google.common.collect.ImmutableList.toImmutableList; -import static org.apache.hudi.storage.HoodieInstantWriter.convertByteArrayToWriter; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -227,7 +227,7 @@ public void testCreateWriteAndRead() StoragePath path3 = new StoragePath(getTempDir(), "testCreateAppendAndRead/3.file"); assertThat(storage.exists(path3)).isFalse(); - storage.createImmutableFileInPath(path3, Option.of(convertByteArrayToWriter(data))); + storage.createImmutableFileInPath(path3, Option.of(HoodieInstantWriter.convertByteArrayToWriter(data))); validatePathInfo(storage, path3, data, false); StoragePath path4 = new StoragePath(getTempDir(), "testCreateAppendAndRead/4"); diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TpchHudiTablesInitializer.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TpchHudiTablesInitializer.java index d5093550e0946..ecdef38bb1f97 100644 --- a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TpchHudiTablesInitializer.java +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TpchHudiTablesInitializer.java @@ -167,7 +167,8 @@ public void load(TpchTable tpchTables, QueryRunner queryRunner, java.nio.file .map(recordConverter::toRecord) .collect(Collectors.toList()); String timestamp = "0"; - writeClient.startCommitWithTime(timestamp); + HoodieTableMetaClient metaClient = writeClient.createMetaClient(false); + writeClient.startCommit(Option.of(timestamp), metaClient.getCommitActionType(), metaClient); writeClient.insert(records, timestamp); } } From 3fdee8c1cd09db8246088bff99462362ceaf6931 Mon Sep 17 00:00:00 2001 From: voon Date: Fri, 27 Jun 2025 22:43:08 +0800 Subject: [PATCH 12/25] Fix build error again --- .../main/java/org/apache/hudi/client/BaseHoodieClient.java | 3 +-- .../java/org/apache/hudi/client/BaseHoodieWriteClient.java | 2 +- .../trino/plugin/hudi/testing/TpchHudiTablesInitializer.java | 4 +--- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieClient.java b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieClient.java index 64e25a3a1ac09..27f18c95758eb 100644 --- a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieClient.java +++ b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieClient.java @@ -193,8 +193,7 @@ protected void initWrapperFSMetrics() { // no-op. } - @VisibleForTesting - public HoodieTableMetaClient createMetaClient(boolean loadActiveTimelineOnLoad) { + protected HoodieTableMetaClient createMetaClient(boolean loadActiveTimelineOnLoad) { return HoodieTableMetaClient.builder() .setConf(storageConf.newInstance()) .setBasePath(config.getBasePath()) diff --git a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java index 3d5407a4df07d..3cad79476da80 100644 --- a/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java +++ b/hudi-client/hudi-client-common/src/main/java/org/apache/hudi/client/BaseHoodieWriteClient.java @@ -1008,7 +1008,7 @@ public String startDeletePartitionCommit(HoodieTableMetaClient metaClient) { * @return the requested instant time for the commit that was started */ @VisibleForTesting - public String startCommit(Option providedInstantTime, String actionType, HoodieTableMetaClient metaClient) { + String startCommit(Option providedInstantTime, String actionType, HoodieTableMetaClient metaClient) { if (needsUpgrade(metaClient)) { // unclear what instant to use, since upgrade does have a given instant. executeUsingTxnManager(Option.empty(), () -> tryUpgrade(metaClient, Option.empty())); diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TpchHudiTablesInitializer.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TpchHudiTablesInitializer.java index ecdef38bb1f97..4bcfc8019d0a5 100644 --- a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TpchHudiTablesInitializer.java +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TpchHudiTablesInitializer.java @@ -166,9 +166,7 @@ public void load(TpchTable tpchTables, QueryRunner queryRunner, java.nio.file .map(MaterializedRow::getFields) .map(recordConverter::toRecord) .collect(Collectors.toList()); - String timestamp = "0"; - HoodieTableMetaClient metaClient = writeClient.createMetaClient(false); - writeClient.startCommit(Option.of(timestamp), metaClient.getCommitActionType(), metaClient); + String timestamp = writeClient.startCommit(); writeClient.insert(records, timestamp); } } From dd3756b1e6c6f88c111f005a6c1dde3a829cf8ef Mon Sep 17 00:00:00 2001 From: voon Date: Fri, 27 Jun 2025 22:48:32 +0800 Subject: [PATCH 13/25] Add modernizer configs --- .../violations-production-code-only.xml | 68 ++++ .../.mvn/modernizer/violations.xml | 347 ++++++++++++++++++ 2 files changed, 415 insertions(+) create mode 100644 hudi-trino-plugin/.mvn/modernizer/violations-production-code-only.xml create mode 100644 hudi-trino-plugin/.mvn/modernizer/violations.xml diff --git a/hudi-trino-plugin/.mvn/modernizer/violations-production-code-only.xml b/hudi-trino-plugin/.mvn/modernizer/violations-production-code-only.xml new file mode 100644 index 0000000000000..c814b1746cae9 --- /dev/null +++ b/hudi-trino-plugin/.mvn/modernizer/violations-production-code-only.xml @@ -0,0 +1,68 @@ + + + + java/util/concurrent/ThreadPoolExecutor."<init>":(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;)V + 1.1 + Use constructor that takes ThreadFactory and name the threads + + + + java/util/concurrent/ThreadPoolExecutor."<init>":(IIJLjava/util/concurrent/TimeUnit;Ljava/util/concurrent/BlockingQueue;Ljava/util/concurrent/RejectedExecutionHandler;)V + 1.1 + Use constructor that takes ThreadFactory and name the threads + + + + java/util/concurrent/ScheduledThreadPoolExecutor."<init>":(I)V + 1.1 + Use constructor that takes ThreadFactory and name the threads + + + + java/util/concurrent/ScheduledThreadPoolExecutor."<init>":(ILjava/util/concurrent/RejectedExecutionHandler;)V + 1.1 + Use constructor that takes ThreadFactory and name the threads + + + + java/util/concurrent/Executors.newFixedThreadPool:(I)Ljava/util/concurrent/ExecutorService; + 1.1 + Use factory method that takes ThreadFactory and name the threads + + + + java/util/concurrent/Executors.newWorkStealingPool:()Ljava/util/concurrent/ExecutorService; + 1.1 + Use factory method that takes ThreadFactory and name the threads + + + + java/util/concurrent/Executors.newWorkStealingPool:(I)Ljava/util/concurrent/ExecutorService; + 1.1 + Use factory method that takes ThreadFactory and name the threads + + + + java/util/concurrent/Executors.newSingleThreadExecutor:()Ljava/util/concurrent/ExecutorService; + 1.1 + Use factory method that takes ThreadFactory and name the threads + + + + java/util/concurrent/Executors.newCachedThreadPool:()Ljava/util/concurrent/ExecutorService; + 1.1 + Use factory method that takes ThreadFactory and name the threads + + + + java/util/concurrent/Executors.newSingleThreadScheduledExecutor:()Ljava/util/concurrent/ScheduledExecutorService; + 1.1 + Use factory method that takes ThreadFactory and name the threads + + + + java/util/concurrent/Executors.newScheduledThreadPool:(I)Ljava/util/concurrent/ScheduledExecutorService; + 1.1 + Use factory method that takes ThreadFactory and name the threads + + diff --git a/hudi-trino-plugin/.mvn/modernizer/violations.xml b/hudi-trino-plugin/.mvn/modernizer/violations.xml new file mode 100644 index 0000000000000..eddc9222574f8 --- /dev/null +++ b/hudi-trino-plugin/.mvn/modernizer/violations.xml @@ -0,0 +1,347 @@ + + + + java/lang/Class.newInstance:()Ljava/lang/Object; + 1.1 + Prefer Class.getConstructor().newInstance() + + + + java/lang/String."<init>":([B)V + 1.1 + Prefer new String(byte[], Charset) + + + + java/lang/String.getBytes:()[B + 1.1 + Prefer String.getBytes(Charset) + + + + java/lang/String.toString:()Ljava/lang/String; + 1.1 + Call to toString() is redundant + + + + + java/io/File.toString:()Ljava/lang/String; + 1.1 + Prefer File.getPath() + + + + java/lang/Thread$Builder.factory:()Ljava/util/concurrent/ThreadFactory; + 1.1 + Use io.airlift.concurrent.Threads's thread factories, as the set thread context class loader + + + java/lang/Thread$Builder$OfPlatform.factory:()Ljava/util/concurrent/ThreadFactory; + 1.1 + Use io.airlift.concurrent.Threads's thread factories, as the set thread context class loader + + + java/lang/Thread$Builder$OfVirtual.factory:()Ljava/util/concurrent/ThreadFactory; + 1.1 + Use io.airlift.concurrent.Threads's thread factories, as the set thread context class loader + + + + com/google/common/primitives/Ints.checkedCast:(J)I + 1.8 + Prefer Math.toIntExact(long) + + + + com/google/common/collect/ImmutableMap$Builder.build:()Lcom/google/common/collect/ImmutableMap; + 1.8 + Use buildOrThrow() instead, as it makes it clear that it will throw on duplicated values + + + com/google/common/collect/ImmutableTable$Builder.build:()Lcom/google/common/collect/ImmutableTable; + 1.8 + Use buildOrThrow() instead, as it makes it clear that it will throw on duplicated values + + + + com/google/common/collect/ImmutableBiMap$Builder."<init>":()V + 1.8 + Use builder() static factory method instead + + + com/google/common/collect/ImmutableList$Builder."<init>":()V + 1.8 + Use builder() static factory method instead + + + com/google/common/collect/ImmutableMap$Builder."<init>":()V + 1.8 + Use builder() static factory method instead + + + com/google/common/collect/ImmutableMultimap$Builder."<init>":()V + 1.8 + Use builder() static factory method instead + + + com/google/common/collect/ImmutableMultiset$Builder."<init>":()V + 1.8 + Use builder() static factory method instead + + + com/google/common/collect/ImmutableSet$Builder."<init>":()V + 1.8 + Use builder() static factory method instead + + + com/google/common/collect/ImmutableSortedMap$Builder."<init>":()V + 1.8 + Use orderedBy() static factory method instead + + + com/google/common/collect/ImmutableSortedSet$Builder."<init>":()V + 1.8 + Use orderedBy() static factory method instead + + + com/google/common/collect/ImmutableTable$Builder."<init>":()V + 1.8 + Use builder() static factory method instead + + + + com/google/common/cache/CacheBuilder.build:()Lcom/google/common/cache/Cache; + 1.8 + Guava Cache has concurrency issues around invalidation and ongoing loads. Use EvictableCacheBuilder or SafeCaches to build caches. + See https://github.com/trinodb/trino/issues/10512 for more information and see https://github.com/trinodb/trino/issues/10512#issuecomment-1016221168 + for why Caffeine does not solve the problem. + + + + com/google/common/cache/CacheBuilder.build:(Lcom/google/common/cache/CacheLoader;)Lcom/google/common/cache/LoadingCache; + 1.8 + Guava LoadingCache has concurrency issues around invalidation and ongoing loads. Use EvictableCacheBuilder or SafeCaches to build caches. + See https://github.com/trinodb/trino/issues/10512 for more information and see https://github.com/trinodb/trino/issues/10512#issuecomment-1016221168 + for why Caffeine does not solve the problem. + + + + org/testng/Assert.assertEquals:(Ljava/lang/Iterable;Ljava/lang/Iterable;)V + 1.8 + Use AssertJ or QueryAssertions due to TestNG #543 + + + + org/testng/Assert.assertEquals:(Ljava/lang/Iterable;Ljava/lang/Iterable;Ljava/lang/String;)V + 1.8 + Use AssertJ or QueryAssertions due to TestNG #543 + + + + org/testng/Assert.assertThrows:(Lorg/testng/Assert$ThrowingRunnable;)V + 1.8 + Use AssertJ's assertThatThrownBy, see https://github.com/trinodb/trino/issues/5320 for rationale + + + + org/testng/Assert.assertThrows:(Ljava/lang/Class;Lorg/testng/Assert$ThrowingRunnable;)V + 1.8 + Use AssertJ's assertThatThrownBy, see https://github.com/trinodb/trino/issues/5320 for rationale + + + + com/amazonaws/services/glue/model/Table.getStorageDescriptor:()Lcom/amazonaws/services/glue/model/StorageDescriptor; + 1.1 + Storage descriptor is nullable in Glue model, which is too easy to forget about. Prefer GlueToTrinoConverter.getStorageDescriptor + + + + com/amazonaws/services/glue/model/Table.getTableType:()Ljava/lang/String; + 1.1 + Table type is nullable in Glue model, which is too easy to forget about. Prefer GlueToTrinoConverter.getTableType + + + + com/amazonaws/services/glue/model/Column.getParameters:()Ljava/util/Map; + 1.1 + Column parameters map is nullable in Glue model, which is too easy to forget about. Prefer GlueToTrinoConverter.getColumnParameters + + + + com/amazonaws/services/glue/model/Table.getParameters:()Ljava/util/Map; + 1.1 + Table parameters map is nullable in Glue model, which is too easy to forget about. Prefer GlueToTrinoConverter.getTableParameters + + + + com/amazonaws/services/glue/model/Partition.getParameters:()Ljava/util/Map; + 1.1 + Partition parameters map is nullable in Glue model, which is too easy to forget about. Prefer GlueToTrinoConverter.getPartitionParameters + + + + com/amazonaws/services/glue/model/SerDeInfo.getParameters:()Ljava/util/Map; + 1.1 + SerDeInfo parameters map is nullable in Glue model, which is too easy to forget about. Prefer GlueToTrinoConverter.getSerDeInfoParameters + + + + org/apache/hadoop/fs/FileSystem.close:()V + 1.1 + Hadoop FileSystem instances are shared and should not be closed + + + + java/util/TimeZone.getTimeZone:(Ljava/lang/String;)Ljava/util/TimeZone; + 1.8 + Avoid TimeZone.getTimeZone as it returns GMT for a zone not supported by the JVM. Use TimeZone.getTimeZone(ZoneId.of(..)) instead, or TimeZone.getTimeZone(..., false). + + + + org/joda/time/DateTimeZone.toTimeZone:()Ljava/util/TimeZone; + 1.8 + Avoid DateTimeZone.toTimeZone as it returns GMT for a zone not supported by the JVM. Use TimeZone.getTimeZone(ZoneId.of(dtz.getId())) instead. + + + + com/esri/core/geometry/ogc/OGCGeometry.equals:(Lcom/esri/core/geometry/ogc/OGCGeometry;)Z + 1.6 + Prefer OGCGeometry.Equals(OGCGeometry) + + + + com/esri/core/geometry/ogc/OGCGeometry.equals:(Ljava/lang/Object;)Z + 1.6 + Prefer OGCGeometry.Equals(OGCGeometry) + + + + io/airlift/units/DataSize."<init>":(DLio/airlift/units/DataSize$Unit;)V + 1.8 + Use io.airlift.units.DataSize.of(long, DataSize.Unit) + + + + io/airlift/units/DataSize.succinctDataSize:(DLio/airlift/units/DataSize$Unit;)Lio/airlift/units/DataSize; + 1.8 + Use io.airlift.units.DataSize.of(long, DataSize.Unit).succinct() -- Note that succinct conversion only affects toString() results + + + + io/airlift/units/DataSize.getValue:()D + 1.8 + Use io.airlift.units.DataSize.toBytes() and Unit.inBytes() for conversion + + + + io/airlift/units/DataSize.getValue:(Lio/airlift/units/DataSize$Unit;)D + 1.8 + Use io.airlift.units.DataSize.toBytes() and Unit.inBytes() for conversion + + + + io/airlift/units/DataSize.roundTo:(Lio/airlift/units/DataSize$Unit;)J + 1.8 + Method is deprecated for removal + + + + io/airlift/units/DataSize.convertTo:(Lio/airlift/units/DataSize$Unit;)Lio/airlift/units/DataSize; + 1.8 + Use io.airlift.units.DataSize.to(DataSize.Unit) + + + + io/airlift/units/DataSize.convertToMostSuccinctDataSize:()Lio/airlift/units/DataSize; + 1.8 + Use io.airlift.units.DataSize.succinct() + + + + io/airlift/testing/Closeables.closeQuietly:([Ljava/io/Closeable;)V + 1.0 + Use Closeables.closeAll() or Closer. + + + + com/google/inject/util/Modules.combine:(Ljava/lang/Iterable;)Lcom/google/inject/Module; + 1.8 + Use io.airlift.configuration.ConfigurationAwareModule.combine + + + + com/google/inject/util/Modules.combine:([Lcom/google/inject/Module;)Lcom/google/inject/Module; + 1.8 + Use io.airlift.configuration.ConfigurationAwareModule.combine + + + + io/jsonwebtoken/Jwts.builder:()Lio/jsonwebtoken/JwtBuilder; + 1.8 + Use io.trino.server.security.jwt.JwtsUtil or equivalent + + + + io/jsonwebtoken/Jwts.parserBuilder:()Lio/jsonwebtoken/JwtParserBuilder; + 1.8 + Use io.trino.server.security.jwt.JwtsUtil or equivalent + + + + org/openjdk/jol/info/ClassLayout.instanceSize:()J + 1.8 + Use io.airlift.slice.SizeOf.instanceSize + + + + org/testng/annotations/BeforeTest + 1.8 + Prefer org.testng.annotations.BeforeClass + + + + org/testng/annotations/AfterTest + 1.8 + Prefer org.testng.annotations.AfterClass + + + + com/fasterxml/jackson/core/JsonFactory."<init>":()V + 1.8 + Use io.trino.plugin.base.util.JsonUtils.jsonFactory() + + + + com/fasterxml/jackson/core/JsonFactoryBuilder."<init>":()V + 1.8 + Use io.trino.plugin.base.util.JsonUtils.jsonFactoryBuilder() instead + + + + software/amazon/awssdk/services/glue/model/Table.tableType:()Ljava/lang/String; + 1.8 + Table type is nullable in Glue model, which is too easy to forget about. Prefer GlueConverter.getTableTypeNullable + + + + org/assertj/core/util/Files.newTemporaryFile:()Ljava/io/File; + 1.1 + Use @TempDir instead + + + org/assertj/core/util/Files.newTemporaryFolder:()Ljava/io/File; + 1.1 + Use @TempDir instead + + + org/assertj/core/util/Files.temporaryFolder:()Ljava/io/File; + 1.1 + Use @TempDir instead + + + org/assertj/core/util/Files.temporaryFolderPath:()Ljava/lang/String; + 1.1 + Use @TempDir instead + + From a9f681af2d19a78a279be37804654843f22addbf Mon Sep 17 00:00:00 2001 From: voon Date: Fri, 27 Jun 2025 23:11:47 +0800 Subject: [PATCH 14/25] Separate build and test stage --- .github/workflows/bot.yml | 34 ++++++++++++++++------------------ azure-pipelines-20230430.yml | 6 +++--- pom.xml | 1 - 3 files changed, 19 insertions(+), 22 deletions(-) diff --git a/.github/workflows/bot.yml b/.github/workflows/bot.yml index 33d2b9eb4f0ee..f8c0ccd7c9178 100644 --- a/.github/workflows/bot.yml +++ b/.github/workflows/bot.yml @@ -1002,7 +1002,7 @@ jobs: if [ "$SCALA_PROFILE" == "scala-2.13" ]; then mvn clean package -T 2 -D"$SCALA_PROFILE" -D"$SPARK_PROFILE" -DdeployArtifacts=true -DskipTests=true $MVN_ARGS -pl packaging/hudi-hadoop-mr-bundle,packaging/hudi-spark-bundle,packaging/hudi-utilities-bundle,packaging/hudi-utilities-slim-bundle,packaging/hudi-cli-bundle -am else - mvn clean package -T 2 -D"$SCALA_PROFILE" -D"$SPARK_PROFILE" -DdeployArtifacts=true -DskipTests=true $MVN_ARGS -pl '!hudi-trino-plugin' + mvn clean package -T 2 -D"$SCALA_PROFILE" -D"$SPARK_PROFILE" -DdeployArtifacts=true -DskipTests=true $MVN_ARGS # TODO remove the sudo below. It's a needed workaround as detailed in HUDI-5708. sudo chown -R "$USER:$(id -g -n)" hudi-platform-service/hudi-metaserver/target/generated-sources mvn clean package -T 2 -D"$SCALA_PROFILE" -D"$FLINK_PROFILE" -DdeployArtifacts=true -DskipTests=true $MVN_ARGS -pl packaging/hudi-flink-bundle -am -Davro.version="$FLINK_AVRO_VERSION" -Dparquet.version="$FLINK_PARQUET_VERSION" -Dparquet.version="$FLINK_PARQUET_VERSION" @@ -1111,7 +1111,7 @@ jobs: SPARK_PROFILE: ${{ matrix.sparkProfile }} SCALA_PROFILE: '-Dscala-2.12 -Dscala.binary.version=2.12' run: - mvn clean install -T 2 $SCALA_PROFILE -D"$SPARK_PROFILE" -Pintegration-tests -DskipTests=true $MVN_ARGS -pl !hudi-trino-plugin + mvn clean install -T 2 $SCALA_PROFILE -D"$SPARK_PROFILE" -Pintegration-tests -DskipTests=true $MVN_ARGS - name: 'UT integ-test' env: SPARK_PROFILE: ${{ matrix.sparkProfile }} @@ -1132,7 +1132,7 @@ jobs: export SPARK_HOME=$GITHUB_WORKSPACE/${SPARK_ARCHIVE_BASENAME%.*} rm -f $GITHUB_WORKSPACE/$SPARK_ARCHIVE docker system prune --all --force - mvn verify $SCALA_PROFILE -D"$SPARK_PROFILE" -Pintegration-tests -pl !hudi-flink-datasource/hudi-flink,!hudi-trino-plugin $MVN_ARGS + mvn verify $SCALA_PROFILE -D"$SPARK_PROFILE" -Pintegration-tests -pl !hudi-flink-datasource/hudi-flink $MVN_ARGS build-spark-java17: runs-on: ubuntu-latest @@ -1222,24 +1222,22 @@ jobs: architecture: x64 cache: maven - name: Build and Install All Dependencies with JDK8 - run: | - # This command resolves the dependency tree for hudi-trino-plugin (-pl hudi-trino-plugin -am) - # but then excludes hudi-trino-plugin itself from the build (,!hudi-trino-plugin). - # The result is that only the necessary dependencies are built and installed - # to the local .m2 repository, making them available for the next stage. - mvn clean install -DskipTests $MVN_ARGS -pl 'hudi-trino-plugin,!hudi-trino-plugin' -am + run: + # Using spark3.5 and scala2.12 so parquet version 1.13.1 is used instead of 1.10.1 + mvn clean install $MVN_ARGS -Pspark3.5 -Pscala-2.12 -DskipTests -pl 'hudi-timeline-service,hudi-client,hudi-hadoop-mr,hudi-client/hudi-java-client' -am - name: Set up JDK 23 uses: actions/setup-java@v3 with: - # Note: We are not caching here again, as we want to use the .m2 - # repository populated by the previous step. + # Note: We are not caching here again, as we want to use the .m2 repository populated by + # the previous step java-version: '23' distribution: 'temurin' architecture: x64 - - name: Build and Test hudi-trino-plugin with JDK 23 - run: | - # Build only the trino-hudi plugin. - # It will find its already-compiled dependencies in the local .m2 repo. - # Exclude -am flag so that dependencies are not built. - # Not passing $MVN_ARGS as there are profiles that are not found in hudi-trino-plugin - mvn clean install -pl hudi-trino-plugin + - name: Build hudi-trino-plugin with JDK 23 + working-directory: ./hudi-trino-plugin + run: + mvn clean install -DskipTests + - name: Test hudi-trino-plugin with JDK 23 + working-directory: ./hudi-trino-plugin + run: + mvn test diff --git a/azure-pipelines-20230430.yml b/azure-pipelines-20230430.yml index 602e566ed7470..13ec2d62bd617 100644 --- a/azure-pipelines-20230430.yml +++ b/azure-pipelines-20230430.yml @@ -519,9 +519,9 @@ stages: -v $(Build.SourcesDirectory):/hudi -i docker.io/apachehudi/hudi-ci-bundle-validation-base:$(Build.BuildId) /bin/bash -c "mvn clean install $(MVN_OPTS_INSTALL) -Phudi-platform-service -Pthrift-gen-source - && mvn test $(MVN_OPTS_TEST) -Punit-tests -DfailIfNoTests=false -DargLine="-Xmx4g" $(JACOCO_AGENT_DESTFILE1_ARG) -pl $(JOB10_UT_MODULES),!hudi-trino-plugin - && mvn test $(MVN_OPTS_TEST) -Punit-tests $(JACOCO_AGENT_DESTFILE2_ARG) -Dtest="!TestHoodie*" -DfailIfNoTests=false -DargLine="-Xmx4g" -pl hudi-utilities,!hudi-trino-plugin - && mvn test $(MVN_OPTS_TEST) -Pfunctional-tests -DfailIfNoTests=false -DargLine="-Xmx4g" $(JACOCO_AGENT_DESTFILE3_ARG) -pl $(JOB10_FT_MODULES),!hudi-trino-plugin" + && mvn test $(MVN_OPTS_TEST) -Punit-tests -DfailIfNoTests=false -DargLine="-Xmx4g" $(JACOCO_AGENT_DESTFILE1_ARG) -pl $(JOB10_UT_MODULES) + && mvn test $(MVN_OPTS_TEST) -Punit-tests $(JACOCO_AGENT_DESTFILE2_ARG) -Dtest="!TestHoodie*" -DfailIfNoTests=false -DargLine="-Xmx4g" -pl hudi-utilities + && mvn test $(MVN_OPTS_TEST) -Pfunctional-tests -DfailIfNoTests=false -DargLine="-Xmx4g" $(JACOCO_AGENT_DESTFILE3_ARG) -pl $(JOB10_FT_MODULES)" - task: PublishTestResults@2 displayName: 'Publish Test Results' inputs: diff --git a/pom.xml b/pom.xml index e96e5ff85741f..f0790c63cf305 100644 --- a/pom.xml +++ b/pom.xml @@ -65,7 +65,6 @@ packaging/hudi-kafka-connect-bundle packaging/hudi-cli-bundle hudi-tests-common - hudi-trino-plugin From 2ab15f3b8ee1374507dd3360767f597ae4149ead Mon Sep 17 00:00:00 2001 From: voon Date: Tue, 1 Jul 2025 16:56:12 +0800 Subject: [PATCH 15/25] Disable trino tests first --- .github/workflows/bot.yml | 64 +++++++++++++++++++-------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/.github/workflows/bot.yml b/.github/workflows/bot.yml index f8c0ccd7c9178..b75fa6be0030e 100644 --- a/.github/workflows/bot.yml +++ b/.github/workflows/bot.yml @@ -1209,35 +1209,35 @@ jobs: run: mvn test -Punit-tests -Djava17 -Djava.version=17 -D"$SCALA_PROFILE" -D"$FLINK_PROFILE" -pl hudi-examples/hudi-examples-flink $MVN_ARGS - test-hudi-trino-plugin: - runs-on: ubuntu-latest - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - name: Set up JDK 8 - uses: actions/setup-java@v3 - with: - java-version: '8' - distribution: 'temurin' - architecture: x64 - cache: maven - - name: Build and Install All Dependencies with JDK8 - run: - # Using spark3.5 and scala2.12 so parquet version 1.13.1 is used instead of 1.10.1 - mvn clean install $MVN_ARGS -Pspark3.5 -Pscala-2.12 -DskipTests -pl 'hudi-timeline-service,hudi-client,hudi-hadoop-mr,hudi-client/hudi-java-client' -am - - name: Set up JDK 23 - uses: actions/setup-java@v3 - with: - # Note: We are not caching here again, as we want to use the .m2 repository populated by - # the previous step - java-version: '23' - distribution: 'temurin' - architecture: x64 - - name: Build hudi-trino-plugin with JDK 23 - working-directory: ./hudi-trino-plugin - run: - mvn clean install -DskipTests - - name: Test hudi-trino-plugin with JDK 23 - working-directory: ./hudi-trino-plugin - run: - mvn test +# test-hudi-trino-plugin: +# runs-on: ubuntu-latest +# steps: +# - name: Checkout repository +# uses: actions/checkout@v3 +# - name: Set up JDK 8 +# uses: actions/setup-java@v3 +# with: +# java-version: '8' +# distribution: 'temurin' +# architecture: x64 +# cache: maven +# - name: Build and Install All Dependencies with JDK8 +# run: +# # Using spark3.5 and scala2.12 so parquet version 1.13.1 is used instead of 1.10.1 +# mvn clean install $MVN_ARGS -Pspark3.5 -Pscala-2.12 -DskipTests -pl 'hudi-timeline-service,hudi-client,hudi-hadoop-mr,hudi-client/hudi-java-client' -am +# - name: Set up JDK 23 +# uses: actions/setup-java@v3 +# with: +# # Note: We are not caching here again, as we want to use the .m2 repository populated by +# # the previous step +# java-version: '23' +# distribution: 'temurin' +# architecture: x64 +# - name: Build hudi-trino-plugin with JDK 23 +# working-directory: ./hudi-trino-plugin +# run: +# mvn clean install -DskipTests +# - name: Test hudi-trino-plugin with JDK 23 +# working-directory: ./hudi-trino-plugin +# run: +# mvn test From 480775334d604795369d8a3b26945f652e2830c1 Mon Sep 17 00:00:00 2001 From: voon Date: Tue, 1 Jul 2025 17:25:51 +0800 Subject: [PATCH 16/25] Cherrypick trino-hudi from OHI trino at a56b8014a3fe2edeb00330522cf471384bc6fbd1 --- .github/workflows/bot.yml | 64 +- .../hudi/HudiBaseFileOnlyPageSource.java | 126 +++ .../java/io/trino/plugin/hudi/HudiConfig.java | 195 +++- .../plugin/hudi/HudiConnectorFactory.java | 6 +- .../io/trino/plugin/hudi/HudiErrorCode.java | 5 +- .../trino/plugin/hudi/HudiExecutorModule.java | 57 -- .../io/trino/plugin/hudi/HudiMetadata.java | 178 +++- .../plugin/hudi/HudiMetadataFactory.java | 13 +- .../java/io/trino/plugin/hudi/HudiModule.java | 57 +- .../io/trino/plugin/hudi/HudiPageSource.java | 143 +++ .../plugin/hudi/HudiPageSourceProvider.java | 416 +++++--- .../plugin/hudi/HudiSessionProperties.java | 176 +++- .../java/io/trino/plugin/hudi/HudiSplit.java | 103 +- .../trino/plugin/hudi/HudiSplitManager.java | 93 +- .../io/trino/plugin/hudi/HudiSplitSource.java | 149 ++- .../io/trino/plugin/hudi/HudiTableHandle.java | 50 +- .../java/io/trino/plugin/hudi/HudiUtil.java | 173 +++- .../io/trino/plugin/hudi/TimelineTable.java | 5 +- .../trino/plugin/hudi/file/HudiBaseFile.java | 113 +++ .../io/trino/plugin/hudi/file/HudiFile.java | 29 + .../trino/plugin/hudi/file/HudiLogFile.java | 113 +++ ...y.java => HudiTrinoFileReaderFactory.java} | 36 +- ...IoFactory.java => HudiTrinoIOFactory.java} | 23 +- .../io/InlineSeekableDataInputStream.java | 51 + .../hudi/io/TrinoSeekableDataInputStream.java | 3 - .../hudi/partition/HiveHudiPartitionInfo.java | 62 +- .../hudi/partition/HudiPartitionInfo.java | 4 - .../partition/HudiPartitionInfoLoader.java | 16 +- .../hudi/query/HudiDirectoryLister.java | 4 +- .../HudiReadOptimizedDirectoryLister.java | 119 --- .../query/HudiSnapshotDirectoryLister.java | 123 +++ .../query/index/HudiBaseIndexSupport.java | 66 ++ .../index/HudiColumnStatsIndexSupport.java | 319 ++++++ .../hudi/query/index/HudiIndexSupport.java | 27 + .../query/index/HudiNoOpIndexSupport.java | 40 + .../index/HudiPartitionStatsIndexSupport.java | 146 +++ .../index/HudiRecordLevelIndexSupport.java | 327 ++++++ .../index/HudiSecondaryIndexSupport.java | 232 +++++ .../hudi/query/index/IndexSupportFactory.java | 148 +++ .../hudi/reader/HudiTrinoReaderContext.java | 227 +++++ .../plugin/hudi/reader/HudiTrinoRecord.java | 183 ++++ .../hudi/split/HudiBackgroundSplitLoader.java | 75 +- .../plugin/hudi/split/HudiSplitFactory.java | 121 ++- .../hudi/stats/ForHudiTableStatistics.java | 29 + .../hudi/stats/HudiTableStatistics.java | 23 + .../hudi/stats/TableMetadataReader.java | 114 +++ .../hudi/stats/TableStatisticsReader.java | 118 +++ .../hudi/storage/HudiTrinoInlineStorage.java | 242 +++++ ...HudiStorage.java => HudiTrinoStorage.java} | 145 +-- .../storage/TrinoStorageConfiguration.java | 42 +- .../plugin/hudi/util/HudiAvroSerializer.java | 504 +++++++++ .../plugin/hudi/util/HudiTableTypeUtils.java | 44 + .../hudi/util/SynthesizedColumnHandler.java | 320 ++++++ .../hudi/util/SynthesizedColumnStrategy.java | 25 + .../plugin/hudi/util/TupleDomainUtils.java | 162 +++ .../io/trino/plugin/hudi/SessionBuilder.java | 137 +++ .../io/trino/plugin/hudi/TestHudiConfig.java | 44 +- .../trino/plugin/hudi/TestHudiPageSource.java | 28 + .../hudi/TestHudiPageSourceProviderTest.java | 242 +++++ .../trino/plugin/hudi/TestHudiSmokeTest.java | 955 +++++++++++++++++- .../HudiRecordLevelIndexSupportTest.java | 484 +++++++++ .../hudi/query/index/TestingColumnHandle.java | 60 ++ .../hudi/split/TestHudiSplitFactory.java | 202 ++++ .../hudi/storage/TestTrinoHudiStorage.java | 304 ------ .../TestTrinoStorageConfiguration.java | 51 - .../hudi/testing/HudiTableUnzipper.java | 125 +++ .../ResourceHudiTablesInitializer.java | 506 +++++++++- .../testing/TpchHudiTablesInitializer.java | 18 +- .../plugin/hudi/testing/TypeInfoHelper.java | 129 +++ ...upleDomainUtilsExtendedNullFilterTest.java | 194 ++++ .../hudi/util/TestTupleDomainUtilsTest.java | 269 +++++ .../hudi_comprehensive_types_v6_mor.md | 164 +++ .../hudi_comprehensive_types_v6_mor.zip | Bin 0 -> 257256 bytes .../hudi_comprehensive_types_v8_mor.md | 168 +++ .../hudi_comprehensive_types_v8_mor.zip | Bin 0 -> 378428 bytes .../hudi-testing-data/hudi_cow_pt_tbl.zip | Bin 0 -> 11750 bytes .../.hoodie/20220906063435640.commit | 73 -- .../20220906063435640.commit.requested | 0 .../.hoodie/20220906063435640.inflight | 71 -- .../.hoodie/20220906063456550.commit | 73 -- .../20220906063456550.commit.requested | 0 .../.hoodie/20220906063456550.inflight | 71 -- .../hudi_cow_pt_tbl/.hoodie/hoodie.properties | 18 - .../hh=10/.hoodie_partition_metadata | 4 - ...85bf-0_0-27-1215_20220906063435640.parquet | Bin 435204 -> 0 bytes .../hh=11/.hoodie_partition_metadata | 4 - ...4dd1-0_0-70-2444_20220906063456550.parquet | Bin 435204 -> 0 bytes .../hudi_custom_keygen_pt_v8_mor.md | 64 ++ .../hudi_custom_keygen_pt_v8_mor.zip | Bin 0 -> 226852 bytes .../hudi_multi_fg_pt_v6_mor.md | 51 + .../hudi_multi_fg_pt_v6_mor.zip | Bin 0 -> 158908 bytes .../hudi_multi_fg_pt_v8_mor.md | 56 + .../hudi_multi_fg_pt_v8_mor.zip | Bin 0 -> 260372 bytes .../.hoodie/.index_defs/index.json | 18 - .../.hoodie/hoodie.properties | 26 - .../metadata/.hoodie/hoodie.properties | 19 - .../00000000000000000.deltacommit.inflight | 0 .../00000000000000000.deltacommit.requested | 0 ...000000000000_20250429145939812.deltacommit | Bin 11084 -> 0 bytes .../00000000000000001.deltacommit.inflight | 0 .../00000000000000001.deltacommit.requested | 0 ...000000000001_20250429145940407.deltacommit | Bin 10946 -> 0 bytes .../00000000000000002.deltacommit.inflight | 0 .../00000000000000002.deltacommit.requested | 0 ...000000000002_20250429145941217.deltacommit | Bin 10946 -> 0 bytes .../00000000000000003.deltacommit.inflight | 0 .../00000000000000003.deltacommit.requested | 0 ...000000000003_20250429145941430.deltacommit | Bin 10946 -> 0 bytes .../00000000000000004.deltacommit.inflight | 0 .../00000000000000004.deltacommit.requested | 0 ...000000000004_20250429145945968.deltacommit | Bin 11828 -> 0 bytes .../20250429145938324.deltacommit.inflight | Bin 4140 -> 0 bytes .../20250429145938324.deltacommit.requested | 0 ...429145938324_20250429145943593.deltacommit | Bin 12376 -> 0 bytes .../20250429145941472.compaction.inflight | 0 .../20250429145941472.compaction.requested | Bin 2517 -> 0 bytes ...20250429145941472_20250429145941874.commit | Bin 11138 -> 0 bytes .../20250429145943846.deltacommit.inflight | Bin 4140 -> 0 bytes .../20250429145943846.deltacommit.requested | 0 ...429145943846_20250429145945066.deltacommit | Bin 12376 -> 0 bytes .../20250429145943911.compaction.inflight | 0 .../20250429145943911.compaction.requested | Bin 5867 -> 0 bytes ...20250429145943911_20250429145944166.commit | Bin 12007 -> 0 bytes .../20250429145946675.deltacommit.inflight | Bin 4571 -> 0 bytes .../20250429145946675.deltacommit.requested | 0 ...429145946675_20250429145948126.deltacommit | Bin 13743 -> 0 bytes .../20250429145946737.compaction.inflight | 0 .../20250429145946737.compaction.requested | Bin 8675 -> 0 bytes ...20250429145946737_20250429145947037.commit | Bin 13493 -> 0 bytes ...stats-0000-0_00000000000000001.log.1_0-0-0 | Bin 80 -> 0 bytes ...ts-0000-0_20250429145938324.log.1_2-57-131 | Bin 14556 -> 0 bytes ...ts-0000-0_20250429145943846.log.1_2-91-231 | Bin 14834 -> 0 bytes ...s-0000-0_20250429145946675.log.1_0-120-381 | Bin 14885 -> 0 bytes ...stats-0001-0_00000000000000001.log.1_0-0-0 | Bin 80 -> 0 bytes ...ts-0001-0_20250429145938324.log.1_3-57-132 | Bin 14821 -> 0 bytes ...ts-0001-0_20250429145943846.log.1_3-91-232 | Bin 14552 -> 0 bytes ...s-0001-0_20250429145946675.log.1_1-120-382 | Bin 15007 -> 0 bytes .../column_stats/.hoodie_partition_metadata | 4 - ...s-0000-0_10-62-159_20250429145943911.hfile | Bin 7407 -> 0 bytes ...s-0000-0_9-104-299_20250429145946737.hfile | Bin 9131 -> 0 bytes ...-0001-0_10-104-300_20250429145946737.hfile | Bin 9113 -> 0 bytes ...s-0001-0_11-62-160_20250429145943911.hfile | Bin 8776 -> 0 bytes ...files-0000-0_00000000000000000.log.1_0-0-0 | Bin 80 -> 0 bytes ...es-0000-0_20250429145938324.log.1_5-57-134 | Bin 14420 -> 0 bytes ...es-0000-0_20250429145943846.log.1_5-91-234 | Bin 14417 -> 0 bytes ...s-0000-0_20250429145946675.log.1_3-120-384 | Bin 14483 -> 0 bytes .../metadata/files/.hoodie_partition_metadata | 4 - ...les-0000-0_0-28-69_20250429145941472.hfile | Bin 6993 -> 0 bytes ...files-0000-0_0-5-4_00000000000000000.hfile | Bin 6978 -> 0 bytes ...-0000-0_12-104-302_20250429145946737.hfile | Bin 7419 -> 0 bytes ...s-0000-0_13-62-162_20250429145943911.hfile | Bin 7347 -> 0 bytes .../.hoodie_partition_metadata | 4 - ...stats-0000-0_00000000000000003.log.1_0-0-0 | Bin 80 -> 0 bytes ...ts-0000-0_20250429145938324.log.1_4-57-133 | Bin 14691 -> 0 bytes ...ts-0000-0_20250429145943846.log.1_4-91-233 | Bin 14751 -> 0 bytes ...s-0000-0_20250429145946675.log.1_2-120-383 | Bin 14753 -> 0 bytes ...-0000-0_11-104-301_20250429145946737.hfile | Bin 8858 -> 0 bytes ...s-0000-0_12-62-161_20250429145943911.hfile | Bin 8802 -> 0 bytes .../record_index/.hoodie_partition_metadata | 4 - ...index-0000-0_00000000000000002.log.1_0-0-0 | Bin 80 -> 0 bytes ...index-0001-0_00000000000000002.log.1_0-0-0 | Bin 80 -> 0 bytes ...index-0002-0_00000000000000002.log.1_0-0-0 | Bin 80 -> 0 bytes ...index-0003-0_00000000000000002.log.1_0-0-0 | Bin 80 -> 0 bytes ...index-0004-0_00000000000000002.log.1_0-0-0 | Bin 80 -> 0 bytes ...ex-0004-0_20250429145943846.log.1_0-91-229 | Bin 14310 -> 0 bytes ...index-0005-0_00000000000000002.log.1_0-0-0 | Bin 80 -> 0 bytes ...ex-0005-0_20250429145938324.log.1_0-57-129 | Bin 14310 -> 0 bytes ...index-0006-0_00000000000000002.log.1_0-0-0 | Bin 80 -> 0 bytes ...index-0007-0_00000000000000002.log.1_0-0-0 | Bin 80 -> 0 bytes ...ex-0007-0_20250429145938324.log.1_1-57-130 | Bin 14309 -> 0 bytes ...ex-0007-0_20250429145943846.log.1_1-91-230 | Bin 14309 -> 0 bytes ...index-0008-0_00000000000000002.log.1_0-0-0 | Bin 80 -> 0 bytes ...index-0009-0_00000000000000002.log.1_0-0-0 | Bin 80 -> 0 bytes ...x-0004-0_4-104-294_20250429145946737.hfile | Bin 7040 -> 0 bytes ...ex-0005-0_5-62-154_20250429145943911.hfile | Bin 7044 -> 0 bytes ...x-0007-0_6-104-296_20250429145946737.hfile | Bin 7195 -> 0 bytes ...ex-0007-0_7-62-156_20250429145943911.hfile | Bin 7041 -> 0 bytes .../.hoodie_partition_metadata | 4 - ...price-0000-0_00000000000000004.log.1_0-0-0 | Bin 80 -> 0 bytes ...price-0001-0_00000000000000004.log.1_0-0-0 | Bin 80 -> 0 bytes ...e-0001-0_20250429145946675.log.1_6-120-387 | Bin 8107 -> 0 bytes ...price-0002-0_00000000000000004.log.1_0-0-0 | Bin 80 -> 0 bytes ...e-0002-0_20250429145946675.log.1_5-120-386 | Bin 14281 -> 0 bytes ...price-0003-0_00000000000000004.log.1_0-0-0 | Bin 80 -> 0 bytes ...price-0004-0_00000000000000004.log.1_0-0-0 | Bin 80 -> 0 bytes ...e-0004-0_20250429145946675.log.1_4-120-385 | Bin 22389 -> 0 bytes ...price-0005-0_00000000000000004.log.1_0-0-0 | Bin 80 -> 0 bytes ...price-0006-0_00000000000000004.log.1_0-0-0 | Bin 80 -> 0 bytes ...price-0007-0_00000000000000004.log.1_0-0-0 | Bin 80 -> 0 bytes ...e-0007-0_20250429145946675.log.1_8-120-389 | Bin 22388 -> 0 bytes ...price-0008-0_00000000000000004.log.1_0-0-0 | Bin 80 -> 0 bytes ...e-0008-0_20250429145946675.log.1_7-120-388 | Bin 14282 -> 0 bytes ...price-0009-0_00000000000000004.log.1_0-0-0 | Bin 80 -> 0 bytes ...e-0009-0_20250429145946675.log.1_9-120-390 | Bin 8107 -> 0 bytes ...e-0001-0_1-100-273_00000000000000004.hfile | Bin 7017 -> 0 bytes ...-0001-0_17-104-307_20250429145946737.hfile | Bin 7030 -> 0 bytes ...-0004-0_14-104-304_20250429145946737.hfile | Bin 7029 -> 0 bytes ...e-0004-0_4-100-274_00000000000000004.hfile | Bin 7016 -> 0 bytes ...-0007-0_19-104-309_20250429145946737.hfile | Bin 7029 -> 0 bytes ...e-0007-0_7-100-275_00000000000000004.hfile | Bin 7016 -> 0 bytes ...-0009-0_22-104-312_20250429145946737.hfile | Bin 7029 -> 0 bytes ...e-0009-0_9-100-276_00000000000000004.hfile | Bin 7016 -> 0 bytes .../20250429145938324.deltacommit.inflight | Bin 3496 -> 0 bytes .../20250429145938324.deltacommit.requested | 0 ...429145938324_20250429145943632.deltacommit | Bin 4180 -> 0 bytes .../20250429145943846.deltacommit.inflight | Bin 3496 -> 0 bytes .../20250429145943846.deltacommit.requested | 0 ...429145943846_20250429145945109.deltacommit | Bin 4180 -> 0 bytes .../20250429145945334.indexing.inflight | 0 .../20250429145945334.indexing.requested | Bin 828 -> 0 bytes ...250429145945334_20250429145946286.indexing | Bin 1148 -> 0 bytes .../20250429145946675.deltacommit.inflight | Bin 3920 -> 0 bytes .../20250429145946675.deltacommit.requested | 0 ...429145946675_20250429145948177.deltacommit | Bin 4988 -> 0 bytes ...9f79e6-0_20250429145946675.log.1_1-110-336 | Bin 1004 -> 0 bytes ...3e1bb7-0_20250429145946675.log.1_0-110-335 | Bin 1004 -> 0 bytes .../country=SG/.hoodie_partition_metadata | 4 - ...f79e6-0_0-78-201_20250429145943846.parquet | Bin 435328 -> 0 bytes ...e1bb7-0_0-44-101_20250429145938324.parquet | Bin 435331 -> 0 bytes ...b29514-0_20250429145946675.log.1_2-110-337 | Bin 1004 -> 0 bytes ...221782-0_20250429145946675.log.1_3-110-338 | Bin 1004 -> 0 bytes .../country=US/.hoodie_partition_metadata | 4 - ...29514-0_1-44-102_20250429145938324.parquet | Bin 435331 -> 0 bytes ...21782-0_1-78-202_20250429145943846.parquet | Bin 435331 -> 0 bytes .../hudi-testing-data/hudi_multi_pt_v8_mor.md | 56 + .../hudi_multi_pt_v8_mor.zip | Bin 0 -> 493901 bytes .../hudi_non_part_cow.md} | 0 .../hudi-testing-data/hudi_non_part_cow.zip | Bin 0 -> 5980 bytes .../.hoodie/20231127051653361.commit | 37 - .../20231127051653361.commit.requested | 0 .../.hoodie/20231127051653361.inflight | 31 - .../.hoodie/hoodie.properties | 17 - .../.hoodie_partition_metadata | 4 - ...3da93b-0_0-27-28_20231127051653361.parquet | Bin 435338 -> 0 bytes .../hudi_stock_ticks_cow.zip | Bin 0 -> 45382 bytes .../hudi_stock_ticks_mor.zip | Bin 0 -> 62909 bytes ...keygen_pt_epoch_to_yyyy_mm_dd_hh_v8_mor.md | 63 ++ ...eygen_pt_epoch_to_yyyy_mm_dd_hh_v8_mor.zip | Bin 0 -> 327289 bytes ...eygen_pt_scalar_to_yyyy_mm_dd_hh_v8_mor.md | 64 ++ ...ygen_pt_scalar_to_yyyy_mm_dd_hh_v8_mor.zip | Bin 0 -> 327962 bytes .../hudi-testing-data/hudi_trips_cow_v8.md | 34 + .../hudi-testing-data/hudi_trips_cow_v8.zip | Bin 0 -> 3860131 bytes .../hudi-testing-data/stock_ticks_cow.zip | Bin 0 -> 18891 bytes .../.hoodie/20211216071453747.commit | 51 - .../20211216071453747.commit.requested | 0 .../.hoodie/20211216071453747.inflight | 48 - .../stock_ticks_cow/.hoodie/hoodie.properties | 13 - .../2018/08/31/.hoodie_partition_metadata | 4 - ...317216-0_0-28-26_20211216071453747.parquet | Bin 440747 -> 0 bytes .../hudi-testing-data/stock_ticks_mor.zip | Bin 0 -> 24925 bytes .../.hoodie/20211221030120532.deltacommit | 51 - .../20211221030120532.deltacommit.inflight | 48 - .../20211221030120532.deltacommit.requested | 0 .../.hoodie/20211227092838847.deltacommit | 55 - .../20211227092838847.deltacommit.inflight | 71 -- .../20211227092838847.deltacommit.requested | 0 .../stock_ticks_mor/.hoodie/hoodie.properties | 14 - ...30cdb5a2-0_20211221030120532.log.1_0-28-29 | Bin 22220 -> 0 bytes .../2018/08/31/.hoodie_partition_metadata | 4 - ...cdb5a2-0_0-28-26_20211221030120532.parquet | Bin 440746 -> 0 bytes .../src/test/resources/long_timestamp.parquet | Bin 0 -> 598 bytes 261 files changed, 9661 insertions(+), 2044 deletions(-) create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiBaseFileOnlyPageSource.java delete mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiExecutorModule.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPageSource.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/file/HudiBaseFile.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/file/HudiFile.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/file/HudiLogFile.java rename hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/{TrinoHudiFileReaderFactory.java => HudiTrinoFileReaderFactory.java} (58%) rename hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/{TrinoHudiIoFactory.java => HudiTrinoIOFactory.java} (68%) create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/InlineSeekableDataInputStream.java delete mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiSnapshotDirectoryLister.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiBaseIndexSupport.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiColumnStatsIndexSupport.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiIndexSupport.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiNoOpIndexSupport.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiPartitionStatsIndexSupport.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiRecordLevelIndexSupport.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiSecondaryIndexSupport.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/IndexSupportFactory.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/reader/HudiTrinoReaderContext.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/reader/HudiTrinoRecord.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/stats/ForHudiTableStatistics.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/stats/HudiTableStatistics.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/stats/TableMetadataReader.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/stats/TableStatisticsReader.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/HudiTrinoInlineStorage.java rename hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/{TrinoHudiStorage.java => HudiTrinoStorage.java} (59%) create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/HudiAvroSerializer.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/HudiTableTypeUtils.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/SynthesizedColumnHandler.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/SynthesizedColumnStrategy.java create mode 100644 hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/TupleDomainUtils.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/SessionBuilder.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiPageSource.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiPageSourceProviderTest.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/query/index/HudiRecordLevelIndexSupportTest.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/query/index/TestingColumnHandle.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/split/TestHudiSplitFactory.java delete mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoHudiStorage.java delete mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoStorageConfiguration.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/HudiTableUnzipper.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TypeInfoHelper.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/util/TestTupleDomainUtilsExtendedNullFilterTest.java create mode 100644 hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/util/TestTupleDomainUtilsTest.java create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_comprehensive_types_v6_mor.md create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_comprehensive_types_v6_mor.zip create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_comprehensive_types_v8_mor.md create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_comprehensive_types_v8_mor.zip create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl.zip delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.commit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.commit.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.commit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.commit.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/hoodie.properties delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=10/.hoodie_partition_metadata delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=10/719c3273-2805-4124-b1ac-e980dada85bf-0_0-27-1215_20220906063435640.parquet delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=11/.hoodie_partition_metadata delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=11/4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0_0-70-2444_20220906063456550.parquet create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_custom_keygen_pt_v8_mor.md create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_custom_keygen_pt_v8_mor.zip create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v6_mor.md create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v6_mor.zip create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor.md create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor.zip delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/.index_defs/index.json delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/hoodie.properties delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/hoodie.properties delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000000.deltacommit.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000000.deltacommit.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000000_20250429145939812.deltacommit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000001.deltacommit.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000001.deltacommit.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000001_20250429145940407.deltacommit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002.deltacommit.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002.deltacommit.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002_20250429145941217.deltacommit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003.deltacommit.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003.deltacommit.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003_20250429145941430.deltacommit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000004.deltacommit.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000004.deltacommit.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000004_20250429145945968.deltacommit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145938324.deltacommit.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145938324.deltacommit.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145938324_20250429145943593.deltacommit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472.compaction.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472.compaction.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472_20250429145941874.commit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846.deltacommit.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846.deltacommit.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846_20250429145945066.deltacommit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943911.compaction.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943911.compaction.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943911_20250429145944166.commit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675.deltacommit.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675.deltacommit.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675_20250429145948126.deltacommit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946737.compaction.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946737.compaction.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946737_20250429145947037.commit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0000-0_00000000000000001.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0000-0_20250429145938324.log.1_2-57-131 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0000-0_20250429145943846.log.1_2-91-231 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0000-0_20250429145946675.log.1_0-120-381 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0001-0_00000000000000001.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0001-0_20250429145938324.log.1_3-57-132 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0001-0_20250429145943846.log.1_3-91-232 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0001-0_20250429145946675.log.1_1-120-382 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.hoodie_partition_metadata delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0000-0_10-62-159_20250429145943911.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0000-0_9-104-299_20250429145946737.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0001-0_10-104-300_20250429145946737.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0001-0_11-62-160_20250429145943911.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_00000000000000000.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_20250429145938324.log.1_5-57-134 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_20250429145943846.log.1_5-91-234 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_20250429145946675.log.1_3-120-384 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.hoodie_partition_metadata delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/files-0000-0_0-28-69_20250429145941472.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/files-0000-0_0-5-4_00000000000000000.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/files-0000-0_12-104-302_20250429145946737.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/files-0000-0_13-62-162_20250429145943911.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.hoodie_partition_metadata delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_00000000000000003.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_20250429145938324.log.1_4-57-133 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_20250429145943846.log.1_4-91-233 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_20250429145946675.log.1_2-120-383 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/partition-stats-0000-0_11-104-301_20250429145946737.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/partition-stats-0000-0_12-62-161_20250429145943911.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.hoodie_partition_metadata delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0000-0_00000000000000002.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0001-0_00000000000000002.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0002-0_00000000000000002.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0003-0_00000000000000002.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0004-0_00000000000000002.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0004-0_20250429145943846.log.1_0-91-229 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0005-0_00000000000000002.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0005-0_20250429145938324.log.1_0-57-129 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0006-0_00000000000000002.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0007-0_00000000000000002.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0007-0_20250429145938324.log.1_1-57-130 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0007-0_20250429145943846.log.1_1-91-230 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0008-0_00000000000000002.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0009-0_00000000000000002.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/record-index-0004-0_4-104-294_20250429145946737.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/record-index-0005-0_5-62-154_20250429145943911.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/record-index-0007-0_6-104-296_20250429145946737.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/record-index-0007-0_7-62-156_20250429145943911.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.hoodie_partition_metadata delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0000-0_00000000000000004.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0001-0_00000000000000004.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0001-0_20250429145946675.log.1_6-120-387 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0002-0_00000000000000004.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0002-0_20250429145946675.log.1_5-120-386 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0003-0_00000000000000004.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0004-0_00000000000000004.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0004-0_20250429145946675.log.1_4-120-385 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0005-0_00000000000000004.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0006-0_00000000000000004.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0007-0_00000000000000004.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0007-0_20250429145946675.log.1_8-120-389 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0008-0_00000000000000004.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0008-0_20250429145946675.log.1_7-120-388 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0009-0_00000000000000004.log.1_0-0-0 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0009-0_20250429145946675.log.1_9-120-390 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0001-0_1-100-273_00000000000000004.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0001-0_17-104-307_20250429145946737.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0004-0_14-104-304_20250429145946737.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0004-0_4-100-274_00000000000000004.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0007-0_19-104-309_20250429145946737.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0007-0_7-100-275_00000000000000004.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0009-0_22-104-312_20250429145946737.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0009-0_9-100-276_00000000000000004.hfile delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145938324.deltacommit.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145938324.deltacommit.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145938324_20250429145943632.deltacommit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846.deltacommit.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846.deltacommit.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846_20250429145945109.deltacommit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145945334.indexing.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145945334.indexing.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145945334_20250429145946286.indexing delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145946675.deltacommit.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145946675.deltacommit.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145946675_20250429145948177.deltacommit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=SG/.415fa1e5-7e6a-4569-8b9f-b1f1d19f79e6-0_20250429145946675.log.1_1-110-336 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=SG/.8ee29f20-7679-4f65-8db6-70f9e93e1bb7-0_20250429145946675.log.1_0-110-335 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=SG/.hoodie_partition_metadata delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=SG/415fa1e5-7e6a-4569-8b9f-b1f1d19f79e6-0_0-78-201_20250429145943846.parquet delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=SG/8ee29f20-7679-4f65-8db6-70f9e93e1bb7-0_0-44-101_20250429145938324.parquet delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/.06b93bb0-c6c1-4cfa-baf6-2b6716b29514-0_20250429145946675.log.1_2-110-337 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/.a9d27485-57a8-4561-b21c-ef8ed6221782-0_20250429145946675.log.1_3-110-338 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/.hoodie_partition_metadata delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/06b93bb0-c6c1-4cfa-baf6-2b6716b29514-0_1-44-102_20250429145938324.parquet delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/a9d27485-57a8-4561-b21c-ef8ed6221782-0_1-78-202_20250429145943846.parquet create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_pt_v8_mor.md create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_pt_v8_mor.zip rename hudi-trino-plugin/src/test/resources/{README.md => hudi-testing-data/hudi_non_part_cow.md} (100%) create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow.zip delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.commit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.commit.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/hoodie.properties delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie_partition_metadata delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/05b0f4ec-00fb-49f2-a1e2-7f510f3da93b-0_0-27-28_20231127051653361.parquet create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_stock_ticks_cow.zip create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_stock_ticks_mor.zip create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_timestamp_keygen_pt_epoch_to_yyyy_mm_dd_hh_v8_mor.md create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_timestamp_keygen_pt_epoch_to_yyyy_mm_dd_hh_v8_mor.zip create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_timestamp_keygen_pt_scalar_to_yyyy_mm_dd_hh_v8_mor.md create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_timestamp_keygen_pt_scalar_to_yyyy_mm_dd_hh_v8_mor.zip create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_trips_cow_v8.md create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_trips_cow_v8.zip create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow.zip delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/20211216071453747.commit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/20211216071453747.commit.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/20211216071453747.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/.hoodie/hoodie.properties delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/2018/08/31/.hoodie_partition_metadata delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_cow/2018/08/31/871677fb-e0e3-46f8-9cc1-fe497e317216-0_0-28-26_20211216071453747.parquet create mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor.zip delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211221030120532.deltacommit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211221030120532.deltacommit.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211221030120532.deltacommit.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211227092838847.deltacommit delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211227092838847.deltacommit.inflight delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/20211227092838847.deltacommit.requested delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/.hoodie/hoodie.properties delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/2018/08/31/.167a0e3e-9b94-444f-a178-242230cdb5a2-0_20211221030120532.log.1_0-28-29 delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/2018/08/31/.hoodie_partition_metadata delete mode 100644 hudi-trino-plugin/src/test/resources/hudi-testing-data/stock_ticks_mor/2018/08/31/167a0e3e-9b94-444f-a178-242230cdb5a2-0_0-28-26_20211221030120532.parquet create mode 100644 hudi-trino-plugin/src/test/resources/long_timestamp.parquet diff --git a/.github/workflows/bot.yml b/.github/workflows/bot.yml index b75fa6be0030e..f8c0ccd7c9178 100644 --- a/.github/workflows/bot.yml +++ b/.github/workflows/bot.yml @@ -1209,35 +1209,35 @@ jobs: run: mvn test -Punit-tests -Djava17 -Djava.version=17 -D"$SCALA_PROFILE" -D"$FLINK_PROFILE" -pl hudi-examples/hudi-examples-flink $MVN_ARGS -# test-hudi-trino-plugin: -# runs-on: ubuntu-latest -# steps: -# - name: Checkout repository -# uses: actions/checkout@v3 -# - name: Set up JDK 8 -# uses: actions/setup-java@v3 -# with: -# java-version: '8' -# distribution: 'temurin' -# architecture: x64 -# cache: maven -# - name: Build and Install All Dependencies with JDK8 -# run: -# # Using spark3.5 and scala2.12 so parquet version 1.13.1 is used instead of 1.10.1 -# mvn clean install $MVN_ARGS -Pspark3.5 -Pscala-2.12 -DskipTests -pl 'hudi-timeline-service,hudi-client,hudi-hadoop-mr,hudi-client/hudi-java-client' -am -# - name: Set up JDK 23 -# uses: actions/setup-java@v3 -# with: -# # Note: We are not caching here again, as we want to use the .m2 repository populated by -# # the previous step -# java-version: '23' -# distribution: 'temurin' -# architecture: x64 -# - name: Build hudi-trino-plugin with JDK 23 -# working-directory: ./hudi-trino-plugin -# run: -# mvn clean install -DskipTests -# - name: Test hudi-trino-plugin with JDK 23 -# working-directory: ./hudi-trino-plugin -# run: -# mvn test + test-hudi-trino-plugin: + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + - name: Set up JDK 8 + uses: actions/setup-java@v3 + with: + java-version: '8' + distribution: 'temurin' + architecture: x64 + cache: maven + - name: Build and Install All Dependencies with JDK8 + run: + # Using spark3.5 and scala2.12 so parquet version 1.13.1 is used instead of 1.10.1 + mvn clean install $MVN_ARGS -Pspark3.5 -Pscala-2.12 -DskipTests -pl 'hudi-timeline-service,hudi-client,hudi-hadoop-mr,hudi-client/hudi-java-client' -am + - name: Set up JDK 23 + uses: actions/setup-java@v3 + with: + # Note: We are not caching here again, as we want to use the .m2 repository populated by + # the previous step + java-version: '23' + distribution: 'temurin' + architecture: x64 + - name: Build hudi-trino-plugin with JDK 23 + working-directory: ./hudi-trino-plugin + run: + mvn clean install -DskipTests + - name: Test hudi-trino-plugin with JDK 23 + working-directory: ./hudi-trino-plugin + run: + mvn test diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiBaseFileOnlyPageSource.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiBaseFileOnlyPageSource.java new file mode 100644 index 0000000000000..1180638a7cc47 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiBaseFileOnlyPageSource.java @@ -0,0 +1,126 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import com.google.common.collect.ImmutableList; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hudi.util.SynthesizedColumnHandler; +import io.trino.spi.Page; +import io.trino.spi.block.Block; +import io.trino.spi.connector.ConnectorPageSource; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import static java.util.Objects.requireNonNull; + +/** + * This page source is for reading data columns in the parquet format. + * This page source also avoids costly avro IndexRecord serialization. + */ +public class HudiBaseFileOnlyPageSource + implements ConnectorPageSource +{ + private final ConnectorPageSource dataPageSource; + private final List allOutputColumns; + private final SynthesizedColumnHandler synthesizedColumnHandler; + // Maps output channel to physical source channel, or -1 if synthesized + private final int[] physicalSourceChannelMap; + + public HudiBaseFileOnlyPageSource( + ConnectorPageSource dataPageSource, + List allOutputColumns, + // Columns provided by dataPageSource + List dataColumns, + // Handler to manage synthesized/virtual in Hudi tables such as partition columns and metadata, i.e. file size (not hudi metadata) + SynthesizedColumnHandler synthesizedColumnHandler) + { + this.dataPageSource = requireNonNull(dataPageSource, "dataPageSource is null"); + this.allOutputColumns = ImmutableList.copyOf(requireNonNull(allOutputColumns, "allOutputColumns is null")); + this.synthesizedColumnHandler = requireNonNull(synthesizedColumnHandler, "synthesizedColumnHandler is null"); + + // Create a mapping from the channel index in the output page to the channel index in the physicalDataPageSource's page + this.physicalSourceChannelMap = new int[allOutputColumns.size()]; + Map physicalColumnNameToChannel = new HashMap<>(); + for (int i = 0; i < dataColumns.size(); i++) { + physicalColumnNameToChannel.put(dataColumns.get(i).getName().toLowerCase(Locale.ENGLISH), i); + } + + for (int i = 0; i < allOutputColumns.size(); i++) { + this.physicalSourceChannelMap[i] = physicalColumnNameToChannel.getOrDefault(allOutputColumns.get(i).getName().toLowerCase(Locale.ENGLISH), -1); + } + } + + @Override + public long getCompletedBytes() + { + return dataPageSource.getCompletedBytes(); + } + + @Override + public long getReadTimeNanos() + { + return dataPageSource.getReadTimeNanos(); + } + + @Override + public boolean isFinished() + { + return dataPageSource.isFinished(); + } + + @Override + public Page getNextPage() + { + Page physicalSourcePage = dataPageSource.getNextPage(); + if (physicalSourcePage == null) { + return null; + } + + int positionCount = physicalSourcePage.getPositionCount(); + if (positionCount == 0 && synthesizedColumnHandler.getSynthesizedColumnCount() == 0) { + // If only physical columns and page is empty + return physicalSourcePage; + } + + Block[] outputBlocks = new Block[allOutputColumns.size()]; + for (int i = 0; i < allOutputColumns.size(); i++) { + HiveColumnHandle outputColumn = allOutputColumns.get(i); + if (physicalSourceChannelMap[i] != -1) { + outputBlocks[i] = physicalSourcePage.getBlock(physicalSourceChannelMap[i]); + } + else { + // Column is synthesized + outputBlocks[i] = synthesizedColumnHandler.createRleSynthesizedBlock(outputColumn, positionCount); + } + } + return new Page(outputBlocks); + } + + @Override + public long getMemoryUsage() + { + return dataPageSource.getMemoryUsage(); + } + + @Override + public void close() + throws IOException + { + dataPageSource.close(); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConfig.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConfig.java index da087737f4b62..5138caea39c8d 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConfig.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConfig.java @@ -18,6 +18,7 @@ import io.airlift.configuration.ConfigDescription; import io.airlift.configuration.DefunctConfig; import io.airlift.units.DataSize; +import io.airlift.units.Duration; import jakarta.validation.constraints.DecimalMax; import jakarta.validation.constraints.DecimalMin; import jakarta.validation.constraints.Min; @@ -28,19 +29,24 @@ import static com.google.common.collect.ImmutableList.toImmutableList; import static io.airlift.units.DataSize.Unit.MEGABYTE; import static java.util.Locale.ENGLISH; +import static java.util.concurrent.TimeUnit.SECONDS; @DefunctConfig({ "hudi.min-partition-batch-size", - "hudi.max-partition-batch-size", - "hudi.metadata-enabled", + "hudi.max-partition-batch-size" }) public class HudiConfig { private List columnsToHide = ImmutableList.of(); + private boolean tableStatisticsEnabled = true; + private int tableStatisticsExecutorParallelism = 4; + private boolean metadataEnabled; private boolean shouldUseParquetColumnNames = true; + private boolean shouldUseParquetColumnIndex; private boolean sizeBasedSplitWeightsEnabled = true; private DataSize standardSplitWeightSize = DataSize.of(128, MEGABYTE); private double minimumAssignedSplitWeight = 0.05; + private DataSize targetSplitSize = DataSize.of(128, MEGABYTE); private int maxSplitsPerSecond = Integer.MAX_VALUE; private int maxOutstandingSplits = 1000; private int splitLoaderParallelism = 4; @@ -48,6 +54,16 @@ public class HudiConfig private long perTransactionMetastoreCacheMaximumSize = 2000; private boolean queryPartitionFilterRequired; private boolean ignoreAbsentPartitions; + private Duration dynamicFilteringWaitTimeout = new Duration(1, SECONDS); + + // Internal configuration for debugging and testing + private boolean isRecordLevelIndexEnabled = true; + private boolean isSecondaryIndexEnabled = true; + private boolean isColumnStatsIndexEnabled = true; + private boolean isPartitionStatsIndexEnabled = true; + private Duration columnStatsWaitTimeout = new Duration(1, SECONDS); + private Duration recordIndexWaitTimeout = new Duration(2, SECONDS); + private Duration secondaryIndexWaitTimeout = new Duration(2, SECONDS); public List getColumnsToHide() { @@ -65,6 +81,46 @@ public HudiConfig setColumnsToHide(List columnsToHide) return this; } + @Config("hudi.table-statistics-enabled") + @ConfigDescription("Enable table statistics for query planning.") + public HudiConfig setTableStatisticsEnabled(boolean tableStatisticsEnabled) + { + this.tableStatisticsEnabled = tableStatisticsEnabled; + return this; + } + + public boolean isTableStatisticsEnabled() + { + return this.tableStatisticsEnabled; + } + + @Min(1) + public int getTableStatisticsExecutorParallelism() + { + return tableStatisticsExecutorParallelism; + } + + @Config("hudi.table-statistics-executor-parallelism") + @ConfigDescription("Number of threads to asynchronously generate table statistics.") + public HudiConfig setTableStatisticsExecutorParallelism(int parallelism) + { + this.tableStatisticsExecutorParallelism = parallelism; + return this; + } + + @Config("hudi.metadata-enabled") + @ConfigDescription("Fetch the list of file names and sizes from Hudi metadata table rather than storage.") + public HudiConfig setMetadataEnabled(boolean metadataEnabled) + { + this.metadataEnabled = metadataEnabled; + return this; + } + + public boolean isMetadataEnabled() + { + return this.metadataEnabled; + } + @Config("hudi.parquet.use-column-names") @ConfigDescription("Access Parquet columns using names from the file. If disabled, then columns are accessed using index." + "Only applicable to Parquet file format.") @@ -79,6 +135,19 @@ public boolean getUseParquetColumnNames() return this.shouldUseParquetColumnNames; } + @Config("hudi.parquet.use-column-index") + @ConfigDescription("Enable using Parquet column indexes") + public HudiConfig setUseParquetColumnIndex(boolean shouldUseParquetColumnIndex) + { + this.shouldUseParquetColumnIndex = shouldUseParquetColumnIndex; + return this; + } + + public boolean isUseParquetColumnIndex() + { + return this.shouldUseParquetColumnIndex; + } + @Config("hudi.size-based-split-weights-enabled") @ConfigDescription("Unlike uniform splitting, size-based splitting ensures that each batch of splits has enough data to process. " + "By default, it is enabled to improve performance.") @@ -123,6 +192,20 @@ public double getMinimumAssignedSplitWeight() return minimumAssignedSplitWeight; } + @Config("hudi.target-split-size") + @ConfigDescription("The target split size") + public HudiConfig setTargetSplitSize(DataSize targetSplitSize) + { + this.targetSplitSize = targetSplitSize; + return this; + } + + @NotNull + public DataSize getTargetSplitSize() + { + return targetSplitSize; + } + @Min(1) public int getMaxSplitsPerSecond() { @@ -216,4 +299,112 @@ public boolean isIgnoreAbsentPartitions() { return ignoreAbsentPartitions; } + + @Config("hudi.index.record-level-index-enabled") + @ConfigDescription("Internal configuration to control whether record level index is enabled for debugging/testing.") + public HudiConfig setRecordLevelIndexEnabled(boolean isRecordLevelIndexEnabled) + { + this.isRecordLevelIndexEnabled = isRecordLevelIndexEnabled; + return this; + } + + public boolean isRecordLevelIndexEnabled() + { + return isRecordLevelIndexEnabled; + } + + @Config("hudi.index.secondary-index-enabled") + @ConfigDescription("Internal configuration to control whether secondary index is enabled for debugging/testing.") + public HudiConfig setSecondaryIndexEnabled(boolean isSecondaryIndexEnabled) + { + this.isSecondaryIndexEnabled = isSecondaryIndexEnabled; + return this; + } + + public boolean isSecondaryIndexEnabled() + { + return isSecondaryIndexEnabled; + } + + @Config("hudi.index.column-stats-index-enabled") + @ConfigDescription("Internal configuration to control whether column stats index is enabled for debugging/testing.") + public HudiConfig setColumnStatsIndexEnabled(boolean isColumnStatsIndexEnabled) + { + this.isColumnStatsIndexEnabled = isColumnStatsIndexEnabled; + return this; + } + + public boolean isColumnStatsIndexEnabled() + { + return isColumnStatsIndexEnabled; + } + + @Config("hudi.index.partition-stats-index-enabled") + @ConfigDescription("Internal configuration to control whether partition stats index is enabled for debugging/testing.") + public HudiConfig setPartitionStatsIndexEnabled(boolean isPartitionStatsIndexEnabled) + { + this.isPartitionStatsIndexEnabled = isPartitionStatsIndexEnabled; + return this; + } + + public boolean isPartitionStatsIndexEnabled() + { + return isPartitionStatsIndexEnabled; + } + + @Config("hudi.dynamic-filtering.wait-timeout") + @ConfigDescription("Maximum timeout to wait for dynamic filtering, e.g. 1000ms, 20s, 2m, 1h") + public HudiConfig setDynamicFilteringWaitTimeout(Duration dynamicFilteringWaitTimeout) + { + this.dynamicFilteringWaitTimeout = dynamicFilteringWaitTimeout; + return this; + } + + @NotNull + public Duration getDynamicFilteringWaitTimeout() + { + return dynamicFilteringWaitTimeout; + } + + @Config("hudi.index.column-stats.wait-timeout") + @ConfigDescription("Maximum timeout to wait for loading column stats, e.g. 1000ms, 20s") + public HudiConfig setColumnStatsWaitTimeout(Duration columnStatusWaitTimeout) + { + this.columnStatsWaitTimeout = columnStatusWaitTimeout; + return this; + } + + @NotNull + public Duration getColumnStatsWaitTimeout() + { + return columnStatsWaitTimeout; + } + + @Config("hudi.index.record-index.wait-timeout") + @ConfigDescription("Maximum timeout to wait for loading record index, e.g. 1000ms, 20s") + public HudiConfig setRecordIndexWaitTimeout(Duration recordIndexWaitTimeout) + { + this.recordIndexWaitTimeout = recordIndexWaitTimeout; + return this; + } + + @NotNull + public Duration getRecordIndexWaitTimeout() + { + return recordIndexWaitTimeout; + } + + @Config("hudi.index.secondary-index.wait-timeout") + @ConfigDescription("Maximum timeout to wait for loading secondary index, e.g. 1000ms, 20s") + public HudiConfig setSecondaryIndexWaitTimeout(Duration secondaryIndexWaitTimeout) + { + this.secondaryIndexWaitTimeout = secondaryIndexWaitTimeout; + return this; + } + + @NotNull + public Duration getSecondaryIndexWaitTimeout() + { + return secondaryIndexWaitTimeout; + } } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConnectorFactory.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConnectorFactory.java index 59c8833141d86..f7dd96d767991 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConnectorFactory.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiConnectorFactory.java @@ -30,7 +30,6 @@ import io.trino.plugin.base.session.SessionPropertiesProvider; import io.trino.plugin.hive.NodeVersion; import io.trino.plugin.hive.metastore.HiveMetastoreModule; -import io.trino.spi.Node; import io.trino.spi.NodeManager; import io.trino.spi.catalog.CatalogName; import io.trino.spi.classloader.ThreadContextClassLoader; @@ -79,14 +78,13 @@ public static Connector createConnector( new JsonModule(), new HudiModule(), new HiveMetastoreModule(Optional.empty()), - new FileSystemModule(catalogName, context.getCurrentNode().isCoordinator(), context.getOpenTelemetry(), false), + new FileSystemModule(catalogName, context.getNodeManager(), context.getOpenTelemetry(), false), new MBeanServerModule(), module.orElse(EMPTY_MODULE), binder -> { binder.bind(OpenTelemetry.class).toInstance(context.getOpenTelemetry()); binder.bind(Tracer.class).toInstance(context.getTracer()); - binder.bind(NodeVersion.class).toInstance(new NodeVersion(context.getCurrentNode().getVersion())); - binder.bind(Node.class).toInstance(context.getCurrentNode()); + binder.bind(NodeVersion.class).toInstance(new NodeVersion(context.getNodeManager().getCurrentNode().getVersion())); binder.bind(NodeManager.class).toInstance(context.getNodeManager()); binder.bind(TypeManager.class).toInstance(context.getTypeManager()); binder.bind(CatalogName.class).toInstance(new CatalogName(catalogName)); diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiErrorCode.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiErrorCode.java index 405017236503c..6b34fedc8853c 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiErrorCode.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiErrorCode.java @@ -31,8 +31,9 @@ public enum HudiErrorCode HUDI_CURSOR_ERROR(6, EXTERNAL), HUDI_FILESYSTEM_ERROR(7, EXTERNAL), HUDI_PARTITION_NOT_FOUND(8, EXTERNAL), - // HUDI_UNSUPPORTED_TABLE_TYPE(9, EXTERNAL), // Unused. Could be mistaken with HUDI_UNKNOWN_TABLE_TYPE. - + HUDI_UNSUPPORTED_TABLE_TYPE(9, EXTERNAL), + HUDI_NO_VALID_COMMIT(10, EXTERNAL), + HUDI_META_CLIENT_ERROR(11, EXTERNAL), /**/; private final ErrorCode errorCode; diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiExecutorModule.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiExecutorModule.java deleted file mode 100644 index 4fe862d96204c..0000000000000 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiExecutorModule.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Licensed 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. - */ -package io.trino.plugin.hudi; - -import com.google.inject.Binder; -import com.google.inject.Key; -import com.google.inject.Module; -import com.google.inject.Provides; -import com.google.inject.Singleton; - -import java.util.concurrent.ExecutorService; -import java.util.concurrent.ScheduledExecutorService; - -import static io.airlift.concurrent.Threads.daemonThreadsNamed; -import static io.trino.plugin.base.ClosingBinder.closingBinder; -import static java.util.concurrent.Executors.newCachedThreadPool; -import static java.util.concurrent.Executors.newScheduledThreadPool; - -public class HudiExecutorModule - implements Module -{ - @Override - public void configure(Binder binder) - { - closingBinder(binder).registerExecutor(Key.get(ExecutorService.class, ForHudiSplitManager.class)); - closingBinder(binder).registerExecutor(Key.get(ScheduledExecutorService.class, ForHudiSplitSource.class)); - } - - @Provides - @Singleton - @ForHudiSplitManager - public ExecutorService createExecutorService() - { - return newCachedThreadPool(daemonThreadsNamed("hudi-split-manager-%s")); - } - - @Provides - @Singleton - @ForHudiSplitSource - public ScheduledExecutorService createSplitLoaderExecutor(HudiConfig hudiConfig) - { - return newScheduledThreadPool( - hudiConfig.getSplitLoaderParallelism(), - daemonThreadsNamed("hudi-split-loader-%s")); - } -} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiMetadata.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiMetadata.java index b98cb5355663a..bbe5564b1d154 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiMetadata.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiMetadata.java @@ -15,7 +15,9 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; -import io.trino.filesystem.Location; +import com.google.common.collect.ImmutableSet; +import io.airlift.log.Logger; +import io.trino.filesystem.TrinoFileSystem; import io.trino.filesystem.TrinoFileSystemFactory; import io.trino.metastore.Column; import io.trino.metastore.HiveMetastore; @@ -23,6 +25,9 @@ import io.trino.metastore.TableInfo; import io.trino.plugin.base.classloader.ClassLoaderSafeSystemTable; import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hudi.stats.HudiTableStatistics; +import io.trino.plugin.hudi.stats.TableStatisticsReader; +import io.trino.plugin.hudi.util.HudiTableTypeUtils; import io.trino.spi.TrinoException; import io.trino.spi.connector.ColumnHandle; import io.trino.spi.connector.ColumnMetadata; @@ -39,7 +44,18 @@ import io.trino.spi.connector.SystemTable; import io.trino.spi.connector.TableNotFoundException; import io.trino.spi.predicate.TupleDomain; +import io.trino.spi.statistics.Estimate; +import io.trino.spi.statistics.TableStatistics; import io.trino.spi.type.TypeManager; +import org.apache.hudi.common.model.HoodieTableType; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.common.table.timeline.HoodieInstant; +import org.apache.hudi.common.table.timeline.versioning.v2.InstantComparatorV2; +import org.apache.hudi.common.util.CollectionUtils; +import org.apache.hudi.common.util.HoodieTimer; +import org.apache.hudi.common.util.Option; +import org.apache.hudi.metadata.MetadataPartitionType; +import org.apache.hudi.util.Lazy; import java.util.Collection; import java.util.Collections; @@ -48,6 +64,8 @@ import java.util.Map; import java.util.Optional; import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ExecutorService; import java.util.function.Function; import java.util.function.UnaryOperator; import java.util.stream.Stream; @@ -63,12 +81,13 @@ import static io.trino.plugin.hive.util.HiveUtil.hiveColumnHandles; import static io.trino.plugin.hive.util.HiveUtil.isHiveSystemSchema; import static io.trino.plugin.hive.util.HiveUtil.isHudiTable; -import static io.trino.plugin.hudi.HudiErrorCode.HUDI_BAD_DATA; import static io.trino.plugin.hudi.HudiSessionProperties.getColumnsToHide; +import static io.trino.plugin.hudi.HudiSessionProperties.isHudiMetadataTableEnabled; import static io.trino.plugin.hudi.HudiSessionProperties.isQueryPartitionFilterRequired; +import static io.trino.plugin.hudi.HudiSessionProperties.isTableStatisticsEnabled; import static io.trino.plugin.hudi.HudiTableProperties.LOCATION_PROPERTY; import static io.trino.plugin.hudi.HudiTableProperties.PARTITIONED_BY_PROPERTY; -import static io.trino.plugin.hudi.HudiUtil.hudiMetadataExists; +import static io.trino.plugin.hudi.HudiUtil.buildTableMetaClient; import static io.trino.spi.StandardErrorCode.NOT_SUPPORTED; import static io.trino.spi.StandardErrorCode.QUERY_REJECTED; import static io.trino.spi.StandardErrorCode.UNSUPPORTED_TABLE_TYPE; @@ -77,20 +96,34 @@ import static java.util.Collections.singletonList; import static java.util.Objects.requireNonNull; import static java.util.function.Function.identity; -import static org.apache.hudi.common.model.HoodieTableType.COPY_ON_WRITE; +import static org.apache.hudi.common.table.timeline.HoodieInstant.State.COMPLETED; +import static org.apache.hudi.common.table.timeline.HoodieTimeline.CLUSTERING_ACTION; +import static org.apache.hudi.common.table.timeline.HoodieTimeline.COMMIT_ACTION; +import static org.apache.hudi.common.table.timeline.HoodieTimeline.DELTA_COMMIT_ACTION; +import static org.apache.hudi.common.table.timeline.HoodieTimeline.INDEXING_ACTION; +import static org.apache.hudi.common.table.timeline.HoodieTimeline.REPLACE_COMMIT_ACTION; public class HudiMetadata implements ConnectorMetadata { + private static final Logger log = Logger.get(HudiMetadata.class); + private static final Map tableStatisticsCache = new ConcurrentHashMap<>(); + private static final Set refreshingKeysInProgress = ConcurrentHashMap.newKeySet(); private final HiveMetastore metastore; private final TrinoFileSystemFactory fileSystemFactory; private final TypeManager typeManager; + private final ExecutorService tableStatisticsExecutor; - public HudiMetadata(HiveMetastore metastore, TrinoFileSystemFactory fileSystemFactory, TypeManager typeManager) + public HudiMetadata( + HiveMetastore metastore, + TrinoFileSystemFactory fileSystemFactory, + TypeManager typeManager, + ExecutorService tableStatisticsExecutor) { this.metastore = requireNonNull(metastore, "metastore is null"); this.fileSystemFactory = requireNonNull(fileSystemFactory, "fileSystemFactory is null"); this.typeManager = requireNonNull(typeManager, "typeManager is null"); + this.tableStatisticsExecutor = requireNonNull(tableStatisticsExecutor, "tableStatisticsExecutor is null"); } @Override @@ -104,6 +137,7 @@ public List listSchemaNames(ConnectorSession session) @Override public HudiTableHandle getTableHandle(ConnectorSession session, SchemaTableName tableName, Optional startVersion, Optional endVersion) { + log.info("Creating new HudiTableHandle for %s", tableName); if (startVersion.isPresent() || endVersion.isPresent()) { throw new TrinoException(NOT_SUPPORTED, "This connector does not support versioned tables"); } @@ -111,24 +145,29 @@ public HudiTableHandle getTableHandle(ConnectorSession session, SchemaTableName if (isHiveSystemSchema(tableName.getSchemaName())) { return null; } - Optional

table = metastore.getTable(tableName.getSchemaName(), tableName.getTableName()); - if (table.isEmpty()) { + Optional
tableOpt = metastore.getTable(tableName.getSchemaName(), tableName.getTableName()); + if (tableOpt.isEmpty()) { return null; } - if (!isHudiTable(table.get())) { + + Table table = tableOpt.get(); + if (!isHudiTable(table)) { throw new TrinoException(UNSUPPORTED_TABLE_TYPE, format("Not a Hudi table: %s", tableName)); } - Location location = Location.of(table.get().getStorage().getLocation()); - if (!hudiMetadataExists(fileSystemFactory.create(session), location)) { - throw new TrinoException(HUDI_BAD_DATA, "Location of table %s does not contain Hudi table metadata: %s".formatted(tableName, location)); - } + String basePath = table.getStorage().getLocation(); + TrinoFileSystem fileSystem = fileSystemFactory.create(session); + String inputFormat = table.getStorage().getStorageFormat().getInputFormat(); + HoodieTableType hoodieTableType = HudiTableTypeUtils.fromInputFormat(inputFormat); return new HudiTableHandle( + Optional.of(table), + Optional.of(Lazy.lazily(() -> buildTableMetaClient(fileSystem, tableName.toString(), basePath))), tableName.getSchemaName(), tableName.getTableName(), - table.get().getStorage().getLocation(), - COPY_ON_WRITE, - getPartitionKeyColumnHandles(table.get(), typeManager), + table.getStorage().getLocation(), + hoodieTableType, + getPartitionKeyColumnHandles(table, typeManager), + ImmutableSet.of(), TupleDomain.all(), TupleDomain.all()); } @@ -230,7 +269,7 @@ public ColumnMetadata getColumnMetadata(ConnectorSession session, ConnectorTable } @Override - public Optional getInfo(ConnectorSession session, ConnectorTableHandle tableHandle) + public Optional getInfo(ConnectorTableHandle tableHandle) { HudiTableHandle table = (HudiTableHandle) tableHandle; return Optional.of(new HudiTableInfo(table.getSchemaTableName(), table.getTableType().name(), table.getBasePath())); @@ -269,6 +308,22 @@ public Iterator streamRelationColumns( .iterator(); } + @Override + public TableStatistics getTableStatistics(ConnectorSession session, ConnectorTableHandle tableHandle) + { + if (!isTableStatisticsEnabled(session) || !isHudiMetadataTableEnabled(session)) { + return TableStatistics.empty(); + } + + List columnHandles = getColumnHandles(session, tableHandle) + .values().stream() + .map(e -> (HiveColumnHandle) e) + .filter(e -> !e.isHidden()) + .toList(); + return getTableStatisticsFromCache( + (HudiTableHandle) tableHandle, columnHandles, tableStatisticsCache, refreshingKeysInProgress, tableStatisticsExecutor); + } + @Override public void validateScan(ConnectorSession session, ConnectorTableHandle handle) { @@ -349,4 +404,95 @@ private List listSchemas(ConnectorSession session, Optional sche .map(Collections::singletonList) .orElseGet(() -> listSchemaNames(session)); } + + private static TableStatistics getTableStatisticsFromCache( + HudiTableHandle tableHandle, + List columnHandles, + Map cache, + Set refreshingKeysInProgress, + ExecutorService tableStatisticsExecutor) + { + TableStatisticsCacheKey key = new TableStatisticsCacheKey(tableHandle.getBasePath()); + HudiTableStatistics cachedValue = cache.get(key); + TableStatistics statisticsToReturn = TableStatistics.empty(); + if (cachedValue != null) { + // Here we avoid checking the latest commit which requires loading the meta client and timeline + // which can block query planning. We assume that the cache result might be stale but close + // enough for CBO. + log.info("Returning cached table statistics for table: %s, latest commit in cache: %s", + tableHandle.getSchemaTableName(), cachedValue.latestCommit()); + statisticsToReturn = cachedValue.tableStatistics(); + } + + triggerAsyncStatsRefresh(tableHandle, columnHandles, cache, key, refreshingKeysInProgress, tableStatisticsExecutor); + return statisticsToReturn; + } + + private static void triggerAsyncStatsRefresh( + HudiTableHandle tableHandle, + List columnHandles, + Map cache, + TableStatisticsCacheKey key, + Set refreshingKeysInProgress, + ExecutorService tableStatisticsExecutor) + { + if (refreshingKeysInProgress.add(key)) { + tableStatisticsExecutor.submit(() -> { + HoodieTimer refreshTimer = HoodieTimer.start(); + try { + log.info("Starting async statistics calculation for table: %s", tableHandle.getSchemaTableName()); + HoodieTableMetaClient metaClient = tableHandle.getMetaClient(); + Option latestCommitOption = metaClient.getActiveTimeline() + .getTimelineOfActions(CollectionUtils.createSet( + COMMIT_ACTION, DELTA_COMMIT_ACTION, REPLACE_COMMIT_ACTION, CLUSTERING_ACTION, INDEXING_ACTION)) + .filterCompletedInstants().lastInstant(); + + if (latestCommitOption.isEmpty()) { + log.info("Putting table statistics of 0 row in %s ms for empty table: %s", + refreshTimer.endTimer(), tableHandle.getSchemaTableName()); + cache.put(key, new HudiTableStatistics( + // A dummy instant that does not match any commit + new HoodieInstant(COMPLETED, COMMIT_ACTION, "", InstantComparatorV2.REQUESTED_TIME_BASED_COMPARATOR), + TableStatistics.builder().setRowCount(Estimate.of(0)).build())); + return; + } + + HoodieInstant latestCommit = latestCommitOption.get(); + HudiTableStatistics oldValue = cache.get(key); + if (oldValue != null && latestCommit.equals(oldValue.latestCommit())) { + log.info("Table statistics is still valid for table: %s (checked in %s ms)", + tableHandle.getSchemaTableName(), refreshTimer.endTimer()); + return; + } + + if (!metaClient.getTableConfig().isMetadataTableAvailable() + || !metaClient.getTableConfig().isMetadataPartitionAvailable(MetadataPartitionType.COLUMN_STATS)) { + log.info("Putting empty table statistics in %s ms as metadata table or " + + "column stats is not available for table: %s", + refreshTimer.endTimer(), tableHandle.getSchemaTableName()); + cache.put(key, new HudiTableStatistics(latestCommit, TableStatistics.empty())); + return; + } + + TableStatistics newStatistics = TableStatisticsReader.create(metaClient) + .getTableStatistics(latestCommit, columnHandles); + HudiTableStatistics newValue = new HudiTableStatistics(latestCommit, newStatistics); + cache.put(key, newValue); + log.info("Async table statistics calculation finished in %s ms for table: %s, commit: %s", + refreshTimer.endTimer(), tableHandle.getSchemaTableName(), latestCommit); + } + catch (Throwable e) { + log.error(e, "Error calculating table statistics asynchronously for table %s", tableHandle.getSchemaTableName()); + } + finally { + refreshingKeysInProgress.remove(key); + } + }); + } + else { + log.debug("Table statistics refresh already in progress for table: %s", tableHandle.getSchemaTableName()); + } + } + + private record TableStatisticsCacheKey(String basePath) {} } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiMetadataFactory.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiMetadataFactory.java index 444d20e6a8339..ca11b48a61a95 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiMetadataFactory.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiMetadataFactory.java @@ -17,10 +17,12 @@ import io.trino.filesystem.TrinoFileSystemFactory; import io.trino.metastore.HiveMetastoreFactory; import io.trino.metastore.cache.CachingHiveMetastore; +import io.trino.plugin.hudi.stats.ForHudiTableStatistics; import io.trino.spi.security.ConnectorIdentity; import io.trino.spi.type.TypeManager; import java.util.Optional; +import java.util.concurrent.ExecutorService; import static io.trino.metastore.cache.CachingHiveMetastore.createPerTransactionCache; import static java.util.Objects.requireNonNull; @@ -31,19 +33,26 @@ public class HudiMetadataFactory private final TrinoFileSystemFactory fileSystemFactory; private final TypeManager typeManager; private final long perTransactionMetastoreCacheMaximumSize; + private final ExecutorService tableStatisticsExecutor; @Inject - public HudiMetadataFactory(HiveMetastoreFactory metastoreFactory, TrinoFileSystemFactory fileSystemFactory, TypeManager typeManager, HudiConfig hudiConfig) + public HudiMetadataFactory( + HiveMetastoreFactory metastoreFactory, + TrinoFileSystemFactory fileSystemFactory, + TypeManager typeManager, + HudiConfig hudiConfig, + @ForHudiTableStatistics ExecutorService tableStatisticsExecutor) { this.metastoreFactory = requireNonNull(metastoreFactory, "metastore is null"); this.fileSystemFactory = requireNonNull(fileSystemFactory, "fileSystemFactory is null"); this.typeManager = requireNonNull(typeManager, "typeManager is null"); this.perTransactionMetastoreCacheMaximumSize = hudiConfig.getPerTransactionMetastoreCacheMaximumSize(); + this.tableStatisticsExecutor = requireNonNull(tableStatisticsExecutor, "tableStatisticsExecutor is null"); } public HudiMetadata create(ConnectorIdentity identity) { CachingHiveMetastore cachingHiveMetastore = createPerTransactionCache(metastoreFactory.createMetastore(Optional.of(identity)), perTransactionMetastoreCacheMaximumSize); - return new HudiMetadata(cachingHiveMetastore, fileSystemFactory, typeManager); + return new HudiMetadata(cachingHiveMetastore, fileSystemFactory, typeManager, tableStatisticsExecutor); } } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiModule.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiModule.java index a9f65c60affef..929cd834c844b 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiModule.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiModule.java @@ -14,20 +14,36 @@ package io.trino.plugin.hudi; import com.google.inject.Binder; +import com.google.inject.Key; import com.google.inject.Module; +import com.google.inject.Provides; import com.google.inject.Scopes; +import com.google.inject.Singleton; +import io.trino.metastore.HiveMetastore; import io.trino.plugin.base.metrics.FileFormatDataSourceStats; import io.trino.plugin.base.session.SessionPropertiesProvider; import io.trino.plugin.hive.HideDeltaLakeTables; import io.trino.plugin.hive.HiveNodePartitioningProvider; +import io.trino.plugin.hive.HiveTransactionHandle; +import io.trino.plugin.hive.metastore.thrift.TranslateHiveViews; import io.trino.plugin.hive.parquet.ParquetReaderConfig; import io.trino.plugin.hive.parquet.ParquetWriterConfig; +import io.trino.plugin.hudi.stats.ForHudiTableStatistics; import io.trino.spi.connector.ConnectorNodePartitioningProvider; import io.trino.spi.connector.ConnectorPageSourceProvider; import io.trino.spi.connector.ConnectorSplitManager; +import io.trino.spi.security.ConnectorIdentity; + +import java.util.concurrent.ExecutorService; +import java.util.concurrent.ScheduledExecutorService; +import java.util.function.BiFunction; import static com.google.inject.multibindings.Multibinder.newSetBinder; +import static io.airlift.concurrent.Threads.daemonThreadsNamed; import static io.airlift.configuration.ConfigBinder.configBinder; +import static io.trino.plugin.base.ClosingBinder.closingBinder; +import static java.util.concurrent.Executors.newCachedThreadPool; +import static java.util.concurrent.Executors.newScheduledThreadPool; import static org.weakref.jmx.guice.ExportBinder.newExporter; public class HudiModule @@ -40,6 +56,7 @@ public void configure(Binder binder) configBinder(binder).bindConfig(HudiConfig.class); + binder.bind(boolean.class).annotatedWith(TranslateHiveViews.class).toInstance(false); binder.bind(boolean.class).annotatedWith(HideDeltaLakeTables.class).toInstance(false); newSetBinder(binder, SessionPropertiesProvider.class).addBinding().to(HudiSessionProperties.class).in(Scopes.SINGLETON); @@ -57,6 +74,44 @@ public void configure(Binder binder) binder.bind(FileFormatDataSourceStats.class).in(Scopes.SINGLETON); newExporter(binder).export(FileFormatDataSourceStats.class).withGeneratedName(); - binder.install(new HudiExecutorModule()); + closingBinder(binder).registerExecutor(Key.get(ExecutorService.class, ForHudiTableStatistics.class)); + closingBinder(binder).registerExecutor(Key.get(ExecutorService.class, ForHudiSplitManager.class)); + closingBinder(binder).registerExecutor(Key.get(ScheduledExecutorService.class, ForHudiSplitSource.class)); + } + + @Provides + @Singleton + @ForHudiTableStatistics + public ExecutorService createTableStatisticsExecutor(HudiConfig hudiConfig) + { + return newScheduledThreadPool( + hudiConfig.getTableStatisticsExecutorParallelism(), + daemonThreadsNamed("hudi-table-statistics-executor-%s")); + } + + @Provides + @Singleton + @ForHudiSplitManager + public ExecutorService createExecutorService() + { + return newCachedThreadPool(daemonThreadsNamed("hudi-split-manager-%s")); + } + + @Provides + @Singleton + @ForHudiSplitSource + public ScheduledExecutorService createSplitLoaderExecutor(HudiConfig hudiConfig) + { + return newScheduledThreadPool( + hudiConfig.getSplitLoaderParallelism(), + daemonThreadsNamed("hudi-split-loader-%s")); + } + + @Provides + @Singleton + public BiFunction createHiveMetastoreGetter(HudiTransactionManager transactionManager) + { + return (identity, transactionHandle) -> + transactionManager.get(transactionHandle, identity).getMetastore(); } } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPageSource.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPageSource.java new file mode 100644 index 0000000000000..e81887414425b --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPageSource.java @@ -0,0 +1,143 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hudi.reader.HudiTrinoReaderContext; +import io.trino.plugin.hudi.util.HudiAvroSerializer; +import io.trino.plugin.hudi.util.SynthesizedColumnHandler; +import io.trino.spi.Page; +import io.trino.spi.PageBuilder; +import io.trino.spi.connector.ConnectorPageSource; +import io.trino.spi.metrics.Metrics; +import org.apache.avro.generic.IndexedRecord; +import org.apache.hudi.common.table.read.HoodieFileGroupReader; + +import java.io.IOException; +import java.util.List; +import java.util.OptionalLong; +import java.util.concurrent.CompletableFuture; + +import static com.google.common.base.Preconditions.checkState; + +public class HudiPageSource + implements ConnectorPageSource +{ + HoodieFileGroupReader fileGroupReader; + // TODO: Remove pageSource here, Hudi doesn't use this page source to read + ConnectorPageSource pageSource; + HudiTrinoReaderContext readerContext; + PageBuilder pageBuilder; + HudiAvroSerializer avroSerializer; + List columnHandles; + + public HudiPageSource( + ConnectorPageSource pageSource, + HoodieFileGroupReader fileGroupReader, + HudiTrinoReaderContext readerContext, + List columnHandles, + SynthesizedColumnHandler synthesizedColumnHandler) + { + this.pageSource = pageSource; + this.fileGroupReader = fileGroupReader; + this.initFileGroupReader(); + this.readerContext = readerContext; + this.columnHandles = columnHandles; + this.pageBuilder = new PageBuilder(columnHandles.stream().map(HiveColumnHandle::getType).toList()); + this.avroSerializer = new HudiAvroSerializer(columnHandles, synthesizedColumnHandler); + } + + @Override + public long getCompletedBytes() + { + return pageSource.getCompletedBytes(); + } + + @Override + public OptionalLong getCompletedPositions() + { + return pageSource.getCompletedPositions(); + } + + @Override + public long getReadTimeNanos() + { + return pageSource.getReadTimeNanos(); + } + + @Override + public boolean isFinished() + { + try { + return !fileGroupReader.hasNext(); + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public Page getNextPage() + { + checkState(pageBuilder.isEmpty(), "PageBuilder is not empty at the beginning of a new page"); + try { + while (fileGroupReader.hasNext()) { + avroSerializer.buildRecordInPage(pageBuilder, fileGroupReader.next()); + } + } + catch (IOException e) { + throw new RuntimeException(e); + } + + Page newPage = pageBuilder.build(); + pageBuilder.reset(); + return newPage; + } + + @Override + public long getMemoryUsage() + { + return pageSource.getMemoryUsage(); + } + + @Override + public void close() + throws IOException + { + fileGroupReader.close(); + pageSource.close(); + } + + @Override + public CompletableFuture isBlocked() + { + return pageSource.isBlocked(); + } + + @Override + public Metrics getMetrics() + { + return pageSource.getMetrics(); + } + + protected void initFileGroupReader() + { + try { + this.fileGroupReader.initRecordIterators(); + } + catch (IOException e) { + throw new RuntimeException("Failed to initialize file group reader!", e); + } + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPageSourceProvider.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPageSourceProvider.java index 532b0568fdd23..500934044b371 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPageSourceProvider.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiPageSourceProvider.java @@ -13,8 +13,10 @@ */ package io.trino.plugin.hudi; +import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableList; import com.google.inject.Inject; +import io.airlift.log.Logger; import io.trino.filesystem.Location; import io.trino.filesystem.TrinoFileSystem; import io.trino.filesystem.TrinoFileSystemFactory; @@ -32,11 +34,14 @@ import io.trino.parquet.reader.RowGroupInfo; import io.trino.plugin.base.metrics.FileFormatDataSourceStats; import io.trino.plugin.hive.HiveColumnHandle; -import io.trino.plugin.hive.HivePartitionKey; -import io.trino.plugin.hive.TransformConnectorPageSource; +import io.trino.plugin.hive.ReaderColumns; import io.trino.plugin.hive.parquet.ParquetReaderConfig; +import io.trino.plugin.hudi.file.HudiBaseFile; +import io.trino.plugin.hudi.reader.HudiTrinoReaderContext; +import io.trino.plugin.hudi.storage.HudiTrinoStorage; +import io.trino.plugin.hudi.storage.TrinoStorageConfiguration; +import io.trino.plugin.hudi.util.SynthesizedColumnHandler; import io.trino.spi.TrinoException; -import io.trino.spi.block.Block; import io.trino.spi.connector.ColumnHandle; import io.trino.spi.connector.ConnectorPageSource; import io.trino.spi.connector.ConnectorPageSourceProvider; @@ -45,43 +50,41 @@ import io.trino.spi.connector.ConnectorTableHandle; import io.trino.spi.connector.ConnectorTransactionHandle; import io.trino.spi.connector.DynamicFilter; +import io.trino.spi.connector.EmptyPageSource; import io.trino.spi.predicate.TupleDomain; -import io.trino.spi.type.Decimals; -import io.trino.spi.type.TypeSignature; -import org.apache.hudi.common.model.HoodieFileFormat; +import org.apache.avro.Schema; +import org.apache.avro.generic.IndexedRecord; +import org.apache.hudi.common.model.HoodieTableType; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.common.table.TableSchemaResolver; +import org.apache.hudi.common.table.read.HoodieFileGroupReader; +import org.apache.hudi.common.util.Option; +import org.apache.hudi.common.util.ValidationUtils; +import org.apache.hudi.storage.StoragePath; import org.apache.parquet.column.ColumnDescriptor; import org.apache.parquet.io.MessageColumnIO; import org.apache.parquet.schema.MessageType; +import org.apache.parquet.schema.Type; import org.joda.time.DateTimeZone; import java.io.IOException; -import java.sql.Timestamp; -import java.time.LocalDate; -import java.time.ZoneOffset; -import java.time.format.DateTimeFormatter; -import java.time.format.DateTimeParseException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Optional; import java.util.OptionalLong; -import java.util.TimeZone; +import java.util.stream.Collectors; -import static com.google.common.base.Preconditions.checkArgument; -import static io.airlift.slice.Slices.utf8Slice; import static io.trino.memory.context.AggregatedMemoryContext.newSimpleAggregatedMemoryContext; -import static io.trino.metastore.Partitions.makePartName; import static io.trino.parquet.ParquetTypeUtils.getColumnIO; import static io.trino.parquet.ParquetTypeUtils.getDescriptors; import static io.trino.parquet.predicate.PredicateUtils.buildPredicate; import static io.trino.parquet.predicate.PredicateUtils.getFilteredRowGroups; -import static io.trino.plugin.hive.HiveColumnHandle.FILE_MODIFIED_TIME_COLUMN_NAME; -import static io.trino.plugin.hive.HiveColumnHandle.FILE_MODIFIED_TIME_TYPE_SIGNATURE; -import static io.trino.plugin.hive.HiveColumnHandle.FILE_SIZE_COLUMN_NAME; -import static io.trino.plugin.hive.HiveColumnHandle.FILE_SIZE_TYPE_SIGNATURE; -import static io.trino.plugin.hive.HiveColumnHandle.PARTITION_COLUMN_NAME; -import static io.trino.plugin.hive.HiveColumnHandle.PARTITION_TYPE_SIGNATURE; -import static io.trino.plugin.hive.HiveColumnHandle.PATH_COLUMN_NAME; -import static io.trino.plugin.hive.HiveColumnHandle.PATH_TYPE; +import static io.trino.plugin.hive.HiveColumnHandle.partitionColumnHandle; +import static io.trino.plugin.hive.HivePageSourceProvider.projectBaseColumns; import static io.trino.plugin.hive.parquet.ParquetPageSourceFactory.ParquetReaderProvider; import static io.trino.plugin.hive.parquet.ParquetPageSourceFactory.createDataSource; import static io.trino.plugin.hive.parquet.ParquetPageSourceFactory.createParquetPageSource; @@ -90,47 +93,33 @@ import static io.trino.plugin.hudi.HudiErrorCode.HUDI_BAD_DATA; import static io.trino.plugin.hudi.HudiErrorCode.HUDI_CANNOT_OPEN_SPLIT; import static io.trino.plugin.hudi.HudiErrorCode.HUDI_CURSOR_ERROR; -import static io.trino.plugin.hudi.HudiErrorCode.HUDI_INVALID_PARTITION_VALUE; -import static io.trino.plugin.hudi.HudiErrorCode.HUDI_UNSUPPORTED_FILE_FORMAT; +import static io.trino.plugin.hudi.HudiErrorCode.HUDI_FILESYSTEM_ERROR; import static io.trino.plugin.hudi.HudiSessionProperties.getParquetMaxReadBlockRowCount; +import static io.trino.plugin.hudi.HudiSessionProperties.getParquetMaxReadBlockSize; import static io.trino.plugin.hudi.HudiSessionProperties.getParquetSmallFileThreshold; +import static io.trino.plugin.hudi.HudiSessionProperties.isParquetIgnoreStatistics; +import static io.trino.plugin.hudi.HudiSessionProperties.isParquetUseColumnIndex; import static io.trino.plugin.hudi.HudiSessionProperties.isParquetVectorizedDecodingEnabled; import static io.trino.plugin.hudi.HudiSessionProperties.shouldUseParquetColumnNames; -import static io.trino.plugin.hudi.HudiUtil.getHudiFileFormat; -import static io.trino.spi.predicate.Utils.nativeValueToBlock; -import static io.trino.spi.type.DateTimeEncoding.packDateTimeWithZone; -import static io.trino.spi.type.StandardTypes.BIGINT; -import static io.trino.spi.type.StandardTypes.BOOLEAN; -import static io.trino.spi.type.StandardTypes.DATE; -import static io.trino.spi.type.StandardTypes.DECIMAL; -import static io.trino.spi.type.StandardTypes.DOUBLE; -import static io.trino.spi.type.StandardTypes.INTEGER; -import static io.trino.spi.type.StandardTypes.REAL; -import static io.trino.spi.type.StandardTypes.SMALLINT; -import static io.trino.spi.type.StandardTypes.TIMESTAMP; -import static io.trino.spi.type.StandardTypes.TINYINT; -import static io.trino.spi.type.StandardTypes.VARBINARY; -import static io.trino.spi.type.StandardTypes.VARCHAR; -import static io.trino.spi.type.TimeZoneKey.UTC_KEY; -import static java.lang.Double.parseDouble; -import static java.lang.Float.floatToRawIntBits; -import static java.lang.Float.parseFloat; -import static java.lang.Long.parseLong; +import static io.trino.plugin.hudi.HudiSessionProperties.useParquetBloomFilter; +import static io.trino.plugin.hudi.HudiUtil.buildTableMetaClient; +import static io.trino.plugin.hudi.HudiUtil.constructSchema; +import static io.trino.plugin.hudi.HudiUtil.convertToFileSlice; +import static io.trino.plugin.hudi.HudiUtil.prependHudiMetaColumns; import static java.lang.String.format; -import static java.util.Objects.isNull; import static java.util.Objects.requireNonNull; -import static java.util.stream.Collectors.toList; -import static java.util.stream.Collectors.toMap; -import static org.apache.hudi.common.model.HoodieFileFormat.PARQUET; +import static java.util.stream.Collectors.toUnmodifiableList; public class HudiPageSourceProvider implements ConnectorPageSourceProvider { + private static final Logger log = Logger.get(HudiPageSourceProvider.class); + private static final int DOMAIN_COMPACTION_THRESHOLD = 1000; + private final TrinoFileSystemFactory fileSystemFactory; private final FileFormatDataSourceStats dataSourceStats; private final ParquetReaderOptions options; - private final DateTimeZone timeZone; - private static final int DOMAIN_COMPACTION_THRESHOLD = 1000; + private final DateTimeZone timeZone = DateTimeZone.forID("UTC"); @Inject public HudiPageSourceProvider( @@ -141,7 +130,6 @@ public HudiPageSourceProvider( this.fileSystemFactory = requireNonNull(fileSystemFactory, "fileSystemFactory is null"); this.dataSourceStats = requireNonNull(dataSourceStats, "dataSourceStats is null"); this.options = requireNonNull(parquetReaderConfig, "parquetReaderConfig is null").toParquetReaderOptions(); - this.timeZone = DateTimeZone.forID(TimeZone.getDefault().getID()); } @Override @@ -153,96 +141,168 @@ public ConnectorPageSource createPageSource( List columns, DynamicFilter dynamicFilter) { - HudiSplit split = (HudiSplit) connectorSplit; - String path = split.location(); - HoodieFileFormat hudiFileFormat = getHudiFileFormat(path); - if (PARQUET != hudiFileFormat) { - throw new TrinoException(HUDI_UNSUPPORTED_FILE_FORMAT, format("File format %s not supported", hudiFileFormat)); + HudiTableHandle hudiTableHandle = (HudiTableHandle) connectorTable; + HudiSplit hudiSplit = (HudiSplit) connectorSplit; + Optional hudiBaseFileOpt = hudiSplit.getBaseFile(); + + String dataFilePath = hudiBaseFileOpt.isPresent() + ? hudiBaseFileOpt.get().getPath() + : hudiSplit.getLogFiles().getFirst().getPath(); + // Filter out metadata table splits + // TODO: Move this check into a higher calling stack, such that the split is not created at all + if (dataFilePath.contains(new StoragePath( + ((HudiTableHandle) connectorTable).getBasePath()).toUri().getPath() + "/.hoodie/metadata")) { + return new EmptyPageSource(); + } + + // Handle MERGE_ON_READ tables to be read in read_optimized mode + // IMPORTANT: These tables will have a COPY_ON_WRITE table, see: `HudiTableTypeUtils#fromInputFormat` + // TODO: Move this check into a higher calling stack, such that the split is not created at all + if (hudiTableHandle.getTableType().equals(HoodieTableType.COPY_ON_WRITE) && !hudiSplit.getLogFiles().isEmpty()) { + if (hudiBaseFileOpt.isEmpty()) { + // Handle hasLogFiles=true, hasBaseFile = false + // Ignoring log files without base files, no data required to be read + return new EmptyPageSource(); + } } - List hiveColumns = columns.stream() - .map(HiveColumnHandle.class::cast) - .collect(toList()); - // just send regular columns to create parquet page source - // for partition columns, separate blocks will be created - List regularColumns = hiveColumns.stream() + long start = 0; + long length = 10; + if (hudiBaseFileOpt.isPresent()) { + start = hudiBaseFileOpt.get().getStart(); + length = hudiBaseFileOpt.get().getLength(); + } + + // Enable predicate pushdown for splits containing only base files + boolean isBaseFileOnly = hudiSplit.getLogFiles().isEmpty(); + // Convert columns to HiveColumnHandles + List hiveColumnHandles = getHiveColumns(columns, isBaseFileOnly); + + // Get non-synthesized columns (columns that are available in data file) + List dataColumnHandles = hiveColumnHandles.stream() .filter(columnHandle -> !columnHandle.isPartitionKey() && !columnHandle.isHidden()) - .collect(toList()); + .collect(Collectors.toList()); + // The `columns` list could be empty when count(*) is issued, + // prepending hoodie meta columns for Hudi split with log files + // to allow a non-empty dataPageSource to be returned + List hudiMetaAndDataColumnHandles = prependHudiMetaColumns(dataColumnHandles); + TrinoFileSystem fileSystem = fileSystemFactory.create(session); - TrinoInputFile inputFile = fileSystem.newInputFile(Location.of(path), split.fileSize()); - ConnectorPageSource pageSource = createPageSource( + ConnectorPageSource dataPageSource = createPageSource( session, - regularColumns, - split, - inputFile, + isBaseFileOnly ? dataColumnHandles : hudiMetaAndDataColumnHandles, + hudiSplit, + fileSystem.newInputFile(Location.of(hudiBaseFileOpt.get().getPath()), hudiBaseFileOpt.get().getFileSize()), dataSourceStats, - ParquetReaderOptions.builder(options) - .withSmallFileThreshold(getParquetSmallFileThreshold(session)) - .withVectorizedDecodingEnabled(isParquetVectorizedDecodingEnabled(session)) + options + .withIgnoreStatistics(isParquetIgnoreStatistics(session)) + .withMaxReadBlockSize(getParquetMaxReadBlockSize(session)) .withMaxReadBlockRowCount(getParquetMaxReadBlockRowCount(session)) - .build(), - timeZone); + .withSmallFileThreshold(getParquetSmallFileThreshold(session)) + .withUseColumnIndex(isParquetUseColumnIndex(session)) + .withBloomFilter(useParquetBloomFilter(session)) + .withVectorizedDecodingEnabled(isParquetVectorizedDecodingEnabled(session)), + timeZone, dynamicFilter, isBaseFileOnly); - Map partitionBlocks = convertPartitionValues(hiveColumns, split.partitionKeys()); + SynthesizedColumnHandler synthesizedColumnHandler = SynthesizedColumnHandler.create(hudiSplit); - TransformConnectorPageSource.Builder transforms = TransformConnectorPageSource.builder(); - int delegateIndex = 0; - for (HiveColumnHandle column : hiveColumns) { - if (partitionBlocks.containsKey(column.getName())) { - transforms.constantValue(partitionBlocks.get(column.getName())); - } - else if (column.getName().equals(PARTITION_COLUMN_NAME)) { - transforms.constantValue(nativeValueToBlock(PARTITION_TYPE_SIGNATURE, utf8Slice(toPartitionName(split.partitionKeys())))); - } - else if (column.getName().equals(PATH_COLUMN_NAME)) { - transforms.constantValue(nativeValueToBlock(PATH_TYPE, utf8Slice(path))); - } - else if (column.getName().equals(FILE_SIZE_COLUMN_NAME)) { - transforms.constantValue(nativeValueToBlock(FILE_SIZE_TYPE_SIGNATURE, split.fileSize())); - } - else if (column.getName().equals(FILE_MODIFIED_TIME_COLUMN_NAME)) { - long packedTimestamp = packDateTimeWithZone(split.fileModifiedTime(), UTC_KEY); - transforms.constantValue(nativeValueToBlock(FILE_MODIFIED_TIME_TYPE_SIGNATURE, packedTimestamp)); - } - else { - transforms.column(delegateIndex); - delegateIndex++; - } + // Avoid avro serialization if split/filegroup only contains base files + if (isBaseFileOnly) { + ValidationUtils.checkArgument(!hiveColumnHandles.isEmpty(), + "Column handles should always be present for providing Hudi data page source on a base file"); + return new HudiBaseFileOnlyPageSource( + dataPageSource, + hiveColumnHandles, + dataColumnHandles, + synthesizedColumnHandler); + } + + // TODO: Move this into HudiTableHandle + HoodieTableMetaClient metaClient = buildTableMetaClient( + fileSystemFactory.create(session), hudiTableHandle.getSchemaTableName().toString(), hudiTableHandle.getBasePath()); + String latestCommitTime = metaClient.getCommitsTimeline().lastInstant().get().requestedTime(); + Schema dataSchema; + try { + dataSchema = new TableSchemaResolver(metaClient).getTableAvroSchema(latestCommitTime); + } + catch (Throwable e) { + // Unable to find table schema + throw new TrinoException(HUDI_FILESYSTEM_ERROR, e); } - return transforms.build(pageSource); + HudiTrinoReaderContext readerContext = new HudiTrinoReaderContext( + dataPageSource, + dataColumnHandles, + hudiMetaAndDataColumnHandles, + synthesizedColumnHandler); + + // Construct an Avro schema for log file reader + Schema requestedSchema = constructSchema(dataSchema, hudiMetaAndDataColumnHandles.stream().map(HiveColumnHandle::getName).toList()); + HoodieFileGroupReader fileGroupReader = + new HoodieFileGroupReader<>( + readerContext, + new HudiTrinoStorage(fileSystemFactory.create(session), new TrinoStorageConfiguration()), + hudiTableHandle.getBasePath(), + latestCommitTime, + convertToFileSlice(hudiSplit, hudiTableHandle.getBasePath()), + dataSchema, + requestedSchema, + Option.empty(), + metaClient, + metaClient.getTableConfig().getProps(), + start, + length, + false); + + return new HudiPageSource( + dataPageSource, + fileGroupReader, + readerContext, + hiveColumnHandles, + synthesizedColumnHandler); } - private static ConnectorPageSource createPageSource( + static ConnectorPageSource createPageSource( ConnectorSession session, List columns, HudiSplit hudiSplit, TrinoInputFile inputFile, FileFormatDataSourceStats dataSourceStats, ParquetReaderOptions options, - DateTimeZone timeZone) + DateTimeZone timeZone, + DynamicFilter dynamicFilter, + boolean enablePredicatePushDown) { ParquetDataSource dataSource = null; boolean useColumnNames = shouldUseParquetColumnNames(session); - String path = hudiSplit.location(); - long start = hudiSplit.start(); - long length = hudiSplit.length(); + HudiBaseFile baseFile = hudiSplit.getBaseFile().get(); + String path = baseFile.getPath(); + long start = baseFile.getStart(); + long length = baseFile.getLength(); try { AggregatedMemoryContext memoryContext = newSimpleAggregatedMemoryContext(); - dataSource = createDataSource(inputFile, OptionalLong.of(hudiSplit.fileSize()), options, memoryContext, dataSourceStats); - ParquetMetadata parquetMetadata = MetadataReader.readFooter(dataSource, options.getMaxFooterReadSize()); + dataSource = createDataSource(inputFile, OptionalLong.of(baseFile.getFileSize()), options, memoryContext, dataSourceStats); + ParquetMetadata parquetMetadata = MetadataReader.readFooter(dataSource, Optional.empty()); FileMetadata fileMetaData = parquetMetadata.getFileMetaData(); MessageType fileSchema = fileMetaData.getSchema(); + // When not using columnNames, physical indexes are used and there could be cases when the physical index in HiveColumnHandle is different from the fileSchema of the + // parquet files. This could happen when schema evolution happened. In such a case, we will need to remap the column indices in the HiveColumnHandles. + if (!useColumnNames) { + // HiveColumnHandle names are in lower case, case-insensitive + columns = remapColumnIndicesToPhysical(fileSchema, columns, false); + } + Optional message = getParquetMessageType(columns, useColumnNames, fileSchema); MessageType requestedSchema = message.orElse(new MessageType(fileSchema.getName(), ImmutableList.of())); MessageColumnIO messageColumn = getColumnIO(fileSchema, requestedSchema); Map, ColumnDescriptor> descriptorsByPath = getDescriptors(fileSchema, requestedSchema); - TupleDomain parquetTupleDomain = options.isIgnoreStatistics() + + TupleDomain parquetTupleDomain = options.isIgnoreStatistics() || !enablePredicatePushDown ? TupleDomain.all() - : getParquetTupleDomain(descriptorsByPath, hudiSplit.predicate(), fileSchema, useColumnNames); + : getParquetTupleDomain(descriptorsByPath, getCombinedPredicate(hudiSplit, dynamicFilter), fileSchema, useColumnNames); TupleDomainParquetPredicate parquetPredicate = buildPredicate(requestedSchema, parquetTupleDomain, descriptorsByPath, timeZone); @@ -258,12 +318,17 @@ private static ConnectorPageSource createPageSource( DOMAIN_COMPACTION_THRESHOLD, options); + Optional readerProjections = projectBaseColumns(columns); + List baseColumns = readerProjections.map(projection -> + projection.get().stream() + .map(HiveColumnHandle.class::cast) + .collect(toUnmodifiableList())) + .orElse(columns); ParquetDataSourceId dataSourceId = dataSource.getId(); ParquetDataSource finalDataSource = dataSource; - ParquetReaderProvider parquetReaderProvider = (fields, appendRowNumberColumn) -> new ParquetReader( + ParquetReaderProvider parquetReaderProvider = fields -> new ParquetReader( Optional.ofNullable(fileMetaData.getCreatedBy()), fields, - appendRowNumberColumn, rowGroups, finalDataSource, timeZone, @@ -272,7 +337,7 @@ private static ConnectorPageSource createPageSource( exception -> handleException(dataSourceId, exception), Optional.of(parquetPredicate), Optional.empty()); - return createParquetPageSource(columns, fileSchema, messageColumn, useColumnNames, parquetReaderProvider); + return createParquetPageSource(baseColumns, fileSchema, messageColumn, useColumnNames, parquetReaderProvider); } catch (IOException | RuntimeException e) { try { @@ -282,8 +347,8 @@ private static ConnectorPageSource createPageSource( } catch (IOException _) { } - if (e instanceof TrinoException trinoException) { - throw trinoException; + if (e instanceof TrinoException) { + throw (TrinoException) e; } if (e instanceof ParquetCorruptionException) { throw new TrinoException(HUDI_BAD_DATA, e); @@ -295,8 +360,8 @@ private static ConnectorPageSource createPageSource( private static TrinoException handleException(ParquetDataSourceId dataSourceId, Exception exception) { - if (exception instanceof TrinoException trinoException) { - return trinoException; + if (exception instanceof TrinoException) { + return (TrinoException) exception; } if (exception instanceof ParquetCorruptionException) { return new TrinoException(HUDI_BAD_DATA, exception); @@ -304,68 +369,83 @@ private static TrinoException handleException(ParquetDataSourceId dataSourceId, return new TrinoException(HUDI_CURSOR_ERROR, format("Failed to read Parquet file: %s", dataSourceId), exception); } - private static Map convertPartitionValues( - List allColumns, - List partitionKeys) + /** + * Creates a new list of ColumnHandles where the index associated with each handle corresponds to its physical position within the provided fileSchema (MessageType). + * This is necessary when a downstream component relies on the handle's index for physical data access, and the logical schema order (potentially reflected in the + * original handles) differs from the physical file layout. + * + * @param fileSchema The MessageType representing the physical schema of the Parquet file. + * @param requestedColumns The original list of Trino ColumnHandles as received from the engine. + * @param caseSensitive Whether the lookup between Trino column names (from handles) and Parquet field names (from fileSchema) should be case-sensitive. + * @return A new list of HiveColumnHandle, preserving the original order, but with each handle containing the correct physical index relative to fileSchema. + */ + @VisibleForTesting + public static List remapColumnIndicesToPhysical( + MessageType fileSchema, + List requestedColumns, + boolean caseSensitive) { - return allColumns.stream() - .filter(HiveColumnHandle::isPartitionKey) - .collect(toMap( - HiveColumnHandle::getName, - columnHandle -> nativeValueToBlock( - columnHandle.getType(), - partitionToNativeValue( - columnHandle.getName(), - partitionKeys, - columnHandle.getType().getTypeSignature()).orElse(null)))); + // Create a map from column name to its physical index in the fileSchema. + Map physicalIndexMap = new HashMap<>(); + List fileFields = fileSchema.getFields(); + for (int i = 0; i < fileFields.size(); i++) { + Type field = fileFields.get(i); + String fieldName = field.getName(); + String mapKey = caseSensitive ? fieldName : fieldName.toLowerCase(Locale.getDefault()); + physicalIndexMap.put(mapKey, i); + } + + // Iterate through the columns requested by Trino IN ORDER. + List remappedHandles = new ArrayList<>(requestedColumns.size()); + for (HiveColumnHandle originalHandle : requestedColumns) { + String requestedName = originalHandle.getBaseColumnName(); + + // Determine the key to use for looking up the physical index + String lookupKey = caseSensitive ? requestedName : requestedName.toLowerCase(Locale.getDefault()); + + // Find the physical index from the file schema map constructed from fielSchema + Integer physicalIndex = physicalIndexMap.get(lookupKey); + + HiveColumnHandle remappedHandle = new HiveColumnHandle( + requestedName, + physicalIndex, + originalHandle.getBaseHiveType(), + originalHandle.getType(), + originalHandle.getHiveColumnProjectionInfo(), + originalHandle.getColumnType(), + originalHandle.getComment()); + remappedHandles.add(remappedHandle); + } + + return remappedHandles; } - private static Optional partitionToNativeValue( - String partitionColumnName, - List partitionKeys, - TypeSignature partitionDataType) + private static TupleDomain getCombinedPredicate(HudiSplit hudiSplit, DynamicFilter dynamicFilter) { - HivePartitionKey partitionKey = partitionKeys.stream().filter(key -> key.name().equalsIgnoreCase(partitionColumnName)).findFirst().orElse(null); - if (isNull(partitionKey)) { - return Optional.empty(); - } + // Combine static and dynamic predicates + TupleDomain staticPredicate = hudiSplit.getPredicate(); + TupleDomain dynamicPredicate = dynamicFilter.getCurrentPredicate() + .transformKeys(HiveColumnHandle.class::cast); + TupleDomain combinedPredicate = staticPredicate.intersect(dynamicPredicate); - String partitionValue = partitionKey.value(); - String baseType = partitionDataType.getBase(); - try { - return switch (baseType) { - case TINYINT, SMALLINT, INTEGER, BIGINT -> Optional.of(parseLong(partitionValue)); - case REAL -> Optional.of((long) floatToRawIntBits(parseFloat(partitionValue))); - case DOUBLE -> Optional.of(parseDouble(partitionValue)); - case VARCHAR, VARBINARY -> Optional.of(utf8Slice(partitionValue)); - case DATE -> Optional.of(LocalDate.parse(partitionValue, DateTimeFormatter.ISO_LOCAL_DATE).toEpochDay()); - case TIMESTAMP -> Optional.of(Timestamp.valueOf(partitionValue).toLocalDateTime().toEpochSecond(ZoneOffset.UTC) * 1_000); - case BOOLEAN -> { - checkArgument(partitionValue.equalsIgnoreCase("true") || partitionValue.equalsIgnoreCase("false")); - yield Optional.of(Boolean.valueOf(partitionValue)); - } - case DECIMAL -> Optional.of(Decimals.parse(partitionValue).getObject()); - default -> throw new TrinoException( - HUDI_INVALID_PARTITION_VALUE, - format("Unsupported data type '%s' for partition column %s", partitionDataType, partitionColumnName)); - }; - } - catch (IllegalArgumentException | DateTimeParseException e) { - throw new TrinoException( - HUDI_INVALID_PARTITION_VALUE, - format("Can not parse partition value '%s' of type '%s' for partition column '%s'", partitionValue, partitionDataType, partitionColumnName), - e); + if (!combinedPredicate.isAll()) { + log.debug("Combined predicate for Parquet read (Split: %s): %s", hudiSplit, combinedPredicate); } + return combinedPredicate; } - private static String toPartitionName(List partitions) + private static List getHiveColumns(List columns, + boolean isBaseFileOnly) { - ImmutableList.Builder partitionNames = ImmutableList.builderWithExpectedSize(partitions.size()); - ImmutableList.Builder partitionValues = ImmutableList.builderWithExpectedSize(partitions.size()); - for (HivePartitionKey partition : partitions) { - partitionNames.add(partition.name()); - partitionValues.add(partition.value()); + if (!isBaseFileOnly || !columns.isEmpty()) { + return columns.stream() + .map(HiveColumnHandle.class::cast) + .toList(); } - return makePartName(partitionNames.build(), partitionValues.build()); + + // The `columns` list containing the requested columns to read could be empty + // when count(*) is in the statement; to make sure the page source works properly, + // the synthesized partition column is added in this case. + return Collections.singletonList(partitionColumnHandle()); } } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSessionProperties.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSessionProperties.java index 47717f59f4b5f..c1414f13ee899 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSessionProperties.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSessionProperties.java @@ -16,6 +16,7 @@ import com.google.common.collect.ImmutableList; import com.google.inject.Inject; import io.airlift.units.DataSize; +import io.airlift.units.Duration; import io.trino.plugin.base.session.SessionPropertiesProvider; import io.trino.plugin.hive.parquet.ParquetReaderConfig; import io.trino.spi.TrinoException; @@ -28,6 +29,7 @@ import static com.google.common.collect.ImmutableList.toImmutableList; import static io.trino.plugin.base.session.PropertyMetadataUtil.dataSizeProperty; +import static io.trino.plugin.base.session.PropertyMetadataUtil.durationProperty; import static io.trino.plugin.base.session.PropertyMetadataUtil.validateMaxDataSize; import static io.trino.plugin.hive.parquet.ParquetReaderConfig.PARQUET_READER_MAX_SMALL_FILE_THRESHOLD; import static io.trino.spi.StandardErrorCode.INVALID_SESSION_PROPERTY; @@ -42,18 +44,35 @@ public class HudiSessionProperties implements SessionPropertiesProvider { private static final String COLUMNS_TO_HIDE = "columns_to_hide"; + static final String TABLE_STATISTICS_ENABLED = "table_statistics_enabled"; + static final String METADATA_TABLE_ENABLED = "metadata_enabled"; private static final String USE_PARQUET_COLUMN_NAMES = "use_parquet_column_names"; + private static final String PARQUET_IGNORE_STATISTICS = "parquet_ignore_statistics"; + private static final String PARQUET_USE_COLUMN_INDEX = "parquet_use_column_index"; + private static final String PARQUET_USE_BLOOM_FILTER = "parquet_use_bloom_filter"; + private static final String PARQUET_MAX_READ_BLOCK_SIZE = "parquet_max_read_block_size"; private static final String PARQUET_MAX_READ_BLOCK_ROW_COUNT = "parquet_max_read_block_row_count"; private static final String PARQUET_SMALL_FILE_THRESHOLD = "parquet_small_file_threshold"; private static final String PARQUET_VECTORIZED_DECODING_ENABLED = "parquet_vectorized_decoding_enabled"; private static final String SIZE_BASED_SPLIT_WEIGHTS_ENABLED = "size_based_split_weights_enabled"; private static final String STANDARD_SPLIT_WEIGHT_SIZE = "standard_split_weight_size"; private static final String MINIMUM_ASSIGNED_SPLIT_WEIGHT = "minimum_assigned_split_weight"; + private static final String TARGET_SPLIT_SIZE = "target_split_size"; private static final String MAX_SPLITS_PER_SECOND = "max_splits_per_second"; private static final String MAX_OUTSTANDING_SPLITS = "max_outstanding_splits"; private static final String SPLIT_GENERATOR_PARALLELISM = "split_generator_parallelism"; - private static final String QUERY_PARTITION_FILTER_REQUIRED = "query_partition_filter_required"; + static final String QUERY_PARTITION_FILTER_REQUIRED = "query_partition_filter_required"; private static final String IGNORE_ABSENT_PARTITIONS = "ignore_absent_partitions"; + static final String DYNAMIC_FILTERING_WAIT_TIMEOUT = "dynamic_filtering_wait_timeout"; + + // Internal configuration for debugging and testing + static final String RECORD_LEVEL_INDEX_ENABLED = "record_level_index_enabled"; + static final String SECONDARY_INDEX_ENABLED = "secondary_index_enabled"; + static final String COLUMN_STATS_INDEX_ENABLED = "column_stats_index_enabled"; + static final String PARTITION_STATS_INDEX_ENABLED = "partition_stats_index_enabled"; + static final String COLUMN_STATS_WAIT_TIMEOUT = "column_stats_wait_timeout"; + static final String RECORD_INDEX_WAIT_TIMEOUT = "record_index_wait_timeout"; + static final String SECONDARY_INDEX_WAIT_TIMEOUT = "secondary_index_wait_timeout"; private final List> sessionProperties; @@ -72,11 +91,41 @@ public HudiSessionProperties(HudiConfig hudiConfig, ParquetReaderConfig parquetR .map(name -> ((String) name).toLowerCase(ENGLISH)) .collect(toImmutableList()), value -> value), + booleanProperty( + TABLE_STATISTICS_ENABLED, + "Expose table statistics", + hudiConfig.isTableStatisticsEnabled(), + false), + booleanProperty( + METADATA_TABLE_ENABLED, + "For Hudi tables prefer to fetch the list of files from its metadata table", + hudiConfig.isMetadataEnabled(), + false), booleanProperty( USE_PARQUET_COLUMN_NAMES, "Access parquet columns using names from the file. If disabled, then columns are accessed using index.", hudiConfig.getUseParquetColumnNames(), false), + booleanProperty( + PARQUET_IGNORE_STATISTICS, + "Ignore statistics from Parquet to allow querying files with corrupted or incorrect statistics", + parquetReaderConfig.isIgnoreStatistics(), + false), + booleanProperty( + PARQUET_USE_COLUMN_INDEX, + "Use Parquet column index", + hudiConfig.isUseParquetColumnIndex(), + false), + booleanProperty( + PARQUET_USE_BLOOM_FILTER, + "Use Parquet Bloom filters", + parquetReaderConfig.isUseBloomFilter(), + false), + dataSizeProperty( + PARQUET_MAX_READ_BLOCK_SIZE, + "Parquet: Maximum size of a block to read", + parquetReaderConfig.getMaxReadBlockSize(), + false), integerProperty( PARQUET_MAX_READ_BLOCK_ROW_COUNT, "Parquet: Maximum number of rows read in a batch", @@ -120,6 +169,11 @@ public HudiSessionProperties(HudiConfig hudiConfig, ParquetReaderConfig parquetR } }, false), + dataSizeProperty( + TARGET_SPLIT_SIZE, + "The target split size", + hudiConfig.getTargetSplitSize(), + false), integerProperty( MAX_SPLITS_PER_SECOND, "Rate at which splits are enqueued for processing. The queue will throttle if this rate limit is breached.", @@ -144,6 +198,46 @@ public HudiSessionProperties(HudiConfig hudiConfig, ParquetReaderConfig parquetR IGNORE_ABSENT_PARTITIONS, "Ignore absent partitions", hudiConfig.isIgnoreAbsentPartitions(), + false), + booleanProperty( + RECORD_LEVEL_INDEX_ENABLED, + "Enable record level index for file skipping", + hudiConfig.isRecordLevelIndexEnabled(), + true), + booleanProperty( + SECONDARY_INDEX_ENABLED, + "Enable secondary index for file skipping", + hudiConfig.isSecondaryIndexEnabled(), + true), + booleanProperty( + COLUMN_STATS_INDEX_ENABLED, + "Enable column stats index for file skipping", + hudiConfig.isColumnStatsIndexEnabled(), + true), + booleanProperty( + PARTITION_STATS_INDEX_ENABLED, + "Enable partition stats index for file skipping", + hudiConfig.isPartitionStatsIndexEnabled(), + true), + durationProperty( + COLUMN_STATS_WAIT_TIMEOUT, + "Maximum timeout to wait for loading column stats", + hudiConfig.getColumnStatsWaitTimeout(), + false), + durationProperty( + RECORD_INDEX_WAIT_TIMEOUT, + "Maximum timeout to wait for loading record index", + hudiConfig.getRecordIndexWaitTimeout(), + false), + durationProperty( + SECONDARY_INDEX_WAIT_TIMEOUT, + "Maximum timeout to wait for loading secondary index", + hudiConfig.getSecondaryIndexWaitTimeout(), + false), + durationProperty( + DYNAMIC_FILTERING_WAIT_TIMEOUT, + "Duration to wait for completion of dynamic filters during split generation", + hudiConfig.getDynamicFilteringWaitTimeout(), false)); } @@ -159,11 +253,41 @@ public static List getColumnsToHide(ConnectorSession session) return (List) session.getProperty(COLUMNS_TO_HIDE, List.class); } + public static boolean isTableStatisticsEnabled(ConnectorSession session) + { + return session.getProperty(TABLE_STATISTICS_ENABLED, Boolean.class); + } + + public static boolean isHudiMetadataTableEnabled(ConnectorSession session) + { + return session.getProperty(METADATA_TABLE_ENABLED, Boolean.class); + } + public static boolean shouldUseParquetColumnNames(ConnectorSession session) { return session.getProperty(USE_PARQUET_COLUMN_NAMES, Boolean.class); } + public static boolean isParquetIgnoreStatistics(ConnectorSession session) + { + return session.getProperty(PARQUET_IGNORE_STATISTICS, Boolean.class); + } + + public static boolean isParquetUseColumnIndex(ConnectorSession session) + { + return session.getProperty(PARQUET_USE_COLUMN_INDEX, Boolean.class); + } + + public static boolean useParquetBloomFilter(ConnectorSession session) + { + return session.getProperty(PARQUET_USE_BLOOM_FILTER, Boolean.class); + } + + public static DataSize getParquetMaxReadBlockSize(ConnectorSession session) + { + return session.getProperty(PARQUET_MAX_READ_BLOCK_SIZE, DataSize.class); + } + public static int getParquetMaxReadBlockRowCount(ConnectorSession session) { return session.getProperty(PARQUET_MAX_READ_BLOCK_ROW_COUNT, Integer.class); @@ -194,6 +318,11 @@ public static double getMinimumAssignedSplitWeight(ConnectorSession session) return session.getProperty(MINIMUM_ASSIGNED_SPLIT_WEIGHT, Double.class); } + public static DataSize getTargetSplitSize(ConnectorSession session) + { + return session.getProperty(TARGET_SPLIT_SIZE, DataSize.class); + } + public static int getMaxSplitsPerSecond(ConnectorSession session) { return session.getProperty(MAX_SPLITS_PER_SECOND, Integer.class); @@ -218,4 +347,49 @@ public static boolean isIgnoreAbsentPartitions(ConnectorSession session) { return session.getProperty(IGNORE_ABSENT_PARTITIONS, Boolean.class); } + + public static boolean isRecordLevelIndexEnabled(ConnectorSession session) + { + return session.getProperty(RECORD_LEVEL_INDEX_ENABLED, Boolean.class); + } + + public static boolean isSecondaryIndexEnabled(ConnectorSession session) + { + return session.getProperty(SECONDARY_INDEX_ENABLED, Boolean.class); + } + + public static boolean isColumnStatsIndexEnabled(ConnectorSession session) + { + return session.getProperty(COLUMN_STATS_INDEX_ENABLED, Boolean.class); + } + + public static boolean isPartitionStatsIndexEnabled(ConnectorSession session) + { + return session.getProperty(PARTITION_STATS_INDEX_ENABLED, Boolean.class); + } + + public static boolean isNoOpIndexEnabled(ConnectorSession session) + { + return !isRecordLevelIndexEnabled(session) && !isSecondaryIndexEnabled(session) && !isColumnStatsIndexEnabled(session); + } + + public static Duration getDynamicFilteringWaitTimeout(ConnectorSession session) + { + return session.getProperty(DYNAMIC_FILTERING_WAIT_TIMEOUT, Duration.class); + } + + public static Duration getColumnStatsWaitTimeout(ConnectorSession session) + { + return session.getProperty(COLUMN_STATS_WAIT_TIMEOUT, Duration.class); + } + + public static Duration getRecordIndexWaitTimeout(ConnectorSession session) + { + return session.getProperty(RECORD_INDEX_WAIT_TIMEOUT, Duration.class); + } + + public static Duration getSecondaryIndexWaitTimeout(ConnectorSession session) + { + return session.getProperty(SECONDARY_INDEX_WAIT_TIMEOUT, Duration.class); + } } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplit.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplit.java index c36d8ce0984ee..c0c15eada837b 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplit.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplit.java @@ -13,66 +13,111 @@ */ package io.trino.plugin.hudi; +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import io.trino.plugin.hive.HiveColumnHandle; import io.trino.plugin.hive.HivePartitionKey; +import io.trino.plugin.hudi.file.HudiBaseFile; +import io.trino.plugin.hudi.file.HudiLogFile; import io.trino.spi.SplitWeight; import io.trino.spi.connector.ConnectorSplit; import io.trino.spi.predicate.TupleDomain; import java.util.List; import java.util.Map; +import java.util.Optional; import static com.google.common.base.MoreObjects.toStringHelper; -import static com.google.common.base.Preconditions.checkArgument; import static io.airlift.slice.SizeOf.estimatedSizeOf; import static io.airlift.slice.SizeOf.instanceSize; import static java.lang.Math.toIntExact; import static java.util.Objects.requireNonNull; -public record HudiSplit( - String location, - long start, - long length, - long fileSize, - long fileModifiedTime, - TupleDomain predicate, - List partitionKeys, - SplitWeight splitWeight) +public class HudiSplit implements ConnectorSplit { private static final int INSTANCE_SIZE = toIntExact(instanceSize(HudiSplit.class)); - public HudiSplit - { - checkArgument(start >= 0, "start must be positive"); - checkArgument(length >= 0, "length must be positive"); - checkArgument(start + length <= fileSize, "fileSize must be at least start + length"); + private final Optional baseFile; + private final List logFiles; + private final String commitTime; + private final TupleDomain predicate; + private final List partitionKeys; + private final SplitWeight splitWeight; - requireNonNull(location, "location is null"); - requireNonNull(predicate, "predicate is null"); - partitionKeys = ImmutableList.copyOf(partitionKeys); - requireNonNull(splitWeight, "splitWeight is null"); + @JsonCreator + public HudiSplit( + @JsonProperty("baseFile") HudiBaseFile baseFile, + @JsonProperty("logFiles") List logFiles, + @JsonProperty("commitTime") String commitTime, + @JsonProperty("predicate") TupleDomain predicate, + @JsonProperty("partitionKeys") List partitionKeys, + @JsonProperty("splitWeight") SplitWeight splitWeight) + { + this.baseFile = Optional.ofNullable(baseFile); + this.logFiles = requireNonNull(logFiles, "logFiles is null"); + this.commitTime = requireNonNull(commitTime, "commitTime is null"); + this.predicate = requireNonNull(predicate, "predicate is null"); + this.partitionKeys = ImmutableList.copyOf(requireNonNull(partitionKeys, "partitionKeys is null")); + this.splitWeight = requireNonNull(splitWeight, "splitWeight is null"); } @Override public Map getSplitInfo() { return ImmutableMap.builder() - .put("location", location) - .put("start", String.valueOf(start)) - .put("length", String.valueOf(length)) - .put("fileSize", String.valueOf(fileSize)) - .put("fileModifiedTime", String.valueOf(fileModifiedTime)) + .put("baseFile", baseFile.toString()) + .put("logFiles", logFiles.toString()) + .put("commitTime", commitTime) .buildOrThrow(); } + @JsonProperty + public Optional getBaseFile() + { + return baseFile; + } + + @JsonProperty + public List getLogFiles() + { + return logFiles; + } + + @JsonProperty + public String getCommitTime() + { + return commitTime; + } + + @JsonProperty + @Override + public SplitWeight getSplitWeight() + { + return splitWeight; + } + + @JsonProperty + public TupleDomain getPredicate() + { + return predicate; + } + + @JsonProperty + public List getPartitionKeys() + { + return partitionKeys; + } + @Override public long getRetainedSizeInBytes() { return INSTANCE_SIZE - + estimatedSizeOf(location) + + 10 + + 10 + + estimatedSizeOf(commitTime) + splitWeight.getRetainedSizeInBytes() + predicate.getRetainedSizeInBytes(HiveColumnHandle::getRetainedSizeInBytes) + estimatedSizeOf(partitionKeys, HivePartitionKey::estimatedSizeInBytes); @@ -82,11 +127,9 @@ public long getRetainedSizeInBytes() public String toString() { return toStringHelper(this) - .addValue(location) - .addValue(start) - .addValue(length) - .addValue(fileSize) - .addValue(fileModifiedTime) + .addValue(baseFile) + .addValue(logFiles) + .addValue(commitTime) .toString(); } } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplitManager.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplitManager.java index ae2902ae58e43..8f774e3f5f156 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplitManager.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplitManager.java @@ -14,12 +14,16 @@ package io.trino.plugin.hudi; import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; import com.google.inject.Inject; -import io.trino.filesystem.TrinoFileSystemFactory; +import io.airlift.log.Logger; import io.trino.metastore.HiveMetastore; -import io.trino.metastore.Table; +import io.trino.metastore.Partition; +import io.trino.metastore.StorageFormat; import io.trino.plugin.base.classloader.ClassLoaderSafeConnectorSplitSource; import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hive.HiveTransactionHandle; +import io.trino.spi.TrinoException; import io.trino.spi.connector.ConnectorSession; import io.trino.spi.connector.ConnectorSplitManager; import io.trino.spi.connector.ConnectorSplitSource; @@ -28,45 +32,43 @@ import io.trino.spi.connector.Constraint; import io.trino.spi.connector.DynamicFilter; import io.trino.spi.connector.TableNotFoundException; -import io.trino.spi.type.TypeManager; +import io.trino.spi.security.ConnectorIdentity; +import org.apache.hudi.common.util.HoodieTimer; +import org.apache.hudi.util.Lazy; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.ExecutorService; import java.util.concurrent.ScheduledExecutorService; +import java.util.function.BiFunction; import java.util.stream.Collectors; -import static com.google.common.collect.ImmutableMap.toImmutableMap; import static io.trino.plugin.hive.metastore.MetastoreUtil.computePartitionKeyFilter; -import static io.trino.plugin.hive.util.HiveUtil.getPartitionKeyColumnHandles; +import static io.trino.plugin.hudi.HudiErrorCode.HUDI_PARTITION_NOT_FOUND; +import static io.trino.plugin.hudi.HudiSessionProperties.getDynamicFilteringWaitTimeout; import static io.trino.plugin.hudi.HudiSessionProperties.getMaxOutstandingSplits; import static io.trino.plugin.hudi.HudiSessionProperties.getMaxSplitsPerSecond; import static io.trino.plugin.hudi.partition.HiveHudiPartitionInfo.NON_PARTITION; -import static io.trino.spi.connector.SchemaTableName.schemaTableName; +import static java.lang.String.format; import static java.util.Objects.requireNonNull; -import static java.util.function.Function.identity; public class HudiSplitManager implements ConnectorSplitManager { - private final TypeManager typeManager; - private final HudiTransactionManager transactionManager; - private final TrinoFileSystemFactory fileSystemFactory; + private static final Logger log = Logger.get(HudiSplitManager.class); + private final BiFunction metastoreProvider; private final ExecutorService executor; private final ScheduledExecutorService splitLoaderExecutorService; @Inject public HudiSplitManager( - TypeManager typeManager, - HudiTransactionManager transactionManager, + BiFunction metastoreProvider, @ForHudiSplitManager ExecutorService executor, - TrinoFileSystemFactory fileSystemFactory, @ForHudiSplitSource ScheduledExecutorService splitLoaderExecutorService) { - this.typeManager = requireNonNull(typeManager, "typeManager is null"); - this.transactionManager = requireNonNull(transactionManager, "transactionManager is null"); + this.metastoreProvider = requireNonNull(metastoreProvider, "metastoreProvider is null"); this.executor = requireNonNull(executor, "executor is null"); - this.fileSystemFactory = requireNonNull(fileSystemFactory, "fileSystemFactory is null"); this.splitLoaderExecutorService = requireNonNull(splitLoaderExecutorService, "splitLoaderExecutorService is null"); } @@ -79,41 +81,60 @@ public ConnectorSplitSource getSplits( Constraint constraint) { HudiTableHandle hudiTableHandle = (HudiTableHandle) tableHandle; - HiveMetastore metastore = transactionManager.get(transaction, session.getIdentity()).getMetastore(); - Table table = metastore.getTable(hudiTableHandle.getSchemaName(), hudiTableHandle.getTableName()) - .orElseThrow(() -> new TableNotFoundException(schemaTableName(hudiTableHandle.getSchemaName(), hudiTableHandle.getTableName()))); - - List partitionColumns = getPartitionKeyColumnHandles(table, typeManager); - Map partitionColumnHandles = partitionColumns.stream() - .collect(toImmutableMap(HiveColumnHandle::getName, identity())); - List partitions = getPartitions(metastore, hudiTableHandle, partitionColumns); + HiveMetastore metastore = metastoreProvider.apply(session.getIdentity(), (HiveTransactionHandle) transaction); + Lazy> lazyAllPartitions = Lazy.lazily(() -> { + HoodieTimer timer = HoodieTimer.start(); + Map allPartitions = getPartitions(metastore, hudiTableHandle); + log.info("Found %s partitions for table %s.%s in %s ms", + allPartitions.size(), hudiTableHandle.getSchemaName(), hudiTableHandle.getTableName(), timer.endTimer()); + return allPartitions; + }); HudiSplitSource splitSource = new HudiSplitSource( session, - metastore, - table, hudiTableHandle, - fileSystemFactory, - partitionColumnHandles, executor, splitLoaderExecutorService, getMaxSplitsPerSecond(session), getMaxOutstandingSplits(session), - partitions); + lazyAllPartitions, + dynamicFilter, + getDynamicFilteringWaitTimeout(session)); return new ClassLoaderSafeConnectorSplitSource(splitSource, HudiSplitManager.class.getClassLoader()); } - private static List getPartitions(HiveMetastore metastore, HudiTableHandle table, List partitionColumns) + private static Map getPartitions( + HiveMetastore metastore, + HudiTableHandle tableHandle) { + List partitionColumns = tableHandle.getPartitionColumns(); if (partitionColumns.isEmpty()) { - return ImmutableList.of(NON_PARTITION); + return ImmutableMap.of( + NON_PARTITION, Partition.builder() + .setDatabaseName(tableHandle.getSchemaName()) + .setTableName(tableHandle.getTableName()) + .withStorage(storageBuilder -> + storageBuilder.setLocation(tableHandle.getBasePath()) + .setStorageFormat(StorageFormat.NULL_STORAGE_FORMAT)) + .setColumns(ImmutableList.of()) + .setValues(ImmutableList.of()) + .build()); } - return metastore.getPartitionNamesByFilter( - table.getSchemaName(), - table.getTableName(), + List partitionNames = metastore.getPartitionNamesByFilter( + tableHandle.getSchemaName(), + tableHandle.getTableName(), partitionColumns.stream().map(HiveColumnHandle::getName).collect(Collectors.toList()), - computePartitionKeyFilter(partitionColumns, table.getPartitionPredicates())) - .orElseThrow(() -> new TableNotFoundException(table.getSchemaTableName())); + computePartitionKeyFilter(partitionColumns, tableHandle.getPartitionPredicates())) + .orElseThrow(() -> new TableNotFoundException(tableHandle.getSchemaTableName())); + Map> partitionsByNames = metastore.getPartitionsByNames(tableHandle.getTable(), partitionNames); + List partitionsNotFound = partitionsByNames.entrySet().stream().filter(e -> e.getValue().isEmpty()).map(Map.Entry::getKey).toList(); + if (!partitionsNotFound.isEmpty()) { + throw new TrinoException(HUDI_PARTITION_NOT_FOUND, format("Cannot find partitions in metastore: %s", partitionsNotFound)); + } + return partitionsByNames + .entrySet().stream() + .filter(e -> e.getValue().isPresent()) + .collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue().get())); } } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplitSource.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplitSource.java index ee2efa976db8a..f0286aea7e951 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplitSource.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiSplitSource.java @@ -13,17 +13,20 @@ */ package io.trino.plugin.hudi; +import com.google.common.base.Stopwatch; +import com.google.common.collect.ImmutableList; import com.google.common.util.concurrent.Futures; import io.airlift.concurrent.BoundedExecutor; import io.airlift.units.DataSize; -import io.trino.filesystem.TrinoFileSystemFactory; -import io.trino.metastore.HiveMetastore; -import io.trino.metastore.Table; +import io.airlift.units.Duration; +import io.trino.metastore.Partition; import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hive.HivePartitionKey; import io.trino.plugin.hive.util.AsyncQueue; +import io.trino.plugin.hive.util.HiveUtil; import io.trino.plugin.hive.util.ThrottledAsyncQueue; import io.trino.plugin.hudi.query.HudiDirectoryLister; -import io.trino.plugin.hudi.query.HudiReadOptimizedDirectoryLister; +import io.trino.plugin.hudi.query.HudiSnapshotDirectoryLister; import io.trino.plugin.hudi.split.HudiBackgroundSplitLoader; import io.trino.plugin.hudi.split.HudiSplitWeightProvider; import io.trino.plugin.hudi.split.SizeBasedSplitWeightProvider; @@ -31,10 +34,21 @@ import io.trino.spi.connector.ConnectorSession; import io.trino.spi.connector.ConnectorSplit; import io.trino.spi.connector.ConnectorSplitSource; +import io.trino.spi.connector.DynamicFilter; +import io.trino.spi.predicate.Domain; +import io.trino.spi.predicate.NullableValue; +import io.trino.spi.predicate.TupleDomain; +import org.apache.hudi.common.config.HoodieMetadataConfig; +import org.apache.hudi.common.engine.HoodieEngineContext; +import org.apache.hudi.common.engine.HoodieLocalEngineContext; import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.metadata.HoodieTableMetadata; +import org.apache.hudi.util.Lazy; +import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.OptionalInt; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.ScheduledExecutorService; @@ -42,49 +56,59 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; +import static com.google.common.collect.ImmutableList.toImmutableList; import static com.google.common.util.concurrent.MoreExecutors.directExecutor; import static io.airlift.concurrent.MoreFutures.toCompletableFuture; import static io.trino.plugin.hudi.HudiErrorCode.HUDI_CANNOT_OPEN_SPLIT; import static io.trino.plugin.hudi.HudiSessionProperties.getMinimumAssignedSplitWeight; import static io.trino.plugin.hudi.HudiSessionProperties.getSplitGeneratorParallelism; import static io.trino.plugin.hudi.HudiSessionProperties.getStandardSplitWeightSize; -import static io.trino.plugin.hudi.HudiSessionProperties.isIgnoreAbsentPartitions; +import static io.trino.plugin.hudi.HudiSessionProperties.isHudiMetadataTableEnabled; import static io.trino.plugin.hudi.HudiSessionProperties.isSizeBasedSplitWeightsEnabled; -import static io.trino.plugin.hudi.HudiUtil.buildTableMetaClient; -import static java.util.stream.Collectors.toList; +import static java.util.Objects.requireNonNull; +import static java.util.concurrent.CompletableFuture.completedFuture; +import static java.util.concurrent.TimeUnit.MILLISECONDS; public class HudiSplitSource implements ConnectorSplitSource { + private static final ConnectorSplitBatch EMPTY_BATCH = new ConnectorSplitBatch(ImmutableList.of(), false); private final AsyncQueue queue; private final ScheduledFuture splitLoaderFuture; private final AtomicReference trinoException = new AtomicReference<>(); + private final DynamicFilter dynamicFilter; + private final long dynamicFilteringWaitTimeoutMillis; + private final Stopwatch dynamicFilterWaitStopwatch; public HudiSplitSource( ConnectorSession session, - HiveMetastore metastore, - Table table, HudiTableHandle tableHandle, - TrinoFileSystemFactory fileSystemFactory, - Map partitionColumnHandleMap, ExecutorService executor, ScheduledExecutorService splitLoaderExecutorService, int maxSplitsPerSecond, int maxOutstandingSplits, - List partitions) + Lazy> lazyPartitions, + DynamicFilter dynamicFilter, + Duration dynamicFilteringWaitTimeoutMillis) { - HoodieTableMetaClient metaClient = buildTableMetaClient(fileSystemFactory.create(session), tableHandle.getBasePath()); - List partitionColumnHandles = table.getPartitionColumns().stream() - .map(column -> partitionColumnHandleMap.get(column.getName())).collect(toList()); + boolean enableMetadataTable = isHudiMetadataTableEnabled(session); + Lazy lazyTableMetadata = Lazy.lazily(() -> { + HoodieMetadataConfig metadataConfig = HoodieMetadataConfig.newBuilder() + .enable(enableMetadataTable) + .build(); + HoodieTableMetaClient metaClient = tableHandle.getMetaClient(); + HoodieEngineContext engineContext = new HoodieLocalEngineContext(metaClient.getStorage().getConf()); + return HoodieTableMetadata.create( + engineContext, + tableHandle.getMetaClient().getStorage(), metadataConfig, metaClient.getBasePath().toString(), true); + }); - HudiDirectoryLister hudiDirectoryLister = new HudiReadOptimizedDirectoryLister( + HudiDirectoryLister hudiDirectoryLister = new HudiSnapshotDirectoryLister( + session, tableHandle, - metaClient, - metastore, - table, - partitionColumnHandles, - partitions, - !tableHandle.getPartitionColumns().isEmpty() && isIgnoreAbsentPartitions(session)); + enableMetadataTable, + lazyTableMetadata, + lazyPartitions); this.queue = new ThrottledAsyncQueue<>(maxSplitsPerSecond, maxOutstandingSplits, executor); HudiBackgroundSplitLoader splitLoader = new HudiBackgroundSplitLoader( @@ -94,18 +118,41 @@ public HudiSplitSource( queue, new BoundedExecutor(executor, getSplitGeneratorParallelism(session)), createSplitWeightProvider(session), - partitions, + lazyPartitions, + enableMetadataTable, + lazyTableMetadata, throwable -> { trinoException.compareAndSet(null, new TrinoException(HUDI_CANNOT_OPEN_SPLIT, - "Failed to generate splits for " + table.getSchemaTableName(), throwable)); + "Failed to generate splits for " + tableHandle.getSchemaTableName(), throwable)); queue.finish(); }); this.splitLoaderFuture = splitLoaderExecutorService.schedule(splitLoader, 0, TimeUnit.MILLISECONDS); + this.dynamicFilter = requireNonNull(dynamicFilter, "dynamicFilter is null"); + this.dynamicFilteringWaitTimeoutMillis = dynamicFilteringWaitTimeoutMillis.toMillis(); + this.dynamicFilterWaitStopwatch = Stopwatch.createStarted(); } @Override public CompletableFuture getNextBatch(int maxSize) { + // If dynamic filtering is enabled and we haven't timed out, wait for the build side to provide the dynamic filter. + long timeLeft = dynamicFilteringWaitTimeoutMillis - dynamicFilterWaitStopwatch.elapsed(MILLISECONDS); + if (dynamicFilter.isAwaitable() && timeLeft > 0) { + // If the filter is not ready, return an empty batch. The query engine will call getNextBatch() again. + // As long as isFinished() is false, effectively polling until the filter is ready or timeout occurs. + return dynamicFilter.isBlocked() + .thenApply(_ -> EMPTY_BATCH) + .completeOnTimeout(EMPTY_BATCH, timeLeft, MILLISECONDS); + } + + TupleDomain dynamicFilterPredicate = + dynamicFilter.getCurrentPredicate().transformKeys(HiveColumnHandle.class::cast); + + if (dynamicFilterPredicate.isNone()) { + close(); + return completedFuture(new ConnectorSplitBatch(ImmutableList.of(), true)); + } + boolean noMoreSplits = isFinished(); Throwable throwable = trinoException.get(); if (throwable != null) { @@ -114,7 +161,13 @@ public CompletableFuture getNextBatch(int maxSize) return toCompletableFuture(Futures.transform( queue.getBatchAsync(maxSize), - splits -> new ConnectorSplitBatch(splits, noMoreSplits), + splits -> + { + List filteredSplits = splits.stream() + .filter(split -> partitionMatchesPredicate((HudiSplit) split, dynamicFilterPredicate)) + .collect(toImmutableList()); + return new ConnectorSplitBatch(filteredSplits, noMoreSplits); + }, directExecutor())); } @@ -130,7 +183,7 @@ public boolean isFinished() return splitLoaderFuture.isDone() && queue.isFinished(); } - private static HudiSplitWeightProvider createSplitWeightProvider(ConnectorSession session) + public static HudiSplitWeightProvider createSplitWeightProvider(ConnectorSession session) { if (isSizeBasedSplitWeightsEnabled(session)) { DataSize standardSplitWeightSize = getStandardSplitWeightSize(session); @@ -139,4 +192,48 @@ private static HudiSplitWeightProvider createSplitWeightProvider(ConnectorSessio } return HudiSplitWeightProvider.uniformStandardWeightProvider(); } + + static boolean partitionMatchesPredicate( + HudiSplit split, + TupleDomain dynamicFilterPredicate) + { + if (dynamicFilterPredicate.isNone()) { + return false; + } + + // Pre-process the filter predicate to get a map of relevant partition domains keyed by partition column name + Map> filterPartitionDomains = new HashMap<>(); + if (dynamicFilterPredicate.getDomains().isPresent()) { + for (Map.Entry entry : dynamicFilterPredicate.getDomains().get().entrySet()) { + HiveColumnHandle column = entry.getKey(); + if (column.isPartitionKey()) { + filterPartitionDomains.put(column.getName(), entry); + } + } + } + + // Match each partition key from the split against the pre-processed filter domains + for (HivePartitionKey splitPartitionKey : split.getPartitionKeys()) { + Map.Entry filterInfo = filterPartitionDomains.get(splitPartitionKey.name()); + + if (filterInfo == null) { + // filterInfo is null, the partition key is not constrained by the filter + continue; + } + + HiveColumnHandle filterColumnHandle = filterInfo.getKey(); + Domain filterDomain = filterInfo.getValue(); + + NullableValue value = HiveUtil.getPrefilledColumnValue( + filterColumnHandle, + splitPartitionKey, + null, OptionalInt.empty(), 0, 0, ""); + + // Split does not match this filter condition + if (!filterDomain.includesNullableValue(value.getValue())) { + return false; + } + } + return true; + } } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableHandle.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableHandle.java index f423ff1c7c48c..d6a152446ef0a 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableHandle.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiTableHandle.java @@ -17,15 +17,22 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonProperty; import com.google.common.collect.ImmutableSet; +import io.trino.metastore.Table; import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.spi.TrinoException; import io.trino.spi.connector.ConnectorTableHandle; import io.trino.spi.connector.SchemaTableName; import io.trino.spi.predicate.TupleDomain; import org.apache.hudi.common.model.HoodieTableType; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.common.table.timeline.HoodieInstant; +import org.apache.hudi.util.Lazy; import java.util.List; +import java.util.Optional; import java.util.Set; +import static com.google.common.base.Preconditions.checkArgument; import static io.trino.spi.connector.SchemaTableName.schemaTableName; import static java.util.Objects.requireNonNull; @@ -41,6 +48,10 @@ public class HudiTableHandle private final Set constraintColumns; private final TupleDomain partitionPredicates; private final TupleDomain regularPredicates; + // Coordinator-only + private final transient Optional
table; + private final transient Optional> lazyMetaClient; + private final transient Optional> lazyLatestCommitTime; @JsonCreator public HudiTableHandle( @@ -52,10 +63,12 @@ public HudiTableHandle( @JsonProperty("partitionPredicates") TupleDomain partitionPredicates, @JsonProperty("regularPredicates") TupleDomain regularPredicates) { - this(schemaName, tableName, basePath, tableType, partitionColumns, ImmutableSet.of(), partitionPredicates, regularPredicates); + this(Optional.empty(), Optional.empty(), schemaName, tableName, basePath, tableType, partitionColumns, ImmutableSet.of(), partitionPredicates, regularPredicates); } public HudiTableHandle( + Optional
table, + Optional> lazyMetaClient, String schemaName, String tableName, String basePath, @@ -65,6 +78,15 @@ public HudiTableHandle( TupleDomain partitionPredicates, TupleDomain regularPredicates) { + this.table = requireNonNull(table, "table is null"); + this.lazyMetaClient = requireNonNull(lazyMetaClient, "lazyMetaClient is null"); + this.lazyLatestCommitTime = Optional.of(Lazy.lazily(() -> + getMetaClient().getActiveTimeline() + .getCommitsTimeline() + .filterCompletedInstants() + .lastInstant() + .map(HoodieInstant::requestedTime) + .orElseThrow(() -> new TrinoException(HudiErrorCode.HUDI_NO_VALID_COMMIT, "Table has no valid commits")))); this.schemaName = requireNonNull(schemaName, "schemaName is null"); this.tableName = requireNonNull(tableName, "tableName is null"); this.basePath = requireNonNull(basePath, "basePath is null"); @@ -75,6 +97,30 @@ public HudiTableHandle( this.regularPredicates = requireNonNull(regularPredicates, "regularPredicates is null"); } + public Table getTable() + { + checkArgument(table.isPresent(), + "getTable() called on a table handle that has no metastore table object; " + + "this is likely because it is called on the worker."); + return table.get(); + } + + public HoodieTableMetaClient getMetaClient() + { + checkArgument(lazyMetaClient.isPresent(), + "getMetaClient() called on a table handle that has no Hudi meta-client; " + + "this is likely because it is called on the worker."); + return lazyMetaClient.get().get(); + } + + public String getLatestCommitTime() + { + checkArgument(lazyLatestCommitTime.isPresent(), + "getLatestCommitTime() called on a table handle that has no Hudi meta-client; " + + "this is likely because it is called on the worker."); + return lazyLatestCommitTime.get().get(); + } + @JsonProperty public String getSchemaName() { @@ -135,6 +181,8 @@ HudiTableHandle applyPredicates( TupleDomain regularTupleDomain) { return new HudiTableHandle( + table, + lazyMetaClient, schemaName, tableName, basePath, diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiUtil.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiUtil.java index e92742aaaeb88..2c54634fdce97 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiUtil.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/HudiUtil.java @@ -18,34 +18,50 @@ import io.trino.filesystem.FileIterator; import io.trino.filesystem.Location; import io.trino.filesystem.TrinoFileSystem; -import io.trino.metastore.Column; import io.trino.metastore.HivePartition; +import io.trino.metastore.HiveType; import io.trino.plugin.hive.HiveColumnHandle; import io.trino.plugin.hive.HivePartitionKey; import io.trino.plugin.hive.HivePartitionManager; -import io.trino.plugin.hudi.storage.TrinoHudiStorage; +import io.trino.plugin.hive.avro.AvroHiveFileUtils; +import io.trino.plugin.hudi.storage.HudiTrinoStorage; import io.trino.plugin.hudi.storage.TrinoStorageConfiguration; import io.trino.spi.TrinoException; import io.trino.spi.connector.SchemaTableName; import io.trino.spi.predicate.Domain; import io.trino.spi.predicate.NullableValue; import io.trino.spi.predicate.TupleDomain; +import io.trino.spi.type.VarcharType; +import org.apache.avro.Schema; +import org.apache.avro.SchemaBuilder; +import org.apache.hudi.common.fs.FSUtils; +import org.apache.hudi.common.model.FileSlice; +import org.apache.hudi.common.model.HoodieBaseFile; import org.apache.hudi.common.model.HoodieFileFormat; +import org.apache.hudi.common.model.HoodieFileGroupId; +import org.apache.hudi.common.model.HoodieLogFile; import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.common.table.view.HoodieTableFileSystemView; +import org.apache.hudi.exception.TableNotFoundException; +import org.apache.hudi.metadata.HoodieTableMetadata; +import org.apache.hudi.storage.StoragePath; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.IntStream; import static io.trino.plugin.hive.HiveErrorCode.HIVE_INVALID_METADATA; import static io.trino.plugin.hive.util.HiveUtil.checkCondition; +import static io.trino.plugin.hudi.HudiErrorCode.HUDI_BAD_DATA; import static io.trino.plugin.hudi.HudiErrorCode.HUDI_FILESYSTEM_ERROR; +import static io.trino.plugin.hudi.HudiErrorCode.HUDI_META_CLIENT_ERROR; import static io.trino.plugin.hudi.HudiErrorCode.HUDI_UNSUPPORTED_FILE_FORMAT; -import static org.apache.hudi.common.model.HoodieFileFormat.HFILE; -import static org.apache.hudi.common.model.HoodieFileFormat.HOODIE_LOG; -import static org.apache.hudi.common.model.HoodieFileFormat.ORC; -import static org.apache.hudi.common.model.HoodieFileFormat.PARQUET; -import static org.apache.hudi.common.table.HoodieTableMetaClient.METAFOLDER_NAME; +import static org.apache.hudi.common.model.HoodieRecord.HOODIE_META_COLUMNS; public final class HudiUtil { @@ -54,17 +70,17 @@ private HudiUtil() {} public static HoodieFileFormat getHudiFileFormat(String path) { String extension = getFileExtension(path); - if (extension.equals(PARQUET.getFileExtension())) { - return PARQUET; + if (extension.equals(HoodieFileFormat.PARQUET.getFileExtension())) { + return HoodieFileFormat.PARQUET; } - if (extension.equals(HOODIE_LOG.getFileExtension())) { - return HOODIE_LOG; + if (extension.equals(HoodieFileFormat.HOODIE_LOG.getFileExtension())) { + return HoodieFileFormat.HOODIE_LOG; } - if (extension.equals(ORC.getFileExtension())) { - return ORC; + if (extension.equals(HoodieFileFormat.ORC.getFileExtension())) { + return HoodieFileFormat.ORC; } - if (extension.equals(HFILE.getFileExtension())) { - return HFILE; + if (extension.equals(HoodieFileFormat.HFILE.getFileExtension())) { + return HoodieFileFormat.HFILE; } throw new TrinoException(HUDI_UNSUPPORTED_FILE_FORMAT, "Hoodie InputFormat not implemented for base file of type " + extension); } @@ -79,7 +95,7 @@ private static String getFileExtension(String fullName) public static boolean hudiMetadataExists(TrinoFileSystem trinoFileSystem, Location baseLocation) { try { - Location metaLocation = baseLocation.appendPath(METAFOLDER_NAME); + Location metaLocation = baseLocation.appendPath(HoodieTableMetaClient.METAFOLDER_NAME); FileIterator iterator = trinoFileSystem.listFiles(metaLocation); // If there is at least one file in the .hoodie directory, it's a valid Hudi table return iterator.hasNext(); @@ -117,7 +133,7 @@ public static boolean partitionMatches(List partitionColumns, return true; } - public static List buildPartitionKeys(List keys, List values) + public static List buildPartitionKeys(List keys, List values) { checkCondition(keys.size() == values.size(), HIVE_INVALID_METADATA, "Expected %s partition key values, but got %s. Keys: %s, Values: %s.", @@ -133,11 +149,126 @@ public static List buildPartitionKeys(List keys, List< public static HoodieTableMetaClient buildTableMetaClient( TrinoFileSystem fileSystem, + String tableName, String basePath) { - return HoodieTableMetaClient.builder() - .setStorage(new TrinoHudiStorage(fileSystem, new TrinoStorageConfiguration())) - .setBasePath(basePath) - .build(); + try { + return HoodieTableMetaClient.builder() + .setStorage(new HudiTrinoStorage(fileSystem, new TrinoStorageConfiguration())) + .setBasePath(basePath) + .build(); + } + catch (TableNotFoundException e) { + throw new TrinoException(HUDI_BAD_DATA, + "Location of table %s does not contain Hudi table metadata: %s".formatted(tableName, basePath)); + } + catch (Throwable e) { + throw new TrinoException(HUDI_META_CLIENT_ERROR, + "Unable to load Hudi meta client for table %s (%s)".formatted(tableName, basePath)); + } + } + + public static Schema constructSchema(List columnNames, List columnTypes) + { + // create instance of this class to keep nested record naming consistent for any given inputs + AvroHiveFileUtils recordIncrementingUtil = new AvroHiveFileUtils(); + SchemaBuilder.RecordBuilder schemaBuilder = SchemaBuilder.record("baseRecord"); + SchemaBuilder.FieldAssembler fieldBuilder = schemaBuilder.fields(); + + for (int i = 0; i < columnNames.size(); ++i) { + Schema fieldSchema = recordIncrementingUtil.avroSchemaForHiveType(columnTypes.get(i)); + fieldBuilder = fieldBuilder + .name(columnNames.get(i)) + .type(fieldSchema) + .withDefault(null); + } + return fieldBuilder.endRecord(); + } + + public static Schema constructSchema(Schema dataSchema, List columnNames) + { + SchemaBuilder.RecordBuilder schemaBuilder = SchemaBuilder.record("baseRecord"); + SchemaBuilder.FieldAssembler fieldBuilder = schemaBuilder.fields(); + for (String columnName : columnNames) { + Schema originalFieldSchema = dataSchema.getField(columnName).schema(); + Schema typeForNewField; + + // Check if the original field schema is already nullable (i.e., a UNION containing NULL) + if (originalFieldSchema.isNullable()) { + typeForNewField = originalFieldSchema; + } + else { + typeForNewField = Schema.createUnion(Schema.create(Schema.Type.NULL), originalFieldSchema); + } + + fieldBuilder = fieldBuilder + .name(columnName) + .type(typeForNewField) + .withDefault(null); + } + return fieldBuilder.endRecord(); + } + + public static List prependHudiMetaColumns(List dataColumns) + { + //For efficient lookup + Set dataColumnNames = dataColumns.stream() + .map(HiveColumnHandle::getName) + .collect(Collectors.toSet()); + + // If all Hudi meta columns are already present, return the original list + if (dataColumnNames.containsAll(HOODIE_META_COLUMNS)) { + return dataColumns; + } + + // Identify only the meta columns that are missing from dataColumns to avoid duplicates + List missingMetaColumns = HOODIE_META_COLUMNS.stream() + .filter(metaColumn -> !dataColumnNames.contains(metaColumn)) + .toList(); + + List columns = new ArrayList<>(); + + // Create and prepend the new HiveColumnHandles for the missing meta columns + columns.addAll(IntStream.range(0, missingMetaColumns.size()) + .boxed() + .map(i -> new HiveColumnHandle( + missingMetaColumns.get(i), + i, + HiveType.HIVE_STRING, + VarcharType.VARCHAR, + Optional.empty(), + HiveColumnHandle.ColumnType.REGULAR, + Optional.empty())) + .toList()); + + // Add all the original data columns after the new meta columns + columns.addAll(dataColumns); + + return columns; + } + + public static FileSlice convertToFileSlice(HudiSplit split, String basePath) + { + String dataFilePath = split.getBaseFile().isPresent() + ? split.getBaseFile().get().getPath() + : split.getLogFiles().getFirst().getPath(); + String fileId = FSUtils.getFileIdFromFileName(new StoragePath(dataFilePath).getName()); + HoodieBaseFile baseFile = split.getBaseFile().isPresent() + ? new HoodieBaseFile(dataFilePath, fileId, split.getCommitTime(), null) + : null; + + return new FileSlice( + new HoodieFileGroupId(FSUtils.getRelativePartitionPath(new StoragePath(basePath), new StoragePath(dataFilePath)), fileId), + split.getCommitTime(), + baseFile, + split.getLogFiles().stream().map(lf -> new HoodieLogFile(lf.getPath())).toList()); + } + + public static HoodieTableFileSystemView getFileSystemView( + HoodieTableMetadata tableMetadata, + HoodieTableMetaClient metaClient) + { + return new HoodieTableFileSystemView( + tableMetadata, metaClient, metaClient.getActiveTimeline().getCommitsTimeline().filterCompletedInstants()); } } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/TimelineTable.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/TimelineTable.java index 19730c4768485..1024d87a0b5c2 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/TimelineTable.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/TimelineTable.java @@ -74,10 +74,9 @@ public ConnectorTableMetadata getTableMetadata() @Override public RecordCursor cursor(ConnectorTransactionHandle transactionHandle, ConnectorSession session, TupleDomain constraint) { - HoodieTableMetaClient metaClient = buildTableMetaClient(fileSystem, location); + HoodieTableMetaClient metaClient = buildTableMetaClient(fileSystem, tableMetadata.getTable().toString(), location); Iterable> records = () -> metaClient.getCommitsTimeline().getInstants().stream() - .map(this::getRecord) - .iterator(); + .map(this::getRecord).iterator(); return new InMemoryRecordSet(types, records).cursor(); } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/file/HudiBaseFile.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/file/HudiBaseFile.java new file mode 100644 index 0000000000000..f21a9b56bd011 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/file/HudiBaseFile.java @@ -0,0 +1,113 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.file; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import org.apache.hudi.common.model.HoodieBaseFile; + +import static com.google.common.base.Preconditions.checkArgument; + +public class HudiBaseFile + implements HudiFile +{ + private final String path; + private final String fileName; + private final long fileSize; + private final long modificationTime; + private final long start; + private final long length; + + public static HudiBaseFile of(HoodieBaseFile baseFile) + { + return of(baseFile, 0, baseFile.getFileSize()); + } + + public static HudiBaseFile of(HoodieBaseFile baseFile, long start, long length) + { + return new HudiBaseFile(baseFile, start, length); + } + + @JsonCreator + public HudiBaseFile(@JsonProperty("path") String path, + @JsonProperty("fileName") String fileName, + @JsonProperty("fileSize") long fileSize, + @JsonProperty("modificationTime") long modificationTime, + @JsonProperty("start") long start, + @JsonProperty("length") long length) + { + this.path = path; + this.fileName = fileName; + this.fileSize = fileSize; + this.modificationTime = modificationTime; + this.start = start; + this.length = length; + } + + private HudiBaseFile(HoodieBaseFile baseFile, long start, long length) + { + checkArgument(baseFile != null, "baseFile is null"); + checkArgument(start >= 0, "start must be positive"); + checkArgument(length >= 0, "length must be positive"); + checkArgument(start + length <= baseFile.getFileSize(), "fileSize must be at least start + length"); + this.path = baseFile.getPath(); + this.fileName = baseFile.getFileName(); + this.fileSize = baseFile.getFileSize(); + this.modificationTime = baseFile.getPathInfo().getModificationTime(); + this.start = start; + this.length = length; + } + + @JsonProperty + @Override + public String getPath() + { + return path; + } + + @JsonProperty + @Override + public String getFileName() + { + return fileName; + } + + @JsonProperty + @Override + public long getFileSize() + { + return fileSize; + } + + @JsonProperty + @Override + public long getModificationTime() + { + return modificationTime; + } + + @JsonProperty + @Override + public long getStart() + { + return start; + } + + @JsonProperty + @Override + public long getLength() + { + return length; + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/file/HudiFile.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/file/HudiFile.java new file mode 100644 index 0000000000000..00e2ac66f9c7f --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/file/HudiFile.java @@ -0,0 +1,29 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.file; + +public interface HudiFile +{ + String getPath(); + + String getFileName(); + + long getFileSize(); + + long getModificationTime(); + + long getStart(); + + long getLength(); +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/file/HudiLogFile.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/file/HudiLogFile.java new file mode 100644 index 0000000000000..0ed071f233809 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/file/HudiLogFile.java @@ -0,0 +1,113 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.file; + +import com.fasterxml.jackson.annotation.JsonCreator; +import com.fasterxml.jackson.annotation.JsonProperty; +import org.apache.hudi.common.model.HoodieLogFile; + +import static com.google.common.base.Preconditions.checkArgument; + +public class HudiLogFile + implements HudiFile +{ + private final String path; + private final String fileName; + private final long fileSize; + private final long modificationTime; + private final long start; + private final long length; + + public static HudiLogFile of(HoodieLogFile logFile) + { + return of(logFile, 0, logFile.getFileSize()); + } + + public static HudiLogFile of(HoodieLogFile logFile, long start, long length) + { + return new HudiLogFile(logFile, start, length); + } + + @JsonCreator + public HudiLogFile(@JsonProperty("path") String path, + @JsonProperty("fileName") String fileName, + @JsonProperty("fileSize") long fileSize, + @JsonProperty("modificationTime") long modificationTime, + @JsonProperty("start") long start, + @JsonProperty("length") long length) + { + this.path = path; + this.fileName = fileName; + this.fileSize = fileSize; + this.modificationTime = modificationTime; + this.start = start; + this.length = length; + } + + private HudiLogFile(HoodieLogFile logFile, long start, long length) + { + checkArgument(logFile != null, "logFile is null"); + checkArgument(start >= 0, "start must be positive"); + checkArgument(length >= 0, "length must be positive"); + checkArgument(start + length <= logFile.getFileSize(), "fileSize must be at least start + length"); + this.path = logFile.getPath().toString(); + this.fileName = logFile.getFileName(); + this.fileSize = logFile.getFileSize(); + this.modificationTime = logFile.getPathInfo().getModificationTime(); + this.start = start; + this.length = length; + } + + @JsonProperty + @Override + public String getPath() + { + return path; + } + + @JsonProperty + @Override + public String getFileName() + { + return fileName; + } + + @JsonProperty + @Override + public long getFileSize() + { + return fileSize; + } + + @JsonProperty + @Override + public long getModificationTime() + { + return modificationTime; + } + + @JsonProperty + @Override + public long getStart() + { + return start; + } + + @JsonProperty + @Override + public long getLength() + { + return length; + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoHudiFileReaderFactory.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/HudiTrinoFileReaderFactory.java similarity index 58% rename from hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoHudiFileReaderFactory.java rename to hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/HudiTrinoFileReaderFactory.java index 2fbd51dd3a1f5..7e8bb967ffc72 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoHudiFileReaderFactory.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/HudiTrinoFileReaderFactory.java @@ -14,7 +14,6 @@ package io.trino.plugin.hudi.io; import org.apache.avro.Schema; -import org.apache.avro.generic.IndexedRecord; import org.apache.hudi.common.config.HoodieConfig; import org.apache.hudi.common.util.Option; import org.apache.hudi.io.storage.HoodieAvroBootstrapFileReader; @@ -26,28 +25,22 @@ import java.io.IOException; -/** - * {@link HoodieFileReaderFactory} implementation for Trino Hudi connector - * that is Hadoop-independent. - * Note that this reader factory is only used for reading log files and bootstrap files now. - */ -public class TrinoHudiFileReaderFactory +public class HudiTrinoFileReaderFactory extends HoodieFileReaderFactory { - public TrinoHudiFileReaderFactory(HoodieStorage storage) + public HudiTrinoFileReaderFactory(HoodieStorage storage) { super(storage); } @Override - protected HoodieFileReader newParquetFileReader(StoragePath path) + protected HoodieFileReader newParquetFileReader(StoragePath path) { - throw new UnsupportedOperationException("TrinoHudiFileReaderFactory does not support Parquet file reader"); + throw new UnsupportedOperationException("HudiTrinoFileReaderFactory does not support Parquet file reader"); } @Override - protected HoodieFileReader newHFileFileReader( - HoodieConfig hoodieConfig, + protected HoodieFileReader newHFileFileReader(HoodieConfig hoodieConfig, StoragePath path, Option schemaOption) throws IOException @@ -56,8 +49,7 @@ protected HoodieFileReader newHFileFileReader( } @Override - protected HoodieFileReader newHFileFileReader( - HoodieConfig hoodieConfig, + protected HoodieFileReader newHFileFileReader(HoodieConfig hoodieConfig, StoragePath path, HoodieStorage storage, byte[] content, @@ -68,22 +60,14 @@ protected HoodieFileReader newHFileFileReader( } @Override - protected HoodieFileReader newOrcFileReader(StoragePath path) + protected HoodieFileReader newOrcFileReader(StoragePath path) { - throw new UnsupportedOperationException("TrinoHudiFileReaderFactory does not support ORC file reader"); + throw new UnsupportedOperationException("HudiTrinoFileReaderFactory does not support ORC file reader"); } @Override - public HoodieFileReader newBootstrapFileReader( - HoodieFileReader skeletonFileReader, - HoodieFileReader dataFileReader, - Option partitionFields, - Object[] partitionValues) + public HoodieFileReader newBootstrapFileReader(HoodieFileReader skeletonFileReader, HoodieFileReader dataFileReader, Option partitionFields, Object[] partitionValues) { - return new HoodieAvroBootstrapFileReader( - skeletonFileReader, - dataFileReader, - partitionFields, - partitionValues); + return new HoodieAvroBootstrapFileReader(skeletonFileReader, dataFileReader, partitionFields, partitionValues); } } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoHudiIoFactory.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/HudiTrinoIOFactory.java similarity index 68% rename from hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoHudiIoFactory.java rename to hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/HudiTrinoIOFactory.java index 5f779ead8cf47..8044e92b58ec7 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoHudiIoFactory.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/HudiTrinoIOFactory.java @@ -23,14 +23,10 @@ import org.apache.hudi.storage.HoodieStorage; import org.apache.hudi.storage.StoragePath; -/** - * {@link HoodieIOFactory} implementation for Trino Hudi connector - * that is Hadoop-independent. - */ -public class TrinoHudiIoFactory +public class HudiTrinoIOFactory extends HoodieIOFactory { - public TrinoHudiIoFactory(HoodieStorage storage) + public HudiTrinoIOFactory(HoodieStorage storage) { super(storage); } @@ -38,19 +34,19 @@ public TrinoHudiIoFactory(HoodieStorage storage) @Override public HoodieFileReaderFactory getReaderFactory(HoodieRecord.HoodieRecordType recordType) { - return new TrinoHudiFileReaderFactory(storage); + return new HudiTrinoFileReaderFactory(storage); } @Override public HoodieFileWriterFactory getWriterFactory(HoodieRecord.HoodieRecordType recordType) { - throw new UnsupportedOperationException("TrinoHudiIoFactory does not support writers"); + throw new UnsupportedOperationException("HudiTrinoIOFactory does not support writers."); } @Override public FileFormatUtils getFileFormatUtils(HoodieFileFormat fileFormat) { - throw new UnsupportedOperationException("TrinoHudiIoFactory does not support FileFormatUtils"); + throw new UnsupportedOperationException("FileFormatUtils not supported in HudiTrinoIOFactory"); } @Override @@ -60,14 +56,7 @@ public HoodieStorage getStorage(StoragePath storagePath) } @Override - public HoodieStorage getStorage( - StoragePath path, - boolean enableRetry, - long maxRetryIntervalMs, - int maxRetryNumbers, - long initialRetryIntervalMs, - String retryExceptions, - ConsistencyGuard consistencyGuard) + public HoodieStorage getStorage(StoragePath path, boolean enableRetry, long maxRetryIntervalMs, int maxRetryNumbers, long initialRetryIntervalMs, String retryExceptions, ConsistencyGuard consistencyGuard) { return storage; } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/InlineSeekableDataInputStream.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/InlineSeekableDataInputStream.java new file mode 100644 index 0000000000000..5b1c322e0a39b --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/InlineSeekableDataInputStream.java @@ -0,0 +1,51 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.io; + +import io.trino.filesystem.TrinoInputStream; + +import java.io.IOException; + +public class InlineSeekableDataInputStream + extends TrinoSeekableDataInputStream +{ + private final long startOffset; + private final long length; + + public InlineSeekableDataInputStream(TrinoInputStream stream, long startOffset, long length) + { + super(stream); + this.startOffset = startOffset; + this.length = length; + } + + @Override + public long getPos() + throws IOException + { + return super.getPos() - startOffset; + } + + @Override + public void seek(long pos) + throws IOException + { + if (pos > length) { + throw new IOException(String.format( + "Attempting to seek past inline content: position to seek to is %s but the length is %s", + pos, length)); + } + super.seek(startOffset + pos); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoSeekableDataInputStream.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoSeekableDataInputStream.java index c341b38423e43..babf44eba755e 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoSeekableDataInputStream.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/io/TrinoSeekableDataInputStream.java @@ -18,9 +18,6 @@ import java.io.IOException; -/** - * {@link SeekableDataInputStream} implementation based on {@link TrinoInputStream} - */ public class TrinoSeekableDataInputStream extends SeekableDataInputStream { diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HiveHudiPartitionInfo.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HiveHudiPartitionInfo.java index 521b5c3537af2..f7e6fb1fa81b1 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HiveHudiPartitionInfo.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HiveHudiPartitionInfo.java @@ -13,77 +13,59 @@ */ package io.trino.plugin.hudi.partition; -import com.google.common.collect.ImmutableList; import io.trino.filesystem.Location; -import io.trino.metastore.Column; -import io.trino.metastore.HiveMetastore; import io.trino.metastore.Partition; -import io.trino.metastore.Table; import io.trino.plugin.hive.HiveColumnHandle; import io.trino.plugin.hive.HivePartitionKey; -import io.trino.spi.TrinoException; +import io.trino.spi.connector.SchemaTableName; import io.trino.spi.predicate.TupleDomain; -import java.util.Collections; import java.util.List; -import java.util.Optional; import static com.google.common.base.MoreObjects.toStringHelper; -import static io.trino.metastore.Partitions.toPartitionValues; -import static io.trino.plugin.hudi.HudiErrorCode.HUDI_PARTITION_NOT_FOUND; import static io.trino.plugin.hudi.HudiUtil.buildPartitionKeys; import static io.trino.plugin.hudi.HudiUtil.partitionMatchesPredicates; -import static java.lang.String.format; public class HiveHudiPartitionInfo implements HudiPartitionInfo { public static final String NON_PARTITION = ""; - private final Table table; + private final SchemaTableName schemaTableName; private final List partitionColumnHandles; private final TupleDomain constraintSummary; private final String hivePartitionName; - private final List partitionColumns; - private final HiveMetastore hiveMetastore; - private String relativePartitionPath; - private List hivePartitionKeys; + private final String relativePartitionPath; + private final List hivePartitionKeys; public HiveHudiPartitionInfo( + SchemaTableName schemaTableName, + Location tableLocation, String hivePartitionName, - List partitionColumns, + Partition partition, List partitionColumnHandles, - TupleDomain constraintSummary, - Table table, - HiveMetastore hiveMetastore) + TupleDomain constraintSummary) { - this.table = table; + this.schemaTableName = schemaTableName; this.partitionColumnHandles = partitionColumnHandles; this.constraintSummary = constraintSummary; this.hivePartitionName = hivePartitionName; - this.partitionColumns = partitionColumns; - if (partitionColumns.isEmpty()) { - this.relativePartitionPath = NON_PARTITION; - this.hivePartitionKeys = Collections.emptyList(); - } - this.hiveMetastore = hiveMetastore; + this.relativePartitionPath = getRelativePartitionPath( + tableLocation, + Location.of(partition.getStorage().getLocation())); + this.hivePartitionKeys = buildPartitionKeys( + partitionColumnHandles, partition.getValues()); } @Override public String getRelativePartitionPath() { - if (relativePartitionPath == null) { - loadPartitionInfo(hiveMetastore.getPartition(table, toPartitionValues(hivePartitionName))); - } return relativePartitionPath; } @Override public List getHivePartitionKeys() { - if (hivePartitionKeys == null) { - loadPartitionInfo(hiveMetastore.getPartition(table, toPartitionValues(hivePartitionName))); - } return hivePartitionKeys; } @@ -91,22 +73,14 @@ public List getHivePartitionKeys() public boolean doesMatchPredicates() { if (hivePartitionName.equals(NON_PARTITION)) { - hivePartitionKeys = ImmutableList.of(); return true; } - return partitionMatchesPredicates(table.getSchemaTableName(), hivePartitionName, partitionColumnHandles, constraintSummary); + return partitionMatchesPredicates(schemaTableName, hivePartitionName, partitionColumnHandles, constraintSummary); } - @Override - public void loadPartitionInfo(Optional partition) + public String getHivePartitionName() { - if (partition.isEmpty()) { - throw new TrinoException(HUDI_PARTITION_NOT_FOUND, format("Cannot find partition in Hive Metastore: %s", hivePartitionName)); - } - this.relativePartitionPath = getRelativePartitionPath( - Location.of(table.getStorage().getLocation()), - Location.of(partition.get().getStorage().getLocation())); - this.hivePartitionKeys = buildPartitionKeys(partitionColumns, partition.get().getValues()); + return hivePartitionName; } private static String getRelativePartitionPath(Location baseLocation, Location fullPartitionLocation) @@ -132,8 +106,6 @@ private static String getRelativePartitionPath(Location baseLocation, Location f public String toString() { return toStringHelper(this) - .add("databaseName", table.getDatabaseName()) - .add("tableName", table.getTableName()) .add("hivePartitionName", hivePartitionName) .add("hivePartitionKeys", hivePartitionKeys) .toString(); diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HudiPartitionInfo.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HudiPartitionInfo.java index 8e41eba8743bb..1b607f1accf2b 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HudiPartitionInfo.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HudiPartitionInfo.java @@ -13,11 +13,9 @@ */ package io.trino.plugin.hudi.partition; -import io.trino.metastore.Partition; import io.trino.plugin.hive.HivePartitionKey; import java.util.List; -import java.util.Optional; public interface HudiPartitionInfo { @@ -26,6 +24,4 @@ public interface HudiPartitionInfo List getHivePartitionKeys(); boolean doesMatchPredicates(); - - void loadPartitionInfo(Optional partition); } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HudiPartitionInfoLoader.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HudiPartitionInfoLoader.java index bed1c2b33f675..874297b9b692a 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HudiPartitionInfoLoader.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/partition/HudiPartitionInfoLoader.java @@ -16,10 +16,10 @@ import io.airlift.concurrent.MoreFutures; import io.trino.plugin.hive.HivePartitionKey; import io.trino.plugin.hive.util.AsyncQueue; -import io.trino.plugin.hudi.HudiFileStatus; import io.trino.plugin.hudi.query.HudiDirectoryLister; import io.trino.plugin.hudi.split.HudiSplitFactory; import io.trino.spi.connector.ConnectorSplit; +import org.apache.hudi.common.model.FileSlice; import java.util.Deque; import java.util.List; @@ -34,20 +34,26 @@ public class HudiPartitionInfoLoader private final HudiSplitFactory hudiSplitFactory; private final AsyncQueue asyncQueue; private final Deque partitionQueue; + private final String commitTime; + private final boolean useIndex; private boolean isRunning; public HudiPartitionInfoLoader( HudiDirectoryLister hudiDirectoryLister, + String commitTime, HudiSplitFactory hudiSplitFactory, AsyncQueue asyncQueue, - Deque partitionQueue) + Deque partitionQueue, + boolean useIndex) { this.hudiDirectoryLister = hudiDirectoryLister; + this.commitTime = commitTime; this.hudiSplitFactory = hudiSplitFactory; this.asyncQueue = asyncQueue; this.partitionQueue = partitionQueue; this.isRunning = true; + this.useIndex = useIndex; } @Override @@ -68,9 +74,9 @@ private void generateSplitsFromPartition(String partitionName) partitionInfo.ifPresent(hudiPartitionInfo -> { if (hudiPartitionInfo.doesMatchPredicates() || partitionName.equals(NON_PARTITION)) { List partitionKeys = hudiPartitionInfo.getHivePartitionKeys(); - List partitionFiles = hudiDirectoryLister.listStatus(hudiPartitionInfo); - partitionFiles.stream() - .flatMap(fileStatus -> hudiSplitFactory.createSplits(partitionKeys, fileStatus).stream()) + List partitionFileSlices = hudiDirectoryLister.listStatus(hudiPartitionInfo, useIndex); + partitionFileSlices.stream() + .flatMap(slice -> hudiSplitFactory.createSplits(partitionKeys, slice, commitTime).stream()) .map(asyncQueue::offer) .forEachOrdered(MoreFutures::getFutureValue); } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiDirectoryLister.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiDirectoryLister.java index 710dfc44916ce..fb8f1903358eb 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiDirectoryLister.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiDirectoryLister.java @@ -13,8 +13,8 @@ */ package io.trino.plugin.hudi.query; -import io.trino.plugin.hudi.HudiFileStatus; import io.trino.plugin.hudi.partition.HudiPartitionInfo; +import org.apache.hudi.common.model.FileSlice; import java.io.Closeable; import java.util.List; @@ -23,7 +23,7 @@ public interface HudiDirectoryLister extends Closeable { - List listStatus(HudiPartitionInfo partitionInfo); + List listStatus(HudiPartitionInfo partitionInfo, boolean useIndex); Optional getPartitionInfo(String partition); } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java deleted file mode 100644 index 4ed50630b39bb..0000000000000 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiReadOptimizedDirectoryLister.java +++ /dev/null @@ -1,119 +0,0 @@ -/* - * Licensed 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. - */ -package io.trino.plugin.hudi.query; - -import io.airlift.log.Logger; -import io.airlift.units.DataSize; -import io.trino.filesystem.Location; -import io.trino.metastore.Column; -import io.trino.metastore.HiveMetastore; -import io.trino.metastore.Table; -import io.trino.plugin.hive.HiveColumnHandle; -import io.trino.plugin.hudi.HudiFileStatus; -import io.trino.plugin.hudi.HudiTableHandle; -import io.trino.plugin.hudi.partition.HiveHudiPartitionInfo; -import io.trino.plugin.hudi.partition.HudiPartitionInfo; -import org.apache.hudi.common.engine.HoodieLocalEngineContext; -import org.apache.hudi.common.model.HoodieBaseFile; -import org.apache.hudi.common.table.HoodieTableMetaClient; -import org.apache.hudi.common.table.view.HoodieTableFileSystemView; -import org.apache.hudi.storage.StoragePathInfo; - -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.function.Function; -import java.util.stream.Collectors; - -import static com.google.common.collect.ImmutableList.toImmutableList; -import static io.airlift.units.DataSize.Unit.MEGABYTE; -import static java.lang.Math.max; -import static java.lang.Math.min; -import static org.apache.hudi.common.table.view.HoodieTableFileSystemView.fileListingBasedFileSystemView; - -public class HudiReadOptimizedDirectoryLister - implements HudiDirectoryLister -{ - private static final Logger LOG = Logger.get(HudiReadOptimizedDirectoryLister.class); - private static final long MIN_BLOCK_SIZE = DataSize.of(32, MEGABYTE).toBytes(); - - private final HoodieTableFileSystemView fileSystemView; - private final List partitionColumns; - private final Map allPartitionInfoMap; - - public HudiReadOptimizedDirectoryLister( - HudiTableHandle tableHandle, - HoodieTableMetaClient metaClient, - HiveMetastore hiveMetastore, - Table hiveTable, - List partitionColumnHandles, - List hivePartitionNames, - boolean ignoreAbsentPartitions) - { - this.fileSystemView = HoodieTableFileSystemView - .fileListingBasedFileSystemView( - new HoodieLocalEngineContext(metaClient.getStorageConf()), - metaClient, - metaClient.getActiveTimeline().getCommitsTimeline().filterCompletedInstants(), - ignoreAbsentPartitions); - this.partitionColumns = hiveTable.getPartitionColumns(); - this.allPartitionInfoMap = hivePartitionNames.stream() - .collect(Collectors.toMap( - Function.identity(), - hivePartitionName -> new HiveHudiPartitionInfo( - hivePartitionName, - partitionColumns, - partitionColumnHandles, - tableHandle.getPartitionPredicates(), - hiveTable, - hiveMetastore))); - } - - @Override - public List listStatus(HudiPartitionInfo partitionInfo) - { - LOG.debug("List partition: partitionInfo=%s", partitionInfo); - return fileSystemView.getLatestBaseFiles(partitionInfo.getRelativePartitionPath()) - .map(HudiReadOptimizedDirectoryLister::getStoragePathInfo) - .map(fileEntry -> new HudiFileStatus( - Location.of(fileEntry.getPath().toString()), - false, - fileEntry.getLength(), - fileEntry.getModificationTime(), - max(fileEntry.getBlockSize(), min(fileEntry.getLength(), MIN_BLOCK_SIZE)))) - .collect(toImmutableList()); - } - - @Override - public Optional getPartitionInfo(String partition) - { - return Optional.ofNullable(allPartitionInfoMap.get(partition)); - } - - @Override - public void close() - { - if (fileSystemView != null && !fileSystemView.isClosed()) { - fileSystemView.close(); - } - } - - private static StoragePathInfo getStoragePathInfo(HoodieBaseFile baseFile) - { - if (baseFile.getBootstrapBaseFile().isPresent()) { - return baseFile.getBootstrapBaseFile().get().getPathInfo(); - } - return baseFile.getPathInfo(); - } -} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiSnapshotDirectoryLister.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiSnapshotDirectoryLister.java new file mode 100644 index 0000000000000..dfd7ef7d3c392 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/HudiSnapshotDirectoryLister.java @@ -0,0 +1,123 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.query; + +import com.google.common.collect.ImmutableList; +import io.airlift.log.Logger; +import io.trino.filesystem.Location; +import io.trino.metastore.Partition; +import io.trino.plugin.hudi.HudiTableHandle; +import io.trino.plugin.hudi.partition.HiveHudiPartitionInfo; +import io.trino.plugin.hudi.partition.HudiPartitionInfo; +import io.trino.plugin.hudi.query.index.HudiIndexSupport; +import io.trino.plugin.hudi.query.index.IndexSupportFactory; +import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.connector.SchemaTableName; +import org.apache.hudi.common.model.FileSlice; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.common.table.view.HoodieTableFileSystemView; +import org.apache.hudi.common.util.HoodieTimer; +import org.apache.hudi.metadata.HoodieTableMetadata; +import org.apache.hudi.util.Lazy; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import static com.google.common.collect.ImmutableList.toImmutableList; +import static io.trino.plugin.hudi.HudiUtil.getFileSystemView; + +public class HudiSnapshotDirectoryLister + implements HudiDirectoryLister +{ + private static final Logger log = Logger.get(HudiSnapshotDirectoryLister.class); + private final HudiTableHandle tableHandle; + private final Lazy lazyFileSystemView; + private final Lazy> lazyAllPartitionInfoMap; + private final Optional indexSupportOpt; + + public HudiSnapshotDirectoryLister( + ConnectorSession session, + HudiTableHandle tableHandle, + boolean enableMetadataTable, + Lazy lazyTableMetadata, + Lazy> lazyAllPartitions) + { + this.tableHandle = tableHandle; + SchemaTableName schemaTableName = tableHandle.getSchemaTableName(); + this.lazyFileSystemView = Lazy.lazily(() -> { + HoodieTimer timer = HoodieTimer.start(); + HoodieTableMetaClient metaClient = tableHandle.getMetaClient(); + HoodieTableFileSystemView fileSystemView = getFileSystemView(lazyTableMetadata.get(), metaClient); + if (enableMetadataTable) { + fileSystemView.loadAllPartitions(); + } + log.info("Created file system view of table %s in %s ms", schemaTableName, timer.endTimer()); + return fileSystemView; + }); + + this.lazyAllPartitionInfoMap = Lazy.lazily(() -> lazyAllPartitions.get().entrySet().stream() + .collect(Collectors.toMap( + Map.Entry::getKey, + e -> new HiveHudiPartitionInfo( + schemaTableName, + Location.of(tableHandle.getBasePath()), + e.getKey(), + e.getValue(), + tableHandle.getPartitionColumns(), + tableHandle.getPartitionPredicates())))); + Lazy lazyMetaClient = Lazy.lazily(tableHandle::getMetaClient); + this.indexSupportOpt = enableMetadataTable ? + IndexSupportFactory.createIndexSupport(schemaTableName, lazyMetaClient, lazyTableMetadata, tableHandle.getRegularPredicates(), session) : Optional.empty(); + } + + @Override + public List listStatus(HudiPartitionInfo partitionInfo, boolean useIndex) + { + HoodieTimer timer = HoodieTimer.start(); + Stream slices = lazyFileSystemView.get().getLatestFileSlicesBeforeOrOn( + partitionInfo.getRelativePartitionPath(), + tableHandle.getLatestCommitTime(), + false); + + if (!useIndex) { + return slices.collect(toImmutableList()); + } + + ImmutableList collect = slices + .filter(slice -> indexSupportOpt + .map(indexSupport -> !indexSupport.shouldSkipFileSlice(slice)) + .orElse(true)) + .collect(toImmutableList()); + log.info("Listed partition [%s] on table %s.%s in %s ms", + partitionInfo, tableHandle.getSchemaName(), tableHandle.getTableName(), timer.endTimer()); + return collect; + } + + @Override + public Optional getPartitionInfo(String partition) + { + return Optional.ofNullable(lazyAllPartitionInfoMap.get().get(partition)); + } + + @Override + public void close() + { + if (!lazyFileSystemView.get().isClosed()) { + lazyFileSystemView.get().close(); + } + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiBaseIndexSupport.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiBaseIndexSupport.java new file mode 100644 index 0000000000000..044908f9c49f4 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiBaseIndexSupport.java @@ -0,0 +1,66 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.query.index; + +import io.airlift.log.Logger; +import io.trino.spi.connector.SchemaTableName; +import org.apache.hudi.common.model.FileSlice; +import org.apache.hudi.common.model.HoodieIndexDefinition; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.util.Lazy; + +import java.util.List; +import java.util.Map; + +import static java.util.Objects.requireNonNull; + +public abstract class HudiBaseIndexSupport + implements HudiIndexSupport +{ + private final Logger log; + protected final SchemaTableName schemaTableName; + protected final Lazy lazyMetaClient; + + public HudiBaseIndexSupport(Logger log, SchemaTableName schemaTableName, Lazy lazyMetaClient) + { + this.log = requireNonNull(log, "log is null"); + this.schemaTableName = requireNonNull(schemaTableName, "schemaTableName is null"); + this.lazyMetaClient = requireNonNull(lazyMetaClient, "metaClient is null"); + } + + public void printDebugMessage(Map> candidateFileSlices, Map> inputFileSlices, long lookupDurationMs) + { + if (log.isDebugEnabled()) { + int candidateFileSize = candidateFileSlices.values().stream().mapToInt(List::size).sum(); + int totalFiles = inputFileSlices.values().stream().mapToInt(List::size).sum(); + double skippingPercent = totalFiles == 0 ? 0.0d : (totalFiles - candidateFileSize) / (totalFiles * 1.0d); + + log.info("Total files: %s; files after data skipping: %s; skipping percent %s; time taken: %s ms; table name: %s", + totalFiles, + candidateFileSize, + skippingPercent, + lookupDurationMs, + schemaTableName); + } + } + + protected Map getAllIndexDefinitions() + { + if (lazyMetaClient.get().getIndexMetadata().isEmpty()) { + return Map.of(); + } + + return lazyMetaClient.get().getIndexMetadata().get().getIndexDefinitions(); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiColumnStatsIndexSupport.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiColumnStatsIndexSupport.java new file mode 100644 index 0000000000000..72e46693ee928 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiColumnStatsIndexSupport.java @@ -0,0 +1,319 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.query.index; + +import com.google.common.collect.ImmutableList; +import io.airlift.log.Logger; +import io.airlift.slice.Slice; +import io.airlift.slice.Slices; +import io.airlift.units.Duration; +import io.trino.parquet.predicate.TupleDomainParquetPredicate; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hudi.util.TupleDomainUtils; +import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.connector.SchemaTableName; +import io.trino.spi.predicate.Domain; +import io.trino.spi.predicate.Range; +import io.trino.spi.predicate.TupleDomain; +import io.trino.spi.predicate.ValueSet; +import io.trino.spi.type.Type; +import io.trino.spi.type.VarcharType; +import org.apache.avro.generic.GenericRecord; +import org.apache.hudi.avro.model.HoodieMetadataColumnStats; +import org.apache.hudi.common.model.BaseFile; +import org.apache.hudi.common.model.FileSlice; +import org.apache.hudi.common.model.HoodieIndexDefinition; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.common.table.HoodieTableVersion; +import org.apache.hudi.common.util.HoodieTimer; +import org.apache.hudi.common.util.hash.ColumnIndexID; +import org.apache.hudi.metadata.HoodieTableMetadata; +import org.apache.hudi.metadata.HoodieTableMetadataUtil; +import org.apache.hudi.util.Lazy; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static io.trino.parquet.predicate.PredicateUtils.isStatisticsOverflow; +import static io.trino.plugin.hudi.HudiSessionProperties.getColumnStatsWaitTimeout; +import static io.trino.spi.type.BigintType.BIGINT; +import static io.trino.spi.type.BooleanType.BOOLEAN; +import static io.trino.spi.type.DateType.DATE; +import static io.trino.spi.type.DoubleType.DOUBLE; +import static io.trino.spi.type.IntegerType.INTEGER; +import static io.trino.spi.type.RealType.REAL; +import static io.trino.spi.type.SmallintType.SMALLINT; +import static io.trino.spi.type.TinyintType.TINYINT; +import static java.lang.Float.floatToRawIntBits; + +public class HudiColumnStatsIndexSupport + extends HudiBaseIndexSupport +{ + private static final Logger log = Logger.get(HudiColumnStatsIndexSupport.class); + private final CompletableFuture>>> statsByFileNameFuture; + protected final TupleDomain regularColumnPredicates; + private final List regularColumns; + private final Duration columnStatsWaitTimeout; + private final long futureStartTimeMs; + + public HudiColumnStatsIndexSupport(ConnectorSession session, SchemaTableName schemaTableName, Lazy lazyMetaClient, Lazy lazyTableMetadata, TupleDomain regularColumnPredicates) + { + this(log, session, schemaTableName, lazyMetaClient, lazyTableMetadata, regularColumnPredicates); + } + + public HudiColumnStatsIndexSupport(Logger log, ConnectorSession session, SchemaTableName schemaTableName, Lazy lazyMetaClient, Lazy lazyTableMetadata, TupleDomain regularColumnPredicates) + { + super(log, schemaTableName, lazyMetaClient); + this.columnStatsWaitTimeout = getColumnStatsWaitTimeout(session); + this.regularColumnPredicates = regularColumnPredicates.transformKeys(HiveColumnHandle::getName); + this.regularColumns = this.regularColumnPredicates + .getDomains().get().entrySet().stream().map(Map.Entry::getKey).collect(Collectors.toList()); + if (regularColumnPredicates.isAll() || !regularColumnPredicates.getDomains().isPresent()) { + this.statsByFileNameFuture = CompletableFuture.completedFuture(Optional.empty()); + } + else { + // Get filter columns + List encodedTargetColumnNames = regularColumns + .stream() + .map(col -> new ColumnIndexID(col).asBase64EncodedString()).collect(Collectors.toList()); + statsByFileNameFuture = CompletableFuture.supplyAsync(() -> { + HoodieTimer timer = HoodieTimer.start(); + if (!lazyMetaClient.get().getTableConfig().getMetadataPartitions() + .contains(HoodieTableMetadataUtil.PARTITION_NAME_COLUMN_STATS)) { + return Optional.empty(); + } + + Map> statsByFileName = + lazyTableMetadata.get().getRecordsByKeyPrefixes(encodedTargetColumnNames, + HoodieTableMetadataUtil.PARTITION_NAME_COLUMN_STATS, true) + .collectAsList() + .stream() + .filter(f -> f.getData().getColumnStatMetadata().isPresent()) + .map(f -> f.getData().getColumnStatMetadata().get()) + .collect(Collectors.groupingBy( + HoodieMetadataColumnStats::getFileName, + Collectors.toMap( + HoodieMetadataColumnStats::getColumnName, + Function.identity()))); + log.debug("Column stats lookup took %s ms and identified %d relevant file IDs.", timer.endTimer(), statsByFileName.size()); + + return Optional.of(statsByFileName); + }); + } + this.futureStartTimeMs = System.currentTimeMillis(); + } + + @Override + public boolean shouldSkipFileSlice(FileSlice slice) + { + try { + if (statsByFileNameFuture.isDone()) { + Optional>> statsOpt = statsByFileNameFuture.get(); + return statsOpt + .map(stats -> shouldSkipFileSlice(slice, stats, regularColumnPredicates, regularColumns)) + .orElse(false); + } + + long elapsedMs = System.currentTimeMillis() - futureStartTimeMs; + if (elapsedMs > columnStatsWaitTimeout.toMillis()) { + // Took too long; skip decision + return false; + } + + // If still within the timeout window, wait up to the remaining time + long remainingMs = Math.max(0, columnStatsWaitTimeout.toMillis() - elapsedMs); + Optional>> statsOpt = + statsByFileNameFuture.get(remainingMs, TimeUnit.MILLISECONDS); + + return statsOpt + .map(stats -> shouldSkipFileSlice(slice, stats, regularColumnPredicates, regularColumns)) + .orElse(false); + } + catch (TimeoutException | InterruptedException | ExecutionException e) { + return false; + } + } + + @Override + public boolean canApply(TupleDomain tupleDomain) + { + boolean isIndexSupported = isIndexSupportAvailable(); + // indexDefinition is only available after table version EIGHT + // For tables that have versions < EIGHT, column stats index is available as long as partition in metadata is available + if (!isIndexSupported || lazyMetaClient.get().getTableConfig().getTableVersion().lesserThan(HoodieTableVersion.EIGHT)) { + log.debug("Column Stats Index partition is not enabled in metadata."); + return isIndexSupported; + } + + Map indexDefinitions = getAllIndexDefinitions(); + HoodieIndexDefinition colStatsDefinition = indexDefinitions.get(HoodieTableMetadataUtil.PARTITION_NAME_COLUMN_STATS); + if (colStatsDefinition == null || colStatsDefinition.getSourceFields() == null || colStatsDefinition.getSourceFields().isEmpty()) { + log.warn("Column stats index definition is missing or has no source fields defined"); + return false; + } + + // Optimization applied: Only consider applicable if predicates reference indexed columns + List sourceFields = colStatsDefinition.getSourceFields(); + boolean applicable = TupleDomainUtils.areSomeFieldsReferenced(tupleDomain, sourceFields); + + if (applicable) { + log.debug("Column Stats Index is available and applicable (predicates reference indexed columns)."); + } + else { + log.debug("Column Stats Index is available, but predicates do not reference any indexed columns."); + } + return applicable; + } + + public boolean isIndexSupportAvailable() + { + return lazyMetaClient.get().getTableConfig().getMetadataPartitions() + .contains(HoodieTableMetadataUtil.PARTITION_NAME_COLUMN_STATS); + } + + // TODO: Move helper functions below to TupleDomain/DomainUtils + private static boolean shouldSkipFileSlice( + FileSlice fileSlice, + Map> statsByFileName, + TupleDomain regularColumnPredicates, + List regularColumns) + { + String fileSliceName = fileSlice.getBaseFile().map(BaseFile::getFileName).orElse(""); + // If no stats exist for this specific file, we cannot prune it. + if (!statsByFileName.containsKey(fileSliceName)) { + return false; + } + Map stats = statsByFileName.get(fileSliceName); + return !evaluateStatisticPredicate(regularColumnPredicates, stats, regularColumns); + } + + protected static boolean evaluateStatisticPredicate( + TupleDomain regularColumnPredicates, + Map stats, + List regularColumns) + { + if (regularColumnPredicates.isNone() || !regularColumnPredicates.getDomains().isPresent()) { + return true; + } + for (String regularColumn : regularColumns) { + Domain columnPredicate = regularColumnPredicates.getDomains().get().get(regularColumn); + Optional currentColumnStats = Optional.ofNullable(stats.get(regularColumn)); + if (currentColumnStats.isEmpty()) { + // No stats for column + } + else { + Domain domain = getDomain(regularColumn, columnPredicate.getType(), currentColumnStats.get()); + if (columnPredicate.intersect(domain).isNone()) { + return false; + } + } + } + return true; + } + + private static Domain getDomain(String colName, Type type, HoodieMetadataColumnStats statistics) + { + if (statistics == null) { + return Domain.all(type); + } + boolean hasNullValue = statistics.getNullCount() != 0L; + boolean hasNonNullValue = statistics.getValueCount() - statistics.getNullCount() > 0; + if (!hasNonNullValue || statistics.getMaxValue() == null || statistics.getMinValue() == null) { + return Domain.create(ValueSet.all(type), hasNullValue); + } + if (!(statistics.getMinValue() instanceof GenericRecord) || + !(statistics.getMaxValue() instanceof GenericRecord)) { + return Domain.all(type); + } + return getDomain(colName, type, ((GenericRecord) statistics.getMinValue()).get(0), + ((GenericRecord) statistics.getMaxValue()).get(0), hasNullValue); + } + + /** + * Get a domain for the ranges defined by each pair of elements from {@code minimums} and {@code maximums}. + * Both arrays must have the same length. + */ + private static Domain getDomain(String colName, Type type, Object minimum, Object maximum, boolean hasNullValue) + { + try { + if (type.equals(BOOLEAN)) { + boolean hasTrueValue = (boolean) minimum || (boolean) maximum; + boolean hasFalseValue = !(boolean) minimum || !(boolean) maximum; + if (hasTrueValue && hasFalseValue) { + return Domain.all(type); + } + if (hasTrueValue) { + return Domain.create(ValueSet.of(type, true), hasNullValue); + } + if (hasFalseValue) { + return Domain.create(ValueSet.of(type, false), hasNullValue); + } + // No other case, since all null case is handled earlier. + } + + if ((type.equals(BIGINT) || type.equals(TINYINT) || type.equals(SMALLINT) + || type.equals(INTEGER) || type.equals(DATE))) { + long minValue = TupleDomainParquetPredicate.asLong(minimum); + long maxValue = TupleDomainParquetPredicate.asLong(maximum); + if (isStatisticsOverflow(type, minValue, maxValue)) { + return Domain.create(ValueSet.all(type), hasNullValue); + } + return ofMinMax(type, minValue, maxValue, hasNullValue); + } + + if (type.equals(REAL)) { + Float minValue = (Float) minimum; + Float maxValue = (Float) maximum; + if (minValue.isNaN() || maxValue.isNaN()) { + return Domain.create(ValueSet.all(type), hasNullValue); + } + return ofMinMax(type, (long) floatToRawIntBits(minValue), (long) floatToRawIntBits(maxValue), hasNullValue); + } + + if (type.equals(DOUBLE)) { + Double minValue = (Double) minimum; + Double maxValue = (Double) maximum; + if (minValue.isNaN() || maxValue.isNaN()) { + return Domain.create(ValueSet.all(type), hasNullValue); + } + return ofMinMax(type, minValue, maxValue, hasNullValue); + } + + if (type.equals(VarcharType.VARCHAR)) { + Slice min = Slices.utf8Slice((String) minimum); + Slice max = Slices.utf8Slice((String) maximum); + return ofMinMax(type, min, max, hasNullValue); + } + return Domain.create(ValueSet.all(type), hasNullValue); + } + catch (Exception e) { + log.warn("failed to create Domain for column: %s which type is: %s", colName, type.toString()); + return Domain.create(ValueSet.all(type), hasNullValue); + } + } + + private static Domain ofMinMax(Type type, Object min, Object max, boolean hasNullValue) + { + Range range = Range.range(type, min, true, max, true); + ValueSet vs = ValueSet.ofRanges(ImmutableList.of(range)); + return Domain.create(vs, hasNullValue); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiIndexSupport.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiIndexSupport.java new file mode 100644 index 0000000000000..de33640f48904 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiIndexSupport.java @@ -0,0 +1,27 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.query.index; + +import io.trino.spi.predicate.TupleDomain; +import org.apache.hudi.common.model.FileSlice; + +public interface HudiIndexSupport +{ + boolean canApply(TupleDomain tupleDomain); + + default boolean shouldSkipFileSlice(FileSlice slice) + { + return false; + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiNoOpIndexSupport.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiNoOpIndexSupport.java new file mode 100644 index 0000000000000..e79eb342812b8 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiNoOpIndexSupport.java @@ -0,0 +1,40 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.query.index; + +import io.airlift.log.Logger; +import io.trino.spi.connector.SchemaTableName; +import io.trino.spi.predicate.TupleDomain; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.util.Lazy; + +/** + * Noop index support to ensure that MDT enabled split generation is entered. + */ +public class HudiNoOpIndexSupport + extends HudiBaseIndexSupport +{ + private static final Logger log = Logger.get(HudiNoOpIndexSupport.class); + + public HudiNoOpIndexSupport(SchemaTableName schemaTableName, Lazy lazyMetaClient) + { + super(log, schemaTableName, lazyMetaClient); + } + + @Override + public boolean canApply(TupleDomain tupleDomain) + { + return true; + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiPartitionStatsIndexSupport.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiPartitionStatsIndexSupport.java new file mode 100644 index 0000000000000..c2e98820fb6fe --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiPartitionStatsIndexSupport.java @@ -0,0 +1,146 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.query.index; + +import io.airlift.log.Logger; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hudi.util.TupleDomainUtils; +import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.connector.SchemaTableName; +import io.trino.spi.predicate.TupleDomain; +import org.apache.hudi.avro.model.HoodieMetadataColumnStats; +import org.apache.hudi.common.model.HoodieIndexDefinition; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.common.util.HoodieTimer; +import org.apache.hudi.common.util.hash.ColumnIndexID; +import org.apache.hudi.metadata.HoodieTableMetadata; +import org.apache.hudi.metadata.HoodieTableMetadataUtil; +import org.apache.hudi.util.Lazy; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Function; +import java.util.stream.Collectors; + +import static io.trino.plugin.hudi.util.TupleDomainUtils.hasSimpleNullCheck; + +public class HudiPartitionStatsIndexSupport + extends HudiColumnStatsIndexSupport +{ + private static final Logger log = Logger.get(HudiColumnStatsIndexSupport.class); + private final Lazy lazyMetadataTable; + + public HudiPartitionStatsIndexSupport(ConnectorSession session, SchemaTableName schemaTableName, Lazy lazyMetaClient, Lazy lazyTableMetadata, TupleDomain regularColumnPredicates) + { + super(log, session, schemaTableName, lazyMetaClient, lazyTableMetadata, regularColumnPredicates); + this.lazyMetadataTable = lazyTableMetadata; + } + + public Optional> prunePartitions( + List allPartitions) + { + HoodieTimer timer = HoodieTimer.start(); + + // Filter out predicates containing simple null checks (`IS NULL` or `IS NOT NULL`) + TupleDomain filteredRegularPredicates = regularColumnPredicates.filter((_, domain) -> !hasSimpleNullCheck(domain)); + + // Sanity check, if no regular domains, return immediately + if (filteredRegularPredicates.getDomains().isEmpty()) { + timer.endTimer(); + return Optional.empty(); + } + + List regularColumns = new ArrayList<>(filteredRegularPredicates.getDomains().get().keySet()); + + // Get columns to filter on + List encodedTargetColumnNames = regularColumns + .stream() + .map(col -> new ColumnIndexID(col).asBase64EncodedString()).toList(); + + // Map of partition stats keyed by partition name + Map> statsByPartitionName = lazyMetadataTable.get().getRecordsByKeyPrefixes( + encodedTargetColumnNames, + HoodieTableMetadataUtil.PARTITION_NAME_PARTITION_STATS, true) + .collectAsList() + .stream() + .filter(f -> f.getData().getColumnStatMetadata().isPresent()) + .map(f -> f.getData().getColumnStatMetadata().get()) + .collect(Collectors.groupingBy( + HoodieMetadataColumnStats::getFileName, + Collectors.toMap( + HoodieMetadataColumnStats::getColumnName, + Function.identity()))); + + // For each partition, determine if it should be kept based on stats availability and predicate evaluation + List prunedPartitions = allPartitions.stream() + .filter(partition -> { + // Check if stats exist for this partition + Map partitionStats = statsByPartitionName.get(partition); + if (partitionStats == null) { + // Partition has no stats in the index, keep it + return true; + } + else { + // Partition has stats, evaluate the predicate against them + // Keep the partition only if the predicate evaluates to true + // Important: If some columns in encodedTargetColumnNames is not available in partition stats, partition will not be pruned iff all available predicate + // evaluates to true. Since we cannot determine if the predicate will evaluate to true or not on the missing stat, adopt conservative measure to true, + // i.e. to not prune + return evaluateStatisticPredicate(filteredRegularPredicates, partitionStats, regularColumns); + } + }) + .collect(Collectors.toList()); + + log.info("Took %s ms to prune partitions using Partition Stats Index for table %s", timer.endTimer(), schemaTableName); + return Optional.of(prunedPartitions); + } + + @Override + public boolean isIndexSupportAvailable() + { + return lazyMetaClient.get().getTableConfig().getMetadataPartitions() + .contains(HoodieTableMetadataUtil.PARTITION_NAME_PARTITION_STATS); + } + + @Override + public boolean canApply(TupleDomain tupleDomain) + { + // Important: has the same implementation as col stats superclass, only difference is that log messages are different + if (!isIndexSupportAvailable()) { + log.debug("Partition Stats Index partition is not enabled in metadata table."); + return false; + } + + Map indexDefinitions = getAllIndexDefinitions(); + HoodieIndexDefinition partitionsStatsIndex = indexDefinitions.get(HoodieTableMetadataUtil.PARTITION_NAME_COLUMN_STATS); + if (partitionsStatsIndex == null || partitionsStatsIndex.getSourceFields() == null || partitionsStatsIndex.getSourceFields().isEmpty()) { + log.warn("Partition stats index definition is missing or has no source fields defined"); + return false; + } + + // Optimization applied: Only consider applicable if predicates reference indexed columns + List sourceFields = partitionsStatsIndex.getSourceFields(); + boolean applicable = TupleDomainUtils.areSomeFieldsReferenced(tupleDomain, sourceFields); + + if (applicable) { + log.debug("Partition Stats Index is available and applicable (predicates reference indexed columns)."); + } + else { + log.debug("Partition Stats Index is available, but predicates do not reference any indexed columns."); + } + return applicable; + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiRecordLevelIndexSupport.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiRecordLevelIndexSupport.java new file mode 100644 index 0000000000000..3c5e33f4e6a01 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiRecordLevelIndexSupport.java @@ -0,0 +1,327 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.query.index; + +import io.airlift.log.Logger; +import io.airlift.slice.Slice; +import io.airlift.units.Duration; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hudi.util.TupleDomainUtils; +import io.trino.spi.TrinoException; +import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.connector.SchemaTableName; +import io.trino.spi.predicate.Domain; +import io.trino.spi.predicate.TupleDomain; +import org.apache.hudi.common.model.FileSlice; +import org.apache.hudi.common.model.HoodieRecordGlobalLocation; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.common.util.HoodieTimer; +import org.apache.hudi.common.util.Option; +import org.apache.hudi.metadata.HoodieTableMetadata; +import org.apache.hudi.metadata.HoodieTableMetadataUtil; +import org.apache.hudi.util.Lazy; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Queue; +import java.util.Set; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeoutException; +import java.util.stream.Collectors; + +import static io.trino.plugin.hudi.HudiErrorCode.HUDI_BAD_DATA; +import static io.trino.plugin.hudi.HudiSessionProperties.getRecordIndexWaitTimeout; +import static java.util.concurrent.TimeUnit.MILLISECONDS; + +public class HudiRecordLevelIndexSupport + extends HudiBaseIndexSupport +{ + private static final Logger log = Logger.get(HudiRecordLevelIndexSupport.class); + + public static final String DEFAULT_COLUMN_VALUE_SEPARATOR = ":"; + public static final String DEFAULT_RECORD_KEY_PARTS_SEPARATOR = ","; + private final CompletableFuture>> relevantFileIdsFuture; + private final Duration recordIndexWaitTimeout; + private final long futureStartTimeMs; + + public HudiRecordLevelIndexSupport(ConnectorSession session, SchemaTableName schemaTableName, Lazy lazyMetaClient, Lazy lazyTableMetadata, TupleDomain regularColumnPredicates) + { + super(log, schemaTableName, lazyMetaClient); + this.recordIndexWaitTimeout = getRecordIndexWaitTimeout(session); + if (regularColumnPredicates.isAll()) { + log.debug("Predicates cover all data, skipping record level index lookup."); + this.relevantFileIdsFuture = CompletableFuture.completedFuture(Optional.empty()); + } + else { + this.relevantFileIdsFuture = CompletableFuture.supplyAsync(() -> { + HoodieTimer timer = HoodieTimer.start(); + Option recordKeyFieldsOpt = lazyMetaClient.get().getTableConfig().getRecordKeyFields(); + if (recordKeyFieldsOpt.isEmpty() || recordKeyFieldsOpt.get().length == 0) { + // Should not happen since canApply checks for this, include for safety + throw new TrinoException(HUDI_BAD_DATA, "Record key fields must be defined to use Record Level Index."); + } + List recordKeyFields = Arrays.asList(recordKeyFieldsOpt.get()); + + TupleDomain regularPredicatesTransformed = regularColumnPredicates.transformKeys(HiveColumnHandle::getName); + // Only extract the predicates relevant to the record key fields + TupleDomain filteredDomains = extractPredicatesForColumns(regularPredicatesTransformed, recordKeyFields); + + // Construct the actual record keys based on the filtered predicates using Hudi's encoding scheme + List recordKeys = constructRecordKeys(filteredDomains, recordKeyFields); + + if (recordKeys.isEmpty()) { + // If key construction fails (e.g., incompatible predicates not caught by canApply, or placeholder issue) + log.warn("Took %s ms, but could not construct record keys from predicates. Skipping record index pruning for table %s", + timer.endTimer(), schemaTableName); + return Optional.empty(); + } + log.debug(String.format("Constructed %d record keys for index lookup.", recordKeys.size())); + + // Perform index lookup in metadataTable + // TODO: document here what this map is keyed by + Map recordIndex = lazyTableMetadata.get().readRecordIndex(recordKeys); + if (recordIndex.isEmpty()) { + log.debug("Record level index lookup took %s ms but returned no locations for the given keys %s for table %s", + timer.endTimer(), recordKeys, schemaTableName); + // Return all original fileSlices + return Optional.empty(); + } + + // Collect fileIds for pruning + Set relevantFiles = recordIndex.values().stream() + .map(HoodieRecordGlobalLocation::getFileId) + .collect(Collectors.toSet()); + log.debug("Record level index lookup took %s ms and identified %d relevant file IDs.", timer.endTimer(), relevantFiles.size()); + + return Optional.of(relevantFiles); + }); + } + this.futureStartTimeMs = System.currentTimeMillis(); + } + + @Override + public boolean shouldSkipFileSlice(FileSlice slice) + { + try { + if (relevantFileIdsFuture.isDone()) { + Optional> relevantFileIds = relevantFileIdsFuture.get(); + return relevantFileIds.map(fileIds -> !fileIds.contains(slice.getFileId())).orElse(false); + } + + long elapsedMs = System.currentTimeMillis() - futureStartTimeMs; + if (elapsedMs > recordIndexWaitTimeout.toMillis()) { + // Took too long; skip decision + return false; + } + + long remainingMs = Math.max(0, recordIndexWaitTimeout.toMillis() - elapsedMs); + Optional> relevantFileIds = relevantFileIdsFuture.get(remainingMs, MILLISECONDS); + return relevantFileIds.map(fileIds -> !fileIds.contains(slice.getFileId())).orElse(false); + } + catch (TimeoutException | InterruptedException | ExecutionException e) { + return false; + } + } + + /** + * Checks if the Record Level Index is available and the query predicates + * reference all record key fields with compatible (IN/EQUAL) constraints. + */ + @Override + public boolean canApply(TupleDomain tupleDomain) + { + if (!isIndexSupportAvailable()) { + log.debug("Record Level Index partition is not enabled in metadata."); + return false; + } + + Option recordKeyFieldsOpt = lazyMetaClient.get().getTableConfig().getRecordKeyFields(); + if (recordKeyFieldsOpt.isEmpty() || recordKeyFieldsOpt.get().length == 0) { + log.debug("Record key fields are not defined in table config."); + return false; + } + List recordKeyFields = Arrays.asList(recordKeyFieldsOpt.get()); + + // Ensure that predicates reference all record key fields and use IN/EQUAL + boolean applicable = TupleDomainUtils.areAllFieldsReferenced(tupleDomain, recordKeyFields) + && TupleDomainUtils.areDomainsInOrEqualOnly(tupleDomain, recordKeyFields); + + if (!applicable) { + log.debug("Predicates do not reference all record key fields or use non-compatible (non IN/EQUAL) constraints."); + } + else { + log.debug("Record Level Index is available and applicable based on predicates."); + } + return applicable; + } + + private boolean isIndexSupportAvailable() + { + return lazyMetaClient.get().getTableConfig().getMetadataPartitions() + .contains(HoodieTableMetadataUtil.PARTITION_NAME_RECORD_INDEX); + } + + /** + * Extracts predicates from a TupleDomain that match a given set of columns. + * Preserves all complex predicate properties including multi-value domains, + * range-based predicates, and nullability. + * + * @param tupleDomain The source TupleDomain containing all predicates + * @param columnFields The set of columns for which to extract predicates + * @return A new TupleDomain containing only the predicates for the specified columns + */ + public static TupleDomain extractPredicatesForColumns(TupleDomain tupleDomain, List columnFields) + { + if (tupleDomain.isNone()) { + return TupleDomain.none(); + } + + if (tupleDomain.isAll()) { + return TupleDomain.all(); + } + + // Extract the domains matching the specified columns + Map allDomains = tupleDomain.getDomains().get(); + Map filteredDomains = allDomains.entrySet().stream().filter(entry -> columnFields.contains(entry.getKey())) // Ensure key is in the column set + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + + // If no domains matched, but we had some columns to extract, return ALL + if (filteredDomains.isEmpty() && !columnFields.isEmpty() && !allDomains.isEmpty()) { + return TupleDomain.all(); + } + + return TupleDomain.withColumnDomains(filteredDomains); + } + + /** + * Constructs a record key from TupleDomain based on whether it's a complex key or not. + *

+ * Construction of record keys will only be handled for domains generated from EQUALITY or IN predicates. + *

+ * An empty list of record keys will be generated if the following conditions are not met: + *

    + *
  1. recordKeysFields is empty
  2. + *
  3. recordKeyDomains isAll
  4. + *
  5. For the case of complex key, domains are not applied to all recordKeysFields
  6. + *
  7. For the case of complex key, domains are applied to all recordKeyFields, but one of the domain is NOT + * generated from an equality or IN predicate
  8. + *
+ *

+ * Note: This function is O(m^n) where m is the average size of value literals and n is the number of record keys. + *

+ * Optimization 1: If MDT enabled functions allows for streams to be passed in, we can implement an iterator to be more memory efficient. + *

+ * Optimization 2: We should also consider limiting the number of recordKeys generated, if it is estimated to be more than a limit, RLI should just be skipped + * as it may just be faster to read out all data and filer accordingly. + * + * @param recordKeyDomains The filtered TupleDomain containing column handles and values + * @param recordKeyFields List of column names that represent the record keys + * @return List of string values representing the record key(s) + */ + public static List constructRecordKeys(TupleDomain recordKeyDomains, List recordKeyFields) + { + // TODO: Move this to TupleDomainUtils + // If no recordKeys or no recordKeyDomains, return empty list + if (recordKeyFields == null || recordKeyFields.isEmpty() || recordKeyDomains.isAll()) { + return Collections.emptyList(); + } + + // All recordKeys must have a domain else, return empty list (applicable to complexKeys) + // If a one of the recordKey in the set of complexKeys does not have a domain, we are unable to construct + // a complete complexKey + if (!recordKeyDomains.getDomains().get().keySet().containsAll(recordKeyFields)) { + return Collections.emptyList(); + } + + // Extract the domain mappings from the tuple domain + Map domains = recordKeyDomains.getDomains().get(); + + // Case 1: Not a complex key (single record key) + if (recordKeyFields.size() == 1) { + String recordKey = recordKeyFields.getFirst(); + + // Extract value for this key + Domain domain = domains.get(recordKey); + return extractStringValues(domain); + } + // Case 2: Complex/Composite key (multiple record keys) + else { + // Create a queue to manage the Cartesian product generation + Queue results = new LinkedList<>(); + + // For each key in the complex key + for (String recordKeyField : recordKeyFields) { + // Extract value for this key + Domain domain = domains.get(recordKeyField); + List values = extractStringValues(domain); + // First iteration: initialize the queue + if (results.isEmpty()) { + values.forEach(v -> results.offer(recordKeyField + DEFAULT_COLUMN_VALUE_SEPARATOR + v)); + } + else { + int size = results.size(); + for (int j = 0; j < size; j++) { + String currentEntry = results.poll(); + + // Generate new combinations by appending keyParts to existing keyParts + for (String v : values) { + String newKeyPart = recordKeyField + DEFAULT_COLUMN_VALUE_SEPARATOR + v; + String newEntry = currentEntry + DEFAULT_RECORD_KEY_PARTS_SEPARATOR + newKeyPart; + results.offer(newEntry); + } + } + } + } + return results.stream().toList(); + } + } + + /** + * Extract string values from a domain, handle EQUAL and IN domains only. + * Note: Actual implementation depends on your Domain class structure. + */ + private static List extractStringValues(Domain domain) + { + List values = new ArrayList<>(); + + if (domain.isSingleValue()) { + // Handle EQUAL condition (single value domain) + Object value = domain.getSingleValue(); + values.add(convertToString(value)); + } + else if (domain.getValues().isDiscreteSet()) { + // Handle IN condition (set of discrete values) + for (Object value : domain.getValues().getDiscreteSet()) { + values.add(convertToString(value)); + } + } + return values; + } + + private static String convertToString(Object value) + { + if (value instanceof Slice) { + return ((Slice) value).toStringUtf8(); + } + else { + return value.toString(); + } + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiSecondaryIndexSupport.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiSecondaryIndexSupport.java new file mode 100644 index 0000000000000..d078c9e6e9f6e --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/HudiSecondaryIndexSupport.java @@ -0,0 +1,232 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.query.index; + +import io.airlift.log.Logger; +import io.airlift.units.Duration; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hudi.util.TupleDomainUtils; +import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.connector.SchemaTableName; +import io.trino.spi.predicate.TupleDomain; +import org.apache.hudi.common.model.FileSlice; +import org.apache.hudi.common.model.HoodieIndexDefinition; +import org.apache.hudi.common.model.HoodieRecordGlobalLocation; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.common.util.HoodieTimer; +import org.apache.hudi.metadata.HoodieTableMetadata; +import org.apache.hudi.metadata.HoodieTableMetadataUtil; +import org.apache.hudi.util.Lazy; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeoutException; +import java.util.stream.Collectors; + +import static io.trino.plugin.hudi.HudiSessionProperties.getSecondaryIndexWaitTimeout; +import static io.trino.plugin.hudi.query.index.HudiRecordLevelIndexSupport.constructRecordKeys; +import static io.trino.plugin.hudi.query.index.HudiRecordLevelIndexSupport.extractPredicatesForColumns; +import static java.util.concurrent.TimeUnit.MILLISECONDS; + +public class HudiSecondaryIndexSupport + extends HudiBaseIndexSupport +{ + private static final Logger log = Logger.get(HudiSecondaryIndexSupport.class); + private final CompletableFuture>> relevantFileIdsFuture; + private final Duration secondaryIndexWaitTimeout; + private final long futureStartTimeMs; + + public HudiSecondaryIndexSupport(ConnectorSession session, SchemaTableName schemaTableName, Lazy lazyMetaClient, Lazy lazyTableMetadata, TupleDomain regularColumnPredicates) + { + super(log, schemaTableName, lazyMetaClient); + this.secondaryIndexWaitTimeout = getSecondaryIndexWaitTimeout(session); + TupleDomain regularPredicatesTransformed = regularColumnPredicates.transformKeys(HiveColumnHandle::getName); + this.relevantFileIdsFuture = CompletableFuture.supplyAsync(() -> { + HoodieTimer timer = HoodieTimer.start(); + if (regularColumnPredicates.isAll() || lazyMetaClient.get().getIndexMetadata().isEmpty()) { + log.debug("Predicates cover all data, skipping secondary index lookup."); + return Optional.empty(); + } + + Optional> firstApplicableIndex = findFirstApplicableSecondaryIndex(regularPredicatesTransformed); + if (firstApplicableIndex.isEmpty()) { + log.debug("Took %s ms but no secondary index definition found matching the query's referenced columns for table %s", + timer.endTimer(), schemaTableName); + return Optional.empty(); + } + + Map.Entry applicableIndexEntry = firstApplicableIndex.get(); + String indexName = applicableIndexEntry.getKey(); + // `indexedColumns` should only contain one element as secondary indices only support one column + List indexedColumns = applicableIndexEntry.getValue().getSourceFields(); + log.debug(String.format("Using secondary index '%s' on columns %s for pruning.", indexName, indexedColumns)); + TupleDomain indexPredicates = extractPredicatesForColumns(regularPredicatesTransformed, indexedColumns); + + List secondaryKeys = constructRecordKeys(indexPredicates, indexedColumns); + if (secondaryKeys.isEmpty()) { + log.warn("Took %s ms, but could not construct secondary keys for index '%s' from predicates. Skipping pruning for table %s", + timer.endTimer(), indexName, schemaTableName); + return Optional.empty(); + } + log.debug(String.format("Constructed %d secondary keys for index lookup.", secondaryKeys.size())); + + // Perform index lookup in metadataTable + // TODO: document here what this map is keyed by + Map recordKeyLocationsMap = lazyTableMetadata.get().readSecondaryIndex(secondaryKeys, indexName); + if (recordKeyLocationsMap.isEmpty()) { + log.debug("Took %s ms, but secondary index lookup returned no locations for the given keys for table %s", timer.endTimer(), schemaTableName); + // Return all original fileSlices + return Optional.empty(); + } + + // Collect fileIds for pruning + Set relevantFileIds = recordKeyLocationsMap.values().stream() + .map(HoodieRecordGlobalLocation::getFileId) + .collect(Collectors.toSet()); + log.debug(String.format("Secondary index lookup identified %d relevant file IDs.", relevantFileIds.size())); + + return Optional.of(relevantFileIds); + }); + + this.futureStartTimeMs = System.currentTimeMillis(); + } + + @Override + public boolean shouldSkipFileSlice(FileSlice slice) + { + try { + if (relevantFileIdsFuture.isDone()) { + Optional> relevantFileIds = relevantFileIdsFuture.get(); + return relevantFileIds.map(fileIds -> !fileIds.contains(slice.getFileId())).orElse(false); + } + + long elapsedMs = System.currentTimeMillis() - futureStartTimeMs; + if (elapsedMs > secondaryIndexWaitTimeout.toMillis()) { + // Took too long; skip decision + return false; + } + + long remainingMs = Math.max(0, secondaryIndexWaitTimeout.toMillis() - elapsedMs); + Optional> relevantFileIds = relevantFileIdsFuture.get(remainingMs, MILLISECONDS); + return relevantFileIds.map(fileIds -> !fileIds.contains(slice.getFileId())).orElse(false); + } + catch (TimeoutException | InterruptedException | ExecutionException e) { + return false; + } + } + + /** + * Determines whether secondary index (SI) should be used based on the given tuple domain and index definitions. + *

+ * This method first filters out the secondary index definitions from the provided map of index definitions. + * It then checks if there are any secondary indices defined. If no secondary indices are found, it returns {@code false}. + *

+ * For each secondary index definition, the method verifies two conditions: + *

    + *
  1. All fields referenced in the tuple domain must be part of the source fields of the secondary index.
  2. + *
  3. The predicates on these fields must be either of type IN or EQUAL.
  4. + *
+ *

+ * If at least one secondary index definition meets these conditions, the method returns {@code true}; otherwise, + * it returns {@code false}. + * + * @param tupleDomain the domain representing the constraints on the columns + * HoodieIndexDefinition object + * @return {@code true} if at least one secondary index can be used based on the given tuple domain; otherwise, + * {@code false} + */ + @Override + public boolean canApply(TupleDomain tupleDomain) + { + if (!isIndexSupportAvailable()) { + log.debug("Secondary Index partition is not enabled in metadata."); + return false; + } + + Map secondaryIndexDefinitions = getApplicableIndexDefinitions(tupleDomain, true); + if (secondaryIndexDefinitions.isEmpty()) { + log.debug("No applicable secondary index definitions found."); + return false; + } + + boolean atLeastOneIndexUsable = secondaryIndexDefinitions.values().stream() + .anyMatch(indexDef -> { + List sourceFields = indexDef.getSourceFields(); + // Predicates referencing columns with secondary index needs to be IN or EQUAL only + boolean usable = TupleDomainUtils.areAllFieldsReferenced(tupleDomain, sourceFields) + && TupleDomainUtils.areDomainsInOrEqualOnly(tupleDomain, sourceFields); + if (log.isDebugEnabled() && usable) { + log.debug(String.format("Secondary index '%s' on fields '%s' is usable for the query.", indexDef.getIndexName(), sourceFields)); + } + return usable; + }); + if (!atLeastOneIndexUsable) { + log.debug("Although secondary indexes exist, none match the required fields and predicate types (IN/EQUAL) for the query."); + } + return atLeastOneIndexUsable; + } + + private boolean isIndexSupportAvailable() + { + // Filter out definitions that are secondary indices + Map secondaryIndexDefinitions = getAllIndexDefinitions() + .entrySet().stream() + .filter(e -> e.getKey().contains(HoodieTableMetadataUtil.PARTITION_NAME_SECONDARY_INDEX)) + .collect(Collectors.toMap(e -> e.getValue().getIndexName(), + Map.Entry::getValue)); + return !secondaryIndexDefinitions.isEmpty(); + } + + private Map getApplicableIndexDefinitions(TupleDomain tupleDomain, boolean checkPredicateCompatibility) + { + Map allDefinitions = getAllIndexDefinitions(); + if (allDefinitions.isEmpty()) { + return Map.of(); + } + // Filter out definitions that are secondary indices + return allDefinitions.entrySet().stream() + .filter(entry -> entry.getKey().contains(HoodieTableMetadataUtil.PARTITION_NAME_SECONDARY_INDEX)) + .filter(entry -> { + if (!checkPredicateCompatibility) { + return true; + } + // Perform additional compatibility checks + List sourceFields = entry.getValue().getSourceFields(); + return TupleDomainUtils.areAllFieldsReferenced(tupleDomain, sourceFields) + && TupleDomainUtils.areDomainsInOrEqualOnly(tupleDomain, sourceFields); + }) + .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); + } + + private Optional> findFirstApplicableSecondaryIndex(TupleDomain queryPredicates) + { + // Predicate checks would have already been done, skip predicate checks here + Map secondaryIndexDefinitions = getApplicableIndexDefinitions(queryPredicates, false); + if (queryPredicates.getDomains().isEmpty()) { + return Optional.empty(); + } + List queryReferencedColumns = List.copyOf(queryPredicates.getDomains().get().keySet()); + return secondaryIndexDefinitions.entrySet().stream() + .filter(entry -> { + List sourceFields = entry.getValue().getSourceFields(); + // Only filter for sourceFields that match the predicates + return !sourceFields.isEmpty() && queryReferencedColumns.contains(sourceFields.getFirst()); + }) + .findFirst(); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/IndexSupportFactory.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/IndexSupportFactory.java new file mode 100644 index 0000000000000..ab78e7662eb2b --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/query/index/IndexSupportFactory.java @@ -0,0 +1,148 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.query.index; + +import io.airlift.log.Logger; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.connector.SchemaTableName; +import io.trino.spi.predicate.TupleDomain; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.metadata.HoodieTableMetadata; +import org.apache.hudi.util.Lazy; + +import java.util.List; +import java.util.Optional; +import java.util.function.Supplier; + +import static io.trino.plugin.hudi.HudiSessionProperties.isColumnStatsIndexEnabled; +import static io.trino.plugin.hudi.HudiSessionProperties.isNoOpIndexEnabled; +import static io.trino.plugin.hudi.HudiSessionProperties.isPartitionStatsIndexEnabled; +import static io.trino.plugin.hudi.HudiSessionProperties.isRecordLevelIndexEnabled; +import static io.trino.plugin.hudi.HudiSessionProperties.isSecondaryIndexEnabled; +import static java.util.Objects.requireNonNull; + +/** + * Factory to create the appropriate HudiIndexSupport strategy based on: + * 1. Query predicates + * 2. Available table indexes + * 3. Configuration flags + */ +public class IndexSupportFactory +{ + private static final Logger log = Logger.get(IndexSupportFactory.class); + + private IndexSupportFactory() {} + + /** + * Creates the most suitable HudiIndexSupport strategy, considering configuration. + * Uses Supplier-based lazy instantiation combined with config checks. + * + * @param schemaTableName The table schema and name + * @param lazyMetaClient The Hudi table metadata client that is lazily instantiated. + * @param tupleDomain The query predicates. + * @param session Session containing session properties, which is required to control index behaviours for testing/debugging + * @return An Optional containing the chosen HudiIndexSupport strategy, or empty if none are applicable or enabled. + */ + public static Optional createIndexSupport( + SchemaTableName schemaTableName, + Lazy lazyMetaClient, + Lazy lazyTableMetadata, + TupleDomain tupleDomain, + ConnectorSession session) + { + // Define strategies as Suppliers paired with their config (isEnabled) flag + // IMPORTANT: Order of strategy here determines which index implementation is preferred first + List strategyProviders = List.of( + new StrategyProvider( + () -> isRecordLevelIndexEnabled(session), + () -> new HudiRecordLevelIndexSupport(session, schemaTableName, lazyMetaClient, lazyTableMetadata, tupleDomain)), + new StrategyProvider( + () -> isSecondaryIndexEnabled(session), + () -> new HudiSecondaryIndexSupport(session, schemaTableName, lazyMetaClient, lazyTableMetadata, tupleDomain)), + new StrategyProvider( + () -> isColumnStatsIndexEnabled(session), + () -> new HudiColumnStatsIndexSupport(session, schemaTableName, lazyMetaClient, lazyTableMetadata, tupleDomain)), + new StrategyProvider( + () -> isNoOpIndexEnabled(session), + () -> new HudiNoOpIndexSupport(schemaTableName, lazyMetaClient))); + + TupleDomain transformedTupleDomain = tupleDomain.transformKeys(HiveColumnHandle::getName); + for (StrategyProvider provider : strategyProviders) { + // Check if the strategy is enabled via config before instantiating + if (provider.isEnabled()) { + HudiIndexSupport strategy = provider.getStrategy(); + String strategyName = strategy.getClass().getSimpleName(); // Get name for logging + + // Check if the instantiated strategy is applicable + if (strategy.canApply(transformedTupleDomain)) { + log.debug(String.format("Selected %s strategy (Enabled & Applicable).", strategyName)); + return Optional.of(strategy); + } + else { + log.debug(String.format("%s is enabled but not applicable for this query.", strategyName)); + // Strategy object becomes eligible for GC here, acceptable penalty as the object is lightweight + } + } + else { + log.debug(String.format("Strategy associated with supplier %s is disabled by configuration.", provider.supplier.get().getClass().getSimpleName())); + } + } + + log.debug("No suitable and enabled index support strategy found to be applicable."); + return Optional.empty(); + } + + public static Optional createPartitionStatsIndexSupport( + SchemaTableName schemaTableName, + Lazy lazyMetaClient, + Lazy lazyTableMetadata, + TupleDomain tupleDomain, + ConnectorSession session) + { + StrategyProvider partitionStatsStrategy = new StrategyProvider( + () -> isPartitionStatsIndexEnabled(session), () -> new HudiPartitionStatsIndexSupport(session, schemaTableName, lazyMetaClient, lazyTableMetadata, tupleDomain)); + + TupleDomain transformedTupleDomain = tupleDomain.transformKeys(HiveColumnHandle::getName); + if (partitionStatsStrategy.isEnabled() && partitionStatsStrategy.getStrategy().canApply(transformedTupleDomain)) { + return Optional.of((HudiPartitionStatsIndexSupport) partitionStatsStrategy.getStrategy()); + } + return Optional.empty(); + } + + /** + * Helper class to pair the configuration check with the strategy supplier to allow for lazy initialization. + */ + private static class StrategyProvider + { + private final Supplier isEnabled; + private final Supplier supplier; + + StrategyProvider(Supplier isEnabled, Supplier supplier) + { + this.isEnabled = requireNonNull(isEnabled); + this.supplier = requireNonNull(supplier); + } + + boolean isEnabled() + { + return isEnabled.get(); + } + + HudiIndexSupport getStrategy() + { + return supplier.get(); + } + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/reader/HudiTrinoReaderContext.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/reader/HudiTrinoReaderContext.java new file mode 100644 index 0000000000000..4607d80a3469d --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/reader/HudiTrinoReaderContext.java @@ -0,0 +1,227 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.reader; + +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hudi.util.HudiAvroSerializer; +import io.trino.plugin.hudi.util.SynthesizedColumnHandler; +import io.trino.spi.Page; +import io.trino.spi.connector.ConnectorPageSource; +import org.apache.avro.Schema; +import org.apache.avro.generic.GenericData; +import org.apache.avro.generic.GenericData.Record; +import org.apache.avro.generic.GenericRecord; +import org.apache.avro.generic.IndexedRecord; +import org.apache.hudi.common.config.RecordMergeMode; +import org.apache.hudi.common.engine.HoodieReaderContext; +import org.apache.hudi.common.model.HoodieAvroIndexedRecord; +import org.apache.hudi.common.model.HoodieAvroRecordMerger; +import org.apache.hudi.common.model.HoodieEmptyRecord; +import org.apache.hudi.common.model.HoodieKey; +import org.apache.hudi.common.model.HoodieRecord; +import org.apache.hudi.common.model.HoodieRecordMerger; +import org.apache.hudi.common.table.read.BufferedRecord; +import org.apache.hudi.common.util.Option; +import org.apache.hudi.common.util.collection.ClosableIterator; +import org.apache.hudi.storage.HoodieStorage; +import org.apache.hudi.storage.StoragePath; + +import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.UnaryOperator; + +public class HudiTrinoReaderContext + extends HoodieReaderContext +{ + ConnectorPageSource pageSource; + private final HudiAvroSerializer avroSerializer; + Map colToPosMap; + List dataHandles; + List columnHandles; + + public HudiTrinoReaderContext( + ConnectorPageSource pageSource, + List dataHandles, + List columnHandles, + SynthesizedColumnHandler synthesizedColumnHandler) + { + this.pageSource = pageSource; + this.avroSerializer = new HudiAvroSerializer(columnHandles, synthesizedColumnHandler); + this.dataHandles = dataHandles; + this.columnHandles = columnHandles; + this.colToPosMap = new HashMap<>(); + for (int i = 0; i < columnHandles.size(); i++) { + HiveColumnHandle handle = columnHandles.get(i); + colToPosMap.put(handle.getBaseColumnName(), i); + } + } + + @Override + public ClosableIterator getFileRecordIterator( + StoragePath storagePath, + long start, + long length, + Schema dataSchema, + Schema requiredSchema, + HoodieStorage storage) + { + return new ClosableIterator<>() + { + private Page currentPage; + private int currentPosition; + + @Override + public void close() + { + try { + pageSource.close(); + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + + @Override + public boolean hasNext() + { + // If all records in the current page are consume, try to get next page + if (currentPage == null || currentPosition >= currentPage.getPositionCount()) { + if (pageSource.isFinished()) { + return false; + } + + // Get next page and reset currentPosition + currentPage = pageSource.getNextPage(); + currentPosition = 0; + + // If no more pages are available + return currentPage != null; + } + + return true; + } + + @Override + public IndexedRecord next() + { + if (!hasNext()) { + // TODO: This can probably be removed or ignored, added this as a sanity check + throw new RuntimeException("No more records in the iterator"); + } + + IndexedRecord record = avroSerializer.serialize(currentPage, currentPosition); + currentPosition++; + return record; + } + }; + } + + @Override + public IndexedRecord convertAvroRecord(IndexedRecord record) + { + return record; + } + + @Override + public GenericRecord convertToAvroRecord(IndexedRecord record, Schema schema) + { + GenericRecord ret = new Record(schema); + for (Schema.Field field : schema.getFields()) { + ret.put(field.name(), record.get(field.pos())); + } + return ret; + } + + @Override + public Option getRecordMerger(RecordMergeMode mergeMode, String mergeStrategyId, String mergeImplClasses) + { + return Option.of(HoodieAvroRecordMerger.INSTANCE); + } + + @Override + public Object getValue(IndexedRecord record, Schema schema, String fieldName) + { + if (colToPosMap.containsKey(fieldName)) { + return record.get(colToPosMap.get(fieldName)); + } + else { + // record doesn't have the queried field, return null + return null; + } + } + + @Override + public IndexedRecord seal(IndexedRecord record) + { + // TODO: this can rely on colToPos map directly instead of schema + Schema schema = record.getSchema(); + IndexedRecord newRecord = new Record(schema); + List fields = schema.getFields(); + for (Schema.Field field : fields) { + int pos = schema.getField(field.name()).pos(); + newRecord.put(pos, record.get(pos)); + } + return newRecord; + } + + @Override + public IndexedRecord toBinaryRow(Schema schema, IndexedRecord record) + { + return record; + } + + @Override + public ClosableIterator mergeBootstrapReaders( + ClosableIterator closableIterator, Schema schema, + ClosableIterator closableIterator1, Schema schema1) + { + return null; + } + + @Override + public UnaryOperator projectRecord( + Schema from, + Schema to, + Map renamedColumns) + { + List toFields = to.getFields(); + int[] projection = new int[toFields.size()]; + for (int i = 0; i < projection.length; i++) { + projection[i] = from.getField(toFields.get(i).name()).pos(); + } + + return fromRecord -> { + IndexedRecord toRecord = new Record(to); + for (int i = 0; i < projection.length; i++) { + toRecord.put(i, fromRecord.get(projection[i])); + } + return toRecord; + }; + } + + @Override + public HoodieRecord constructHoodieRecord( + BufferedRecord bufferedRecord) + { + if (bufferedRecord.isDelete()) { + return new HoodieEmptyRecord<>( + new HoodieKey(bufferedRecord.getRecordKey(), null), + HoodieRecord.HoodieRecordType.AVRO); + } + + return new HoodieAvroIndexedRecord(bufferedRecord.getRecord()); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/reader/HudiTrinoRecord.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/reader/HudiTrinoRecord.java new file mode 100644 index 0000000000000..7fa0f71399edc --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/reader/HudiTrinoRecord.java @@ -0,0 +1,183 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.reader; + +import com.esotericsoftware.kryo.Kryo; +import com.esotericsoftware.kryo.io.Input; +import com.esotericsoftware.kryo.io.Output; +import org.apache.avro.Schema; +import org.apache.avro.generic.IndexedRecord; +import org.apache.hudi.common.model.HoodieAvroIndexedRecord; +import org.apache.hudi.common.model.HoodieKey; +import org.apache.hudi.common.model.HoodieOperation; +import org.apache.hudi.common.model.HoodieRecord; +import org.apache.hudi.common.model.MetadataValues; +import org.apache.hudi.common.util.Option; +import org.apache.hudi.common.util.collection.Pair; +import org.apache.hudi.keygen.BaseKeyGenerator; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Map; +import java.util.Properties; + +public class HudiTrinoRecord + extends HoodieRecord +{ + public HudiTrinoRecord() + { + } + + @Override + public HoodieRecord newInstance() + { + return null; + } + + @Override + public HoodieRecord newInstance(HoodieKey hoodieKey, HoodieOperation hoodieOperation) + { + return null; + } + + @Override + public HoodieRecord newInstance(HoodieKey hoodieKey) + { + return null; + } + + @Override + public Comparable doGetOrderingValue(Schema schema, Properties properties) + { + return null; + } + + @Override + public HoodieRecordType getRecordType() + { + return null; + } + + @Override + public String getRecordKey(Schema schema, Option option) + { + return ""; + } + + @Override + public String getRecordKey(Schema schema, String s) + { + return ""; + } + + @Override + protected void writeRecordPayload(IndexedRecord page, Kryo kryo, Output output) + { + } + + @Override + protected IndexedRecord readRecordPayload(Kryo kryo, Input input) + { + return null; + } + + @Override + public Object[] getColumnValues(Schema schema, String[] strings, boolean b) + { + return new Object[0]; + } + + @Override + public HoodieRecord joinWith(HoodieRecord hoodieRecord, Schema schema) + { + return null; + } + + @Override + public HoodieRecord prependMetaFields(Schema schema, Schema schema1, + MetadataValues metadataValues, Properties properties) + { + return null; + } + + @Override + public HoodieRecord rewriteRecordWithNewSchema(Schema schema, Properties properties, + Schema schema1, Map map) + { + return null; + } + + @Override + public boolean isDelete(Schema schema, Properties properties) + throws IOException + { + return false; + } + + @Override + public boolean shouldIgnore(Schema schema, Properties properties) + throws IOException + { + return false; + } + + @Override + public HoodieRecord copy() + { + return null; + } + + @Override + public Option> getMetadata() + { + return null; + } + + @Override + public HoodieRecord wrapIntoHoodieRecordPayloadWithParams(Schema schema, Properties properties, + Option> option, Boolean aBoolean, Option option1, + Boolean aBoolean1, Option option2) + throws IOException + { + return null; + } + + @Override + public HoodieRecord wrapIntoHoodieRecordPayloadWithKeyGen(Schema schema, Properties properties, + Option option) + { + return null; + } + + @Override + public HoodieRecord truncateRecordKey(Schema schema, Properties properties, String s) + throws IOException + { + return null; + } + + @Override + public Option toIndexedRecord(Schema schema, Properties properties) + throws IOException + { + return null; + } + + @Override + public ByteArrayOutputStream getAvroBytes(Schema schema, Properties properties) + throws IOException + { + return null; + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiBackgroundSplitLoader.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiBackgroundSplitLoader.java index 81447f1f7a780..56c89ea92634c 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiBackgroundSplitLoader.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiBackgroundSplitLoader.java @@ -15,17 +15,26 @@ import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; +import io.airlift.log.Logger; +import io.trino.metastore.Partition; import io.trino.plugin.hive.util.AsyncQueue; import io.trino.plugin.hudi.HudiTableHandle; import io.trino.plugin.hudi.partition.HudiPartitionInfoLoader; import io.trino.plugin.hudi.query.HudiDirectoryLister; +import io.trino.plugin.hudi.query.index.HudiPartitionStatsIndexSupport; +import io.trino.plugin.hudi.query.index.IndexSupportFactory; import io.trino.spi.TrinoException; import io.trino.spi.connector.ConnectorSession; import io.trino.spi.connector.ConnectorSplit; +import io.trino.spi.connector.SchemaTableName; +import org.apache.hudi.metadata.HoodieTableMetadata; +import org.apache.hudi.util.Lazy; import java.util.ArrayList; import java.util.Deque; import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.concurrent.ConcurrentLinkedDeque; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor; @@ -35,18 +44,23 @@ import static io.airlift.concurrent.MoreFutures.addExceptionCallback; import static io.trino.plugin.hudi.HudiErrorCode.HUDI_CANNOT_OPEN_SPLIT; import static io.trino.plugin.hudi.HudiSessionProperties.getSplitGeneratorParallelism; +import static io.trino.plugin.hudi.HudiSessionProperties.getTargetSplitSize; import static java.util.Objects.requireNonNull; public class HudiBackgroundSplitLoader implements Runnable { + private static final Logger log = Logger.get(HudiBackgroundSplitLoader.class); + private final HudiTableHandle tableHandle; private final HudiDirectoryLister hudiDirectoryLister; private final AsyncQueue asyncQueue; private final Executor splitGeneratorExecutor; private final int splitGeneratorNumThreads; private final HudiSplitFactory hudiSplitFactory; - private final List partitions; + private final Lazy> lazyPartitions; private final Consumer errorListener; + private final boolean enableMetadataTable; + private final Optional partitionIndexSupportOpt; public HudiBackgroundSplitLoader( ConnectorSession session, @@ -55,44 +69,71 @@ public HudiBackgroundSplitLoader( AsyncQueue asyncQueue, Executor splitGeneratorExecutor, HudiSplitWeightProvider hudiSplitWeightProvider, - List partitions, + Lazy> lazyPartitionMap, + boolean enableMetadataTable, + Lazy lazyTableMetadata, Consumer errorListener) { + this.tableHandle = requireNonNull(tableHandle, "tableHandle is null"); this.hudiDirectoryLister = requireNonNull(hudiDirectoryLister, "hudiDirectoryLister is null"); this.asyncQueue = requireNonNull(asyncQueue, "asyncQueue is null"); this.splitGeneratorExecutor = requireNonNull(splitGeneratorExecutor, "splitGeneratorExecutorService is null"); this.splitGeneratorNumThreads = getSplitGeneratorParallelism(session); - this.hudiSplitFactory = new HudiSplitFactory(tableHandle, hudiSplitWeightProvider); - this.partitions = requireNonNull(partitions, "partitions is null"); + this.hudiSplitFactory = new HudiSplitFactory(tableHandle, hudiSplitWeightProvider, getTargetSplitSize(session)); + this.lazyPartitions = Lazy.lazily(() -> requireNonNull(lazyPartitionMap, "partitions is null").get().keySet().stream().toList()); + this.enableMetadataTable = enableMetadataTable; this.errorListener = requireNonNull(errorListener, "errorListener is null"); + SchemaTableName schemaTableName = tableHandle.getSchemaTableName(); + this.partitionIndexSupportOpt = enableMetadataTable ? + IndexSupportFactory.createPartitionStatsIndexSupport(schemaTableName, Lazy.lazily(tableHandle::getMetaClient), lazyTableMetadata, tableHandle.getRegularPredicates(), session) : Optional.empty(); } @Override public void run() { - Deque partitionQueue = new ConcurrentLinkedDeque<>(partitions); - List splitGeneratorList = new ArrayList<>(); - List> splitGeneratorFutures = new ArrayList<>(); + // Wrap entire logic so that ANY error will be thrown out and not cause program to get stuc + try { + if (enableMetadataTable) { + generateSplits(true); + return; + } + + // Fallback to partition pruning generator + generateSplits(false); + } + catch (Exception e) { + errorListener.accept(e); + } + } + + private void generateSplits(boolean useIndex) + { + // Attempt to apply partition pruning using partition stats index + Optional> effectivePartitionsOpt = useIndex && partitionIndexSupportOpt.isPresent() ? + partitionIndexSupportOpt.get().prunePartitions(lazyPartitions.get()) : Optional.empty(); + + Deque partitionQueue = new ConcurrentLinkedDeque<>(effectivePartitionsOpt.orElse(lazyPartitions.get())); + List splitGenerators = new ArrayList<>(); + List> futures = new ArrayList<>(); - // Start a number of partition split generators to generate the splits in parallel for (int i = 0; i < splitGeneratorNumThreads; i++) { - HudiPartitionInfoLoader generator = new HudiPartitionInfoLoader(hudiDirectoryLister, hudiSplitFactory, asyncQueue, partitionQueue); - splitGeneratorList.add(generator); + HudiPartitionInfoLoader generator = new HudiPartitionInfoLoader(hudiDirectoryLister, tableHandle.getLatestCommitTime(), hudiSplitFactory, + asyncQueue, partitionQueue, useIndex); + splitGenerators.add(generator); ListenableFuture future = Futures.submit(generator, splitGeneratorExecutor); addExceptionCallback(future, errorListener); - splitGeneratorFutures.add(future); + futures.add(future); } - for (HudiPartitionInfoLoader generator : splitGeneratorList) { - // Let the split generator stop once the partition queue is empty - generator.stopRunning(); - } + // Signal all generators to stop once partition queue is drained + splitGenerators.forEach(HudiPartitionInfoLoader::stopRunning); + log.info("Wait for partition pruning split generation to finish on table %s.%s", tableHandle.getSchemaName(), tableHandle.getTableName()); try { - // Wait for all split generators to finish - Futures.whenAllComplete(splitGeneratorFutures) + Futures.whenAllComplete(futures) .run(asyncQueue::finish, directExecutor()) .get(); + log.info("Partition pruning split generation finished on table %s.%s", tableHandle.getSchemaName(), tableHandle.getTableName()); } catch (InterruptedException | ExecutionException e) { if (e instanceof InterruptedException) { diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiSplitFactory.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiSplitFactory.java index ccae0b5a38f8e..872f56cb352d9 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiSplitFactory.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/split/HudiSplitFactory.java @@ -14,14 +14,22 @@ package io.trino.plugin.hudi.split; import com.google.common.collect.ImmutableList; +import io.airlift.units.DataSize; import io.trino.plugin.hive.HivePartitionKey; -import io.trino.plugin.hudi.HudiFileStatus; import io.trino.plugin.hudi.HudiSplit; import io.trino.plugin.hudi.HudiTableHandle; +import io.trino.plugin.hudi.file.HudiBaseFile; +import io.trino.plugin.hudi.file.HudiLogFile; import io.trino.spi.TrinoException; +import org.apache.hudi.common.model.FileSlice; +import org.apache.hudi.common.model.HoodieBaseFile; +import org.apache.hudi.common.model.HoodieTableType; +import org.apache.hudi.common.util.Option; +import java.util.Collections; import java.util.List; +import static com.google.common.base.Preconditions.checkArgument; import static io.trino.plugin.hudi.HudiErrorCode.HUDI_FILESYSTEM_ERROR; import static java.lang.String.format; import static java.util.Objects.requireNonNull; @@ -32,62 +40,89 @@ public class HudiSplitFactory private final HudiTableHandle hudiTableHandle; private final HudiSplitWeightProvider hudiSplitWeightProvider; + private final DataSize targetSplitSize; public HudiSplitFactory( HudiTableHandle hudiTableHandle, - HudiSplitWeightProvider hudiSplitWeightProvider) + HudiSplitWeightProvider hudiSplitWeightProvider, + DataSize targetSplitSize) { this.hudiTableHandle = requireNonNull(hudiTableHandle, "hudiTableHandle is null"); this.hudiSplitWeightProvider = requireNonNull(hudiSplitWeightProvider, "hudiSplitWeightProvider is null"); + this.targetSplitSize = requireNonNull(targetSplitSize, "targetSplitSize is null"); } - public List createSplits(List partitionKeys, HudiFileStatus fileStatus) + public List createSplits(List partitionKeys, FileSlice fileSlice, String commitTime) { - if (fileStatus.isDirectory()) { - throw new TrinoException(HUDI_FILESYSTEM_ERROR, format("Not a valid location: %s", fileStatus.location())); + return createHudiSplits(hudiTableHandle, partitionKeys, fileSlice, commitTime, hudiSplitWeightProvider, targetSplitSize); + } + + public static List createHudiSplits( + HudiTableHandle hudiTableHandle, + List partitionKeys, + FileSlice fileSlice, + String commitTime, + HudiSplitWeightProvider hudiSplitWeightProvider, + DataSize targetSplitSize) + { + if (fileSlice.isEmpty()) { + throw new TrinoException(HUDI_FILESYSTEM_ERROR, format("Not a valid file slice: %s", fileSlice.toString())); } - long fileSize = fileStatus.length(); + // Handle MERGE_ON_READ tables to be read in read_optimized mode + // IMPORTANT: These tables will have a COPY_ON_WRITE table type due to how `HudiTableTypeUtils#fromInputFormat` + if (fileSlice.getLogFiles().findAny().isEmpty() + || hudiTableHandle.getTableType().equals(HoodieTableType.COPY_ON_WRITE)) { + // Base file only + checkArgument(fileSlice.getBaseFile().isPresent(), + "Hudi base file must exist if there is no log file in the file slice"); + HoodieBaseFile baseFile = fileSlice.getBaseFile().get(); + long fileSize = baseFile.getFileSize(); - if (fileSize == 0) { - return ImmutableList.of(new HudiSplit( - fileStatus.location().toString(), - 0, - fileSize, - fileSize, - fileStatus.modificationTime(), - hudiTableHandle.getRegularPredicates(), - partitionKeys, - hudiSplitWeightProvider.calculateSplitWeight(fileSize))); - } + if (fileSize == 0) { + return ImmutableList.of(new HudiSplit( + HudiBaseFile.of(baseFile), + Collections.emptyList(), + commitTime, + hudiTableHandle.getRegularPredicates(), + partitionKeys, + hudiSplitWeightProvider.calculateSplitWeight(fileSize))); + } - ImmutableList.Builder splits = ImmutableList.builder(); - long splitSize = fileStatus.blockSize(); + ImmutableList.Builder splits = ImmutableList.builder(); + long targetSplitSizeInBytes = Math.max(targetSplitSize.toBytes(), baseFile.getPathInfo().getBlockSize()); - long bytesRemaining = fileSize; - while (((double) bytesRemaining) / splitSize > SPLIT_SLOP) { - splits.add(new HudiSplit( - fileStatus.location().toString(), - fileSize - bytesRemaining, - splitSize, - fileSize, - fileStatus.modificationTime(), - hudiTableHandle.getRegularPredicates(), - partitionKeys, - hudiSplitWeightProvider.calculateSplitWeight(splitSize))); - bytesRemaining -= splitSize; - } - if (bytesRemaining > 0) { - splits.add(new HudiSplit( - fileStatus.location().toString(), - fileSize - bytesRemaining, - bytesRemaining, - fileSize, - fileStatus.modificationTime(), - hudiTableHandle.getRegularPredicates(), - partitionKeys, - hudiSplitWeightProvider.calculateSplitWeight(bytesRemaining))); + long bytesRemaining = fileSize; + while (((double) bytesRemaining) / targetSplitSizeInBytes > SPLIT_SLOP) { + splits.add(new HudiSplit( + HudiBaseFile.of(baseFile, fileSize - bytesRemaining, targetSplitSizeInBytes), + Collections.emptyList(), + commitTime, + hudiTableHandle.getRegularPredicates(), + partitionKeys, + hudiSplitWeightProvider.calculateSplitWeight(targetSplitSizeInBytes))); + bytesRemaining -= targetSplitSizeInBytes; + } + if (bytesRemaining > 0) { + splits.add(new HudiSplit( + HudiBaseFile.of(baseFile, fileSize - bytesRemaining, bytesRemaining), + Collections.emptyList(), + commitTime, + hudiTableHandle.getRegularPredicates(), + partitionKeys, + hudiSplitWeightProvider.calculateSplitWeight(bytesRemaining))); + } + return splits.build(); } - return splits.build(); + + // Base and log files + Option baseFileOption = fileSlice.getBaseFile(); + return ImmutableList.of(new HudiSplit( + baseFileOption.isPresent() ? HudiBaseFile.of(baseFileOption.get()) : null, + fileSlice.getLogFiles().map(HudiLogFile::of).toList(), + commitTime, + hudiTableHandle.getRegularPredicates(), + partitionKeys, + hudiSplitWeightProvider.calculateSplitWeight(fileSlice.getTotalFileSize()))); } } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/stats/ForHudiTableStatistics.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/stats/ForHudiTableStatistics.java new file mode 100644 index 0000000000000..f324887a3e7c3 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/stats/ForHudiTableStatistics.java @@ -0,0 +1,29 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.stats; + +import com.google.inject.BindingAnnotation; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +@Retention(RUNTIME) +@Target({FIELD, PARAMETER, METHOD}) +@BindingAnnotation +public @interface ForHudiTableStatistics {} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/stats/HudiTableStatistics.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/stats/HudiTableStatistics.java new file mode 100644 index 0000000000000..04526521b6ae2 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/stats/HudiTableStatistics.java @@ -0,0 +1,23 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.stats; + +import io.trino.spi.statistics.TableStatistics; +import org.apache.hudi.common.table.timeline.HoodieInstant; + +public record HudiTableStatistics( + HoodieInstant latestCommit, + TableStatistics tableStatistics) +{ +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/stats/TableMetadataReader.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/stats/TableMetadataReader.java new file mode 100644 index 0000000000000..e87122de07953 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/stats/TableMetadataReader.java @@ -0,0 +1,114 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.stats; + +import org.apache.hudi.avro.model.HoodieMetadataColumnStats; +import org.apache.hudi.common.config.HoodieMetadataConfig; +import org.apache.hudi.common.engine.HoodieEngineContext; +import org.apache.hudi.common.model.HoodieColumnRangeMetadata; +import org.apache.hudi.common.model.HoodieRecord; +import org.apache.hudi.common.util.HoodieTimer; +import org.apache.hudi.common.util.collection.Pair; +import org.apache.hudi.common.util.hash.ColumnIndexID; +import org.apache.hudi.common.util.hash.FileIndexID; +import org.apache.hudi.common.util.hash.PartitionIndexID; +import org.apache.hudi.exception.HoodieMetadataException; +import org.apache.hudi.metadata.HoodieBackedTableMetadata; +import org.apache.hudi.metadata.HoodieMetadataMetrics; +import org.apache.hudi.metadata.HoodieMetadataPayload; +import org.apache.hudi.metadata.HoodieTableMetadataUtil; +import org.apache.hudi.metadata.MetadataPartitionType; +import org.apache.hudi.storage.HoodieStorage; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * Reads metadata efficiently from a Hudi metadata table. + */ +public class TableMetadataReader + extends HoodieBackedTableMetadata +{ + TableMetadataReader(HoodieEngineContext engineContext, HoodieStorage storage, + HoodieMetadataConfig metadataConfig, String datasetBasePath, boolean reuse) + { + super(engineContext, storage, metadataConfig, datasetBasePath, reuse); + } + + /** + * Retrieves column statistics for the specified partition and file names. + * + * @param partitionNameFileNameList a list of partition and file name pairs for which column statistics are retrieved + * @param columnNames a list of column names for which statistics are needed + * @return a map from column name to their corresponding {@link HoodieColumnRangeMetadata} + * @throws HoodieMetadataException if an error occurs while fetching the column statistics + */ + Map getColumnStats(List> partitionNameFileNameList, List columnNames) + throws HoodieMetadataException + { + return computeFileToColumnStatsMap(computeColumnStatsLookupKeys(partitionNameFileNameList, columnNames)); + } + + /** + * @param partitionNameFileNameList a list of partition and file name pairs for which column stats need to be retrieved + * @param columnNames list of column names for which stats are needed + * @return a list of column stats keys to look up in the metadata table col_stats partition. + */ + private List computeColumnStatsLookupKeys( + final List> partitionNameFileNameList, + final List columnNames) + { + return columnNames.stream() + .flatMap(columnName -> partitionNameFileNameList.stream() + .map(partitionNameFileNamePair -> HoodieMetadataPayload.getColumnStatsIndexKey( + new PartitionIndexID(HoodieTableMetadataUtil.getColumnStatsIndexPartitionIdentifier(partitionNameFileNamePair.getLeft())), + new FileIndexID(partitionNameFileNamePair.getRight()), + new ColumnIndexID(columnName)))) + .toList(); + } + + /** + * @param columnStatsLookupKeys a map from column stats key to partition and file name pair + * @return a map from column name to merged HoodieMetadataColumnStats + */ + private Map computeFileToColumnStatsMap(List columnStatsLookupKeys) + { + HoodieTimer timer = HoodieTimer.start(); + Map> hoodieRecords = + getRecordsByKeys(columnStatsLookupKeys, MetadataPartitionType.COLUMN_STATS.getPartitionPath()); + metrics.ifPresent(m -> m.updateMetrics(HoodieMetadataMetrics.LOOKUP_COLUMN_STATS_METADATA_STR, timer.endTimer())); + return hoodieRecords.values().stream() + .collect(Collectors.groupingBy( + r -> r.getData().getColumnStatMetadata().get().getColumnName(), + Collectors.mapping(r -> r.getData().getColumnStatMetadata().get(), Collectors.toList()))) + .entrySet().stream() + .collect(Collectors.toMap( + Map.Entry::getKey, + e -> { + long valueCount = 0L; + long nullCount = 0L; + long totalSize = 0L; + long totalUncompressedSize = 0L; + for (HoodieMetadataColumnStats stats : e.getValue()) { + valueCount += stats.getValueCount(); + nullCount += stats.getNullCount(); + totalSize += stats.getTotalSize(); + totalUncompressedSize += stats.getTotalUncompressedSize(); + } + return HoodieColumnRangeMetadata.create( + "", e.getKey(), null, null, nullCount, valueCount, totalSize, totalUncompressedSize); + })); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/stats/TableStatisticsReader.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/stats/TableStatisticsReader.java new file mode 100644 index 0000000000000..30e03622f5775 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/stats/TableStatisticsReader.java @@ -0,0 +1,118 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.stats; + +import com.google.common.collect.ImmutableMap; +import io.airlift.log.Logger; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hudi.storage.TrinoStorageConfiguration; +import io.trino.spi.connector.ColumnHandle; +import io.trino.spi.statistics.ColumnStatistics; +import io.trino.spi.statistics.Estimate; +import io.trino.spi.statistics.TableStatistics; +import org.apache.hudi.common.config.HoodieMetadataConfig; +import org.apache.hudi.common.engine.HoodieEngineContext; +import org.apache.hudi.common.engine.HoodieLocalEngineContext; +import org.apache.hudi.common.model.HoodieColumnRangeMetadata; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.common.table.timeline.HoodieInstant; +import org.apache.hudi.common.table.view.HoodieTableFileSystemView; +import org.apache.hudi.common.util.collection.Pair; + +import java.util.List; +import java.util.Map; + +import static io.trino.plugin.hudi.HudiUtil.getFileSystemView; + +/** + * Reads table statistics of a Hudi table from the metadata table files and column stats partitions. + */ +public class TableStatisticsReader +{ + private static final Logger log = Logger.get(TableStatisticsReader.class); + private final HoodieTableMetaClient metaClient; + private final TableMetadataReader tableMetadata; + private final HoodieTableFileSystemView fileSystemView; + + private TableStatisticsReader(HoodieTableMetaClient metaClient) + { + this.metaClient = metaClient; + HoodieEngineContext engineContext = new HoodieLocalEngineContext(new TrinoStorageConfiguration()); + HoodieMetadataConfig metadataConfig = HoodieMetadataConfig.newBuilder().enable(true).build(); + this.tableMetadata = new TableMetadataReader( + engineContext, metaClient.getStorage(), metadataConfig, metaClient.getBasePath().toString(), true); + this.fileSystemView = getFileSystemView(tableMetadata, metaClient); + } + + public static TableStatisticsReader create(HoodieTableMetaClient metaClient) + { + return new TableStatisticsReader(metaClient); + } + + /** + * Retrieves table statistics of a Hudi table based on the latest commit and specified columns. + * + * @param latestCommit the most recent commit at which to retrieve the statistics + * @param columnHandles a list of {@link HiveColumnHandle} representing the columns for which statistics are needed + * @return {@link TableStatistics} object containing the statistics of the specified columns, or empty statistics if unable to retrieve + */ + public TableStatistics getTableStatistics(HoodieInstant latestCommit, + List columnHandles) + { + List columnNames = columnHandles.stream() + .map(HiveColumnHandle::getName) + .toList(); + Map columnStatsMap = getColumnStats(latestCommit, tableMetadata, fileSystemView, columnNames); + if (columnStatsMap.isEmpty()) { + log.warn("Unable to get column stats from metadata table for table, returning empty table statistics: %s", + metaClient.getBasePath()); + return TableStatistics.empty(); + } + long rowCount = columnStatsMap.values().stream() + .map(e -> e.getNullCount() + e.getValueCount()) + .max(Long::compare) + .get(); + ImmutableMap.Builder columnHandleBuilder = ImmutableMap.builder(); + for (HiveColumnHandle columnHandle : columnHandles) { + HoodieColumnRangeMetadata columnStats = columnStatsMap.get(columnHandle.getName()); + if (columnStats == null) { + log.warn("Unable to get column stats for column %s in table %s", + columnHandle.getName(), metaClient.getBasePath()); + continue; + } + ColumnStatistics.Builder columnStatisticsBuilder = new ColumnStatistics.Builder(); + long totalCount = columnStats.getNullCount() + columnStats.getValueCount(); + columnStatisticsBuilder.setNullsFraction(Estimate.of( + columnStats.getNullCount() / (double) totalCount)); + columnStatisticsBuilder.setDataSize(Estimate.of(columnStats.getTotalUncompressedSize() / (double) totalCount)); + columnHandleBuilder.put(columnHandle, columnStatisticsBuilder.build()); + } + return new TableStatistics(Estimate.of(rowCount), columnHandleBuilder.buildOrThrow()); + } + + private static Map getColumnStats( + HoodieInstant latestCommit, + TableMetadataReader tableMetadata, + HoodieTableFileSystemView fileSystemView, + List columnNames) + { + fileSystemView.loadAllPartitions(); + List> filePaths = fileSystemView.getAllLatestBaseFilesBeforeOrOn(latestCommit.requestedTime()) + .entrySet() + .stream().flatMap(entry -> entry.getValue() + .map(baseFile -> Pair.of(entry.getKey(), baseFile.getFileName()))) + .toList(); + return tableMetadata.getColumnStats(filePaths, columnNames); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/HudiTrinoInlineStorage.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/HudiTrinoInlineStorage.java new file mode 100644 index 0000000000000..26e1eae088a0b --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/HudiTrinoInlineStorage.java @@ -0,0 +1,242 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.storage; + +import io.trino.filesystem.TrinoInputStream; +import io.trino.plugin.hudi.io.InlineSeekableDataInputStream; +import org.apache.hudi.common.util.ValidationUtils; +import org.apache.hudi.exception.HoodieNotSupportedException; +import org.apache.hudi.io.SeekableDataInputStream; +import org.apache.hudi.storage.HoodieStorage; +import org.apache.hudi.storage.StorageConfiguration; +import org.apache.hudi.storage.StoragePath; +import org.apache.hudi.storage.StoragePathFilter; +import org.apache.hudi.storage.StoragePathInfo; +import org.apache.hudi.storage.inline.InLineFSUtils; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.URI; +import java.util.Collections; +import java.util.List; + +public class HudiTrinoInlineStorage + extends HoodieStorage +{ + private final HudiTrinoStorage storage; + + public HudiTrinoInlineStorage(HudiTrinoStorage storage) + { + super(storage.getConf()); + this.storage = storage; + } + + @Override + public HoodieStorage newInstance(StoragePath path, StorageConfiguration storageConf) + { + if (InLineFSUtils.SCHEME.equals(path.toUri().getScheme())) { + return this; + } + return storage; + } + + @Override + public String getScheme() + { + return InLineFSUtils.SCHEME; + } + + @Override + public int getDefaultBlockSize(StoragePath path) + { + return storage.getDefaultBlockSize(getFilePathFromInlinePath(path)); + } + + @Override + public int getDefaultBufferSize() + { + return storage.getDefaultBufferSize(); + } + + @Override + public short getDefaultReplication(StoragePath path) + { + return storage.getDefaultReplication(getFilePathFromInlinePath(path)); + } + + @Override + public URI getUri() + { + return URI.create(getScheme()); + } + + @Override + public OutputStream create(StoragePath path, boolean b) + throws IOException + { + throw new HoodieNotSupportedException("Hudi inline storage supports reads only."); + } + + @Override + public OutputStream create(StoragePath path, boolean b, Integer integer, Short aShort, Long aLong) + throws IOException + { + throw new HoodieNotSupportedException("Hudi inline storage supports reads only."); + } + + @Override + public InputStream open(StoragePath path) + throws IOException + { + return openSeekable(path, getDefaultBufferSize(), false); + } + + @Override + public SeekableDataInputStream openSeekable(StoragePath path, int bufferSize, boolean wrapStream) + throws IOException + { + return new InlineSeekableDataInputStream( + (TrinoInputStream) storage.open(getFilePathFromInlinePath(path)), + InLineFSUtils.startOffset(path), + InLineFSUtils.length(path)); + } + + @Override + public OutputStream append(StoragePath path) + throws IOException + { + throw new HoodieNotSupportedException("Hudi inline storage supports reads only."); + } + + @Override + public boolean exists(StoragePath path) + throws IOException + { + return storage.exists(getFilePathFromInlinePath(path)); + } + + @Override + public StoragePathInfo getPathInfo(StoragePath path) + throws IOException + { + StoragePathInfo pathInfo = storage.getPathInfo(getFilePathFromInlinePath(path)); + return new StoragePathInfo( + path, InLineFSUtils.length(path), pathInfo.isDirectory(), + pathInfo.getBlockReplication(), pathInfo.getBlockSize(), + pathInfo.getModificationTime()); + } + + @Override + public boolean createDirectory(StoragePath path) + throws IOException + { + throw new HoodieNotSupportedException("Hudi inline storage supports reads only."); + } + + @Override + public List listDirectEntries(StoragePath path) + throws IOException + { + // This is supposed to be called on a file path only + StoragePathInfo pathInfo = getPathInfo(path); + ValidationUtils.checkArgument(pathInfo.isFile(), + "HudiTrinoInlineStorage#listDirectEntries should only be called on a file path"); + return Collections.singletonList(pathInfo); + } + + @Override + public List listFiles(StoragePath path) + throws IOException + { + throw new HoodieNotSupportedException("This API should not be called by Hudi inline storage."); + } + + @Override + public List listDirectEntries(StoragePath path, StoragePathFilter storagePathFilter) + throws IOException + { + throw new HoodieNotSupportedException("This API should not be called by Hudi inline storage."); + } + + @Override + public List globEntries(StoragePath path, StoragePathFilter storagePathFilter) + throws IOException + { + throw new HoodieNotSupportedException("This API should not be called by Hudi inline storage."); + } + + @Override + public boolean rename(StoragePath oldPath, StoragePath newPath) + throws IOException + { + throw new HoodieNotSupportedException("Hudi inline storage supports reads only."); + } + + @Override + public boolean deleteDirectory(StoragePath path) + throws IOException + { + throw new HoodieNotSupportedException("Hudi inline storage supports reads only."); + } + + @Override + public boolean deleteFile(StoragePath path) + throws IOException + { + throw new HoodieNotSupportedException("Hudi inline storage supports reads only."); + } + + @Override + public void setModificationTime(StoragePath path, long modificationTime) + throws IOException + { + throw new HoodieNotSupportedException("Hudi inline storage supports reads only."); + } + + @Override + public Object getFileSystem() + { + return storage.getFileSystem(); + } + + @Override + public HoodieStorage getRawStorage() + { + return this; + } + + @Override + public void close() + throws IOException + { + } + + private static StoragePath getFilePathFromInlinePath(StoragePath inlinePath) + { + assertInlineFSPath(inlinePath); + String outerFileScheme = inlinePath.getParent().getName(); + StoragePath basePath = inlinePath.getParent().getParent(); + ValidationUtils.checkArgument(basePath.toString().contains(":"), "Invalid InLineFS path: " + inlinePath); + String pathExceptScheme = basePath.toString().substring(basePath.toString().indexOf(":") + 1); + String fullPath = outerFileScheme + ":" + (outerFileScheme.equals("file") || outerFileScheme.equals("local") ? "/" : "") + pathExceptScheme; + return new StoragePath(fullPath); + } + + private static void assertInlineFSPath(StoragePath inlinePath) + { + String scheme = inlinePath.toUri().getScheme(); + ValidationUtils.checkArgument(InLineFSUtils.SCHEME.equals(scheme)); + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/TrinoHudiStorage.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/HudiTrinoStorage.java similarity index 59% rename from hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/TrinoHudiStorage.java rename to hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/HudiTrinoStorage.java index ffdf618811510..48c5409c10d83 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/TrinoHudiStorage.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/HudiTrinoStorage.java @@ -13,7 +13,6 @@ */ package io.trino.plugin.hudi.storage; -import com.google.common.collect.ImmutableList; import io.airlift.units.DataSize; import io.trino.filesystem.FileEntry; import io.trino.filesystem.FileIterator; @@ -27,24 +26,20 @@ import org.apache.hudi.storage.StoragePath; import org.apache.hudi.storage.StoragePathFilter; import org.apache.hudi.storage.StoragePathInfo; +import org.apache.hudi.storage.inline.InLineFSUtils; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URI; -import java.util.HashSet; +import java.util.ArrayList; import java.util.List; import java.util.Optional; -import java.util.Set; import static io.airlift.units.DataSize.Unit.MEGABYTE; -import static java.util.Objects.requireNonNull; -/** - * {@link HoodieStorage} implementation based on {@link TrinoFileSystem} - */ -public class TrinoHudiStorage +public class HudiTrinoStorage extends HoodieStorage { private static final int DEFAULT_BLOCK_SIZE = (int) DataSize.of(32, MEGABYTE).toBytes(); @@ -53,23 +48,26 @@ public class TrinoHudiStorage private final TrinoFileSystem fileSystem; - public TrinoHudiStorage( - TrinoFileSystem fileSystem, - TrinoStorageConfiguration config) + public HudiTrinoStorage(TrinoFileSystem fileSystem, TrinoStorageConfiguration storageConf) { - super(requireNonNull(config, "config is null")); - this.fileSystem = requireNonNull(fileSystem, "fileSystem is null"); + super(storageConf); + this.fileSystem = fileSystem; } - private static Location convertToLocation(StoragePath path) + public static Location convertToLocation(StoragePath path) { return Location.of(path.toString()); } - private static StoragePathInfo convertToPathInfo(FileEntry fileEntry) + public static StoragePath convertToPath(Location location) + { + return new StoragePath(location.toString()); + } + + public static StoragePathInfo convertToPathInfo(FileEntry fileEntry) { return new StoragePathInfo( - new StoragePath(fileEntry.location().toString()), + convertToPath(fileEntry.location()), fileEntry.length(), false, (short) 0, @@ -78,15 +76,17 @@ private static StoragePathInfo convertToPathInfo(FileEntry fileEntry) } @Override - public HoodieStorage newInstance(StoragePath path, StorageConfiguration config) + public HoodieStorage newInstance(StoragePath path, StorageConfiguration storageConf) { + if (InLineFSUtils.SCHEME.equals(path.toUri().getScheme())) { + return new HudiTrinoInlineStorage(this); + } return this; } @Override public String getScheme() { - // TODO: this is not used in read path so returning a fake scheme is OK. return "file"; } @@ -103,8 +103,7 @@ public int getDefaultBufferSize() } @Override - public short getDefaultReplication( - StoragePath path) + public short getDefaultReplication(StoragePath path) { return DEFAULT_REPLICATION; } @@ -112,7 +111,7 @@ public short getDefaultReplication( @Override public URI getUri() { - return URI.create(""); + return URI.create(getScheme()); } @Override @@ -123,12 +122,7 @@ public OutputStream create(StoragePath path, boolean overwrite) } @Override - public OutputStream create( - StoragePath path, - boolean overwrite, - Integer bufferSize, - Short replication, - Long sizeThreshold) + public OutputStream create(StoragePath path, boolean overwrite, Integer bufferSize, Short replication, Long sizeThreshold) throws IOException { return create(path, overwrite); @@ -142,20 +136,18 @@ public InputStream open(StoragePath path) } @Override - public SeekableDataInputStream openSeekable( - StoragePath path, - int bufferSize, - boolean wrapStream) + public SeekableDataInputStream openSeekable(StoragePath path, int bufferSize, boolean wrapStream) throws IOException { - return new TrinoSeekableDataInputStream(fileSystem.newInputFile(convertToLocation(path)).newStream()); + return new TrinoSeekableDataInputStream( + fileSystem.newInputFile(convertToLocation(path)).newStream()); } @Override public OutputStream append(StoragePath path) throws IOException { - throw new UnsupportedOperationException("TrinoHudiStorage does not support append operation"); + throw new UnsupportedOperationException("HudiTrinoStorage does not support append operation."); } @Override @@ -176,8 +168,6 @@ public StoragePathInfo getPathInfo(StoragePath path) } TrinoInputFile inputFile = fileSystem.newInputFile(location); if (!inputFile.exists()) { - // Based on the API definition, the `FileNotFoundException` should be thrown here - // so that Hudi logic can catch it and swallow it as needed throw new FileNotFoundException("Path " + path + " does not exist"); } return new StoragePathInfo(path, inputFile.length(), false, (short) 0, 0, inputFile.lastModified().toEpochMilli()); @@ -195,17 +185,17 @@ public boolean createDirectory(StoragePath path) public List listDirectEntries(StoragePath path) throws IOException { - FileIterator fileIterator = fileSystem.listFiles(convertToLocation(path)); - Set entryList = new HashSet<>(); + // TrinoFileSystem#listFiles lists recursively, we need to limit the result to only the direct children + Location location = convertToLocation(path); + FileIterator fileIterator = fileSystem.listFiles(location); + List fileList = new ArrayList<>(); while (fileIterator.hasNext()) { - entryList.add(getDirectEntryPathInfo(path, fileIterator.next())); - } - if (entryList.isEmpty()) { - // Based on the API definition, the `FileNotFoundException` should be thrown here - // so that Hudi logic can catch it and swallow it as needed - throw new FileNotFoundException("Path " + path + " does not exist"); + FileEntry entry = fileIterator.next(); + if (entry.location().parentDirectory().path().equals(location.path())) { + fileList.add(convertToPathInfo(entry)); + } } - return ImmutableList.copyOf(entryList); + return fileList; } @Override @@ -213,47 +203,36 @@ public List listFiles(StoragePath path) throws IOException { FileIterator fileIterator = fileSystem.listFiles(convertToLocation(path)); - ImmutableList.Builder listBuilder = ImmutableList.builder(); + List fileList = new ArrayList<>(); while (fileIterator.hasNext()) { - listBuilder.add(convertToPathInfo(fileIterator.next())); + fileList.add(convertToPathInfo(fileIterator.next())); } - return listBuilder.build(); + return fileList; } @Override public List listDirectEntries(StoragePath path, StoragePathFilter filter) throws IOException { - FileIterator fileIterator = fileSystem.listFiles(convertToLocation(path)); - ImmutableList.Builder listBuilder = ImmutableList.builder(); - int count = 0; + // TrinoFileSystem#listFiles lists recursively, we need to limit the result to only the direct children + Location location = convertToLocation(path); + FileIterator fileIterator = fileSystem.listFiles(location); + List fileList = new ArrayList<>(); while (fileIterator.hasNext()) { - StoragePathInfo pathInfo = getDirectEntryPathInfo(path, fileIterator.next()); - count++; - if (filter.accept(pathInfo.getPath())) { - listBuilder.add(pathInfo); + FileEntry entry = fileIterator.next(); + if (filter.accept(new StoragePath(entry.location().toString())) + && entry.location().parentDirectory().path().equals(location.path())) { + fileList.add(convertToPathInfo(entry)); } } - if (count == 0) { - // Based on the API definition, the `FileNotFoundException` should be thrown here - // so that Hudi logic can catch it and swallow it as needed - throw new FileNotFoundException("Path " + path + " does not exist"); - } - return listBuilder.build(); - } - - @Override - public void setModificationTime(StoragePath path, long modificationTimeInMillisEpoch) - throws IOException - { - throw new UnsupportedOperationException("TrinoHudiStorage does not support setModificationTime operation"); + return fileList; } @Override public List globEntries(StoragePath pathPattern, StoragePathFilter filter) throws IOException { - throw new UnsupportedOperationException("TrinoHudiStorage does not support globEntries operation"); + throw new UnsupportedOperationException("HudiTrinoStorage does not support globEntries operation."); } @Override @@ -280,6 +259,14 @@ public boolean deleteFile(StoragePath path) return true; } + @Override + public void setModificationTime(StoragePath path, long modificationTime) + throws IOException + { + Location sameLocation = convertToLocation(path); + fileSystem.renameFile(sameLocation, sameLocation); + } + @Override public Object getFileSystem() { @@ -297,26 +284,4 @@ public void close() throws IOException { } - - /** - * @param path input directory - * @param fileEntry file entry that is in the input directory - * @return the path info of the file if the file entry is directly in the input directory, - * or the subdirectory in the input directory if the file entry is under the subdirectory - * or nested directory. - */ - private static StoragePathInfo getDirectEntryPathInfo(StoragePath path, FileEntry fileEntry) - { - StoragePathInfo pathInfo = convertToPathInfo(fileEntry); - while (!path.equals(pathInfo.getPath().getParent())) { - pathInfo = new StoragePathInfo( - pathInfo.getPath().getParent(), - 0L, - true, - (short) 0, - 0L, - pathInfo.getModificationTime()); - } - return pathInfo; - } } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/TrinoStorageConfiguration.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/TrinoStorageConfiguration.java index 3ddfac264c574..48939ae84c5a9 100644 --- a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/TrinoStorageConfiguration.java +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/storage/TrinoStorageConfiguration.java @@ -13,7 +13,7 @@ */ package io.trino.plugin.hudi.storage; -import io.trino.plugin.hudi.io.TrinoHudiIoFactory; +import io.trino.plugin.hudi.io.HudiTrinoIOFactory; import org.apache.hudi.common.util.Option; import org.apache.hudi.storage.StorageConfiguration; @@ -23,65 +23,61 @@ import static org.apache.hudi.common.config.HoodieStorageConfig.HOODIE_IO_FACTORY_CLASS; import static org.apache.hudi.common.config.HoodieStorageConfig.HOODIE_STORAGE_CLASS; -/** - * {@link StorageConfiguration} implementation based on a config map - */ public class TrinoStorageConfiguration - extends StorageConfiguration> + extends StorageConfiguration { - private final Map config; + private final Map configMap; public TrinoStorageConfiguration() { this(getDefaultConfigs()); } - TrinoStorageConfiguration(Map config) + public TrinoStorageConfiguration(Map configMap) { - this.config = getDefaultConfigs(); - this.config.putAll(config); + this.configMap = configMap; } - private static Map getDefaultConfigs() + public static Map getDefaultConfigs() { - Map config = new HashMap<>(); - config.put(HOODIE_IO_FACTORY_CLASS.key(), TrinoHudiIoFactory.class.getName()); - config.put(HOODIE_STORAGE_CLASS.key(), TrinoHudiStorage.class.getName()); - return config; + Map configMap = new HashMap<>(); + configMap.put(HOODIE_IO_FACTORY_CLASS.key(), HudiTrinoIOFactory.class.getName()); + configMap.put(HOODIE_STORAGE_CLASS.key(), HudiTrinoStorage.class.getName()); + return configMap; } @Override - public TrinoStorageConfiguration newInstance() + public StorageConfiguration newInstance() { - return new TrinoStorageConfiguration(new HashMap<>(config)); + return new TrinoStorageConfiguration(new HashMap<>(configMap)); } @Override - public Map unwrap() + public Object unwrap() { - return config; + return configMap; } @Override - public Map unwrapCopy() + public Object unwrapCopy() { - return new HashMap<>(config); + return new HashMap<>(configMap); } @Override public void set(String key, String value) { - config.put(key, value); + configMap.put(key, value); } @Override public Option getString(String key) { - return Option.ofNullable(config.get(key)); + return Option.ofNullable(configMap.get(key)); } @Override - public TrinoStorageConfiguration getInline() + public StorageConfiguration getInline() { return newInstance(); } diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/HudiAvroSerializer.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/HudiAvroSerializer.java new file mode 100644 index 0000000000000..91b38f593e19e --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/HudiAvroSerializer.java @@ -0,0 +1,504 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.util; + +import io.airlift.slice.Slice; +import io.airlift.slice.Slices; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.spi.Page; +import io.trino.spi.PageBuilder; +import io.trino.spi.TrinoException; +import io.trino.spi.block.ArrayBlockBuilder; +import io.trino.spi.block.BlockBuilder; +import io.trino.spi.block.Fixed12BlockBuilder; +import io.trino.spi.block.MapBlockBuilder; +import io.trino.spi.block.RowBlockBuilder; +import io.trino.spi.type.ArrayType; +import io.trino.spi.type.CharType; +import io.trino.spi.type.DateType; +import io.trino.spi.type.DecimalType; +import io.trino.spi.type.Decimals; +import io.trino.spi.type.Int128; +import io.trino.spi.type.LongTimestamp; +import io.trino.spi.type.LongTimestampWithTimeZone; +import io.trino.spi.type.MapType; +import io.trino.spi.type.RowType; +import io.trino.spi.type.SqlDate; +import io.trino.spi.type.SqlDecimal; +import io.trino.spi.type.SqlTimestamp; +import io.trino.spi.type.SqlVarbinary; +import io.trino.spi.type.Type; +import io.trino.spi.type.VarbinaryType; +import io.trino.spi.type.VarcharType; +import org.apache.avro.Conversions; +import org.apache.avro.Schema; +import org.apache.avro.generic.GenericData; +import org.apache.avro.generic.GenericRecord; +import org.apache.avro.generic.IndexedRecord; +import org.apache.avro.util.Utf8; + +import java.math.BigDecimal; +import java.nio.ByteBuffer; +import java.time.DateTimeException; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZoneOffset; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.util.List; +import java.util.Map; + +import static com.google.common.base.Verify.verify; +import static io.airlift.slice.Slices.utf8Slice; +import static io.trino.plugin.hudi.HudiUtil.constructSchema; +import static io.trino.spi.StandardErrorCode.GENERIC_INTERNAL_ERROR; +import static io.trino.spi.StandardErrorCode.NUMERIC_VALUE_OUT_OF_RANGE; +import static io.trino.spi.type.BigintType.BIGINT; +import static io.trino.spi.type.DateType.DATE; +import static io.trino.spi.type.Decimals.encodeShortScaledValue; +import static io.trino.spi.type.Decimals.writeBigDecimal; +import static io.trino.spi.type.Decimals.writeShortDecimal; +import static io.trino.spi.type.IntegerType.INTEGER; +import static io.trino.spi.type.LongTimestampWithTimeZone.fromEpochMillisAndFraction; +import static io.trino.spi.type.RealType.REAL; +import static io.trino.spi.type.SmallintType.SMALLINT; +import static io.trino.spi.type.TimeType.TIME_MICROS; +import static io.trino.spi.type.TimeZoneKey.UTC_KEY; +import static io.trino.spi.type.TimestampType.TIMESTAMP_MICROS; +import static io.trino.spi.type.TimestampWithTimeZoneType.TIMESTAMP_TZ_MICROS; +import static io.trino.spi.type.Timestamps.MICROSECONDS_PER_MILLISECOND; +import static io.trino.spi.type.Timestamps.MICROSECONDS_PER_SECOND; +import static io.trino.spi.type.Timestamps.NANOSECONDS_PER_MICROSECOND; +import static io.trino.spi.type.Timestamps.PICOSECONDS_PER_MICROSECOND; +import static io.trino.spi.type.TinyintType.TINYINT; +import static java.lang.Integer.parseInt; +import static java.lang.Math.floorDiv; +import static java.lang.Math.floorMod; +import static java.lang.Math.toIntExact; +import static java.lang.String.format; +import static java.time.ZoneOffset.UTC; + +public class HudiAvroSerializer +{ + private static final int[] NANO_FACTOR = { + -1, // 0, no need to multiply + 100_000_000, // 1 digit after the dot + 10_000_000, // 2 digits after the dot + 1_000_000, // 3 digits after the dot + 100_000, // 4 digits after the dot + 10_000, // 5 digits after the dot + 1000, // 6 digits after the dot + 100, // 7 digits after the dot + 10, // 8 digits after the dot + 1, // 9 digits after the dot + }; + + private static final AvroDecimalConverter DECIMAL_CONVERTER = new AvroDecimalConverter(); + private final SynthesizedColumnHandler synthesizedColumnHandler; + + private final List columnHandles; + private final List columnTypes; + private final Schema schema; + + public HudiAvroSerializer(List columnHandles, SynthesizedColumnHandler synthesizedColumnHandler) + { + this.columnHandles = columnHandles; + this.columnTypes = columnHandles.stream().map(HiveColumnHandle::getType).toList(); + // Fetches projected schema + this.schema = constructSchema(columnHandles.stream().filter(ch -> !ch.isHidden()).map(HiveColumnHandle::getName).toList(), + columnHandles.stream().filter(ch -> !ch.isHidden()).map(HiveColumnHandle::getHiveType).toList()); + this.synthesizedColumnHandler = synthesizedColumnHandler; + } + + public IndexedRecord serialize(Page sourcePage, int position) + { + IndexedRecord record = new GenericData.Record(schema); + for (int i = 0; i < columnTypes.size(); i++) { + Object value = getValue(sourcePage, i, position); + record.put(i, value); + } + return record; + } + + public Object getValue(Page sourcePage, int channel, int position) + { + return columnTypes.get(channel).getObjectValue(null, sourcePage.getBlock(channel), position); + } + + public void buildRecordInPage(PageBuilder pageBuilder, IndexedRecord record) + { + pageBuilder.declarePosition(); + int blockSeq = 0; + for (int channel = 0; channel < columnTypes.size(); channel++, blockSeq++) { + BlockBuilder output = pageBuilder.getBlockBuilder(blockSeq); + HiveColumnHandle columnHandle = columnHandles.get(channel); + if (synthesizedColumnHandler.isSynthesizedColumn(columnHandle)) { + synthesizedColumnHandler.getColumnStrategy(columnHandle).appendToBlock(output, columnTypes.get(channel)); + } + else { + // Record may not be projected, get index from it + int fieldPosInSchema = record.getSchema().getField(columnHandle.getName()).pos(); + appendTo(columnTypes.get(channel), record.get(fieldPosInSchema), output); + } + } + } + + public static void appendTo(Type type, Object value, BlockBuilder output) + { + if (value == null) { + output.appendNull(); + return; + } + + Class javaType = type.getJavaType(); + try { + if (javaType == boolean.class) { + type.writeBoolean(output, (Boolean) value); + } + else if (javaType == long.class) { + if (type.equals(BIGINT)) { + type.writeLong(output, ((Number) value).longValue()); + } + else if (type.equals(INTEGER)) { + type.writeLong(output, ((Number) value).intValue()); + } + else if (type.equals(SMALLINT)) { + type.writeLong(output, ((Number) value).shortValue()); + } + else if (type.equals(TINYINT)) { + type.writeLong(output, ((Number) value).byteValue()); + } + else if (type.equals(REAL)) { + if (value instanceof Number) { + // Directly get the float value from the Number + // This preserves the fractional part + float floatValue = ((Number) value).floatValue(); + + // Get the IEEE 754 single-precision 32-bit representation of this float + int intBits = Float.floatToRawIntBits(floatValue); + + // The writeLong method expects these int bits, passed as a long + // NOTE: Java handles the widening conversion from int to long + type.writeLong(output, intBits); + } + else { + // Handle cases where 'value' is not a Number + throw new TrinoException(GENERIC_INTERNAL_ERROR, + format("Unhandled type for %s: %s | value type: %s", javaType.getSimpleName(), type, value.getClass().getName())); + } + } + else if (type instanceof DecimalType decimalType) { + if (value instanceof SqlDecimal sqlDecimal) { + if (decimalType.isShort()) { + writeShortDecimal(output, sqlDecimal.toBigDecimal().unscaledValue().longValue()); + } + else { + writeBigDecimal(decimalType, output, sqlDecimal.toBigDecimal()); + } + } + else if (value instanceof GenericData.Fixed fixed) { + verify(decimalType.isShort(), "The type should be short decimal"); + BigDecimal decimal = DECIMAL_CONVERTER.convert(decimalType.getPrecision(), decimalType.getScale(), fixed.bytes()); + type.writeLong(output, encodeShortScaledValue(decimal, decimalType.getScale())); + } + else { + throw new TrinoException(GENERIC_INTERNAL_ERROR, + format("Unhandled type for %s: %s | value type: %s", javaType.getSimpleName(), type, value.getClass().getName())); + } + } + else if (type.equals(DATE)) { + if (value instanceof SqlDate sqlDate) { + type.writeLong(output, sqlDate.getDays()); + } + else if (value instanceof Integer days) { + ((DateType) type).writeInt(output, days); + } + else { + throw new TrinoException(GENERIC_INTERNAL_ERROR, + format("Unhandled type for %s: %s | value type: %s", javaType.getSimpleName(), type, value.getClass().getName())); + } + } + else if (type.equals(TIMESTAMP_MICROS)) { + type.writeLong(output, toTrinoTimestamp(((Utf8) value).toString())); + } + else if (type.equals(TIME_MICROS)) { + type.writeLong(output, (long) value * PICOSECONDS_PER_MICROSECOND); + } + else { + throw new TrinoException(GENERIC_INTERNAL_ERROR, format("Unhandled type for %s: %s", javaType.getSimpleName(), type)); + } + } + else if (javaType == double.class) { + type.writeDouble(output, ((Number) value).doubleValue()); + } + else if (type.getJavaType() == Int128.class) { + writeObject(output, type, value); + } + else if (javaType == Slice.class) { + writeSlice(output, type, value); + } + else if (javaType == LongTimestamp.class) { + if (value instanceof SqlTimestamp sqlTimestamp) { + // value is read from parquet + // From tests, sqlTimestamp is a UTC epoch that is converted from ZoneId#systemDefault() + // IMPORTANT: Even when session's zoneId != ZoneId#systemDefault(), ZoneId#systemDefault() is used calculate/produce the false UTC. + // The current sqlTimestamp is calculated as such: + // 1. The true UTC timestamp that is stored in file is assumed to be in the local timezone + // 2. Trino will them attempt to convert this to a false UTC by subtracting the timezone's offset (factoring offset rules like DST) + // Hence, to calculate the true UTC, we will just have to reverse the steps + + // Reconstruct the original local wall time from sqlTimestamp's fields + long microsFromSqlTs = sqlTimestamp.getEpochMicros(); + // picosFromSqlTs is defined as "picoseconds within the microsecond" (0 to 999,999) + int picosFromSqlTs = sqlTimestamp.getPicosOfMicros(); + long secondsComponent = microsFromSqlTs / 1_000_000L; + // Storing nanos component separately from seconds component, hence the modulo to remove secondsComponent + int nanosComponent = (int) ((microsFromSqlTs % 1_000_000L) * 1000L + picosFromSqlTs / 1000L); + LocalDateTime originalLocalWallTime = LocalDateTime.ofEpochSecond(secondsComponent, nanosComponent, ZoneOffset.UTC); + + // Determine the ZoneId in which originalLocalWallTime was observed + ZoneId assumedOriginalZoneId = ZoneId.systemDefault(); + + // Convert to true UTC by interpreting the local wall time in its original zone + // This correctly handles DST for that zone at that specific historical date/time. + ZonedDateTime zdtInOriginalZone; + try { + zdtInOriginalZone = originalLocalWallTime.atZone(assumedOriginalZoneId); + } + catch (DateTimeException e) { + // Handle cases where the local time is invalid in the zone (e.g., during DST "spring forward" gap) or ambiguous (during DST "fall back" overlap). + // For now, rethrow or log, as robustly handling this requires a defined policy. + throw new TrinoException(GENERIC_INTERNAL_ERROR, + format("Cannot uniquely or validly map local time %s to zone %s: %s", + originalLocalWallTime, assumedOriginalZoneId, e.getMessage()), e); + } + Instant trueUtcInstant = zdtInOriginalZone.toInstant(); + + // Extract true UTC epoch micros and picos + long trueUtcEpochSeconds = trueUtcInstant.getEpochSecond(); + long trueUtcEpochMicrosContributionFromSeconds; + try { + trueUtcEpochMicrosContributionFromSeconds = Math.multiplyExact(trueUtcEpochSeconds, 1_000_000L); + } + catch (ArithmeticException e) { + // Multiplication could overflow if epochSeconds is approximately more than 292,271 years from epoch + throw new TrinoException(NUMERIC_VALUE_OUT_OF_RANGE, + "Timestamp " + trueUtcInstant + " is too far in the past or future to be represented as microseconds in a long.", e); + } + + long trueUtcEpochMicrosContributionFromNanos = trueUtcInstant.getNano() / 1000L; + long trueUtcEpochMicros; + + try { + trueUtcEpochMicros = Math.addExact(trueUtcEpochMicrosContributionFromSeconds, trueUtcEpochMicrosContributionFromNanos); + } + catch (ArithmeticException e) { + // Addition could also theoretically overflow if epochMicrosContributionFromSeconds is: + // 1. Very close to Long.MAX_VALUE and trueUtcEpochMicrosContributionFromNanos is positive + // 2. Very close to Long.MIN_VALUE and trueUtcEpochMicrosContributionFromNanos is negative + throw new TrinoException(NUMERIC_VALUE_OUT_OF_RANGE, + "Timestamp " + trueUtcInstant + " results in microsecond representation overflow after adding nanosecond component.", e); + } + + int truePicosOfMicros = (trueUtcInstant.getNano() % 1000) * 1000; + ((Fixed12BlockBuilder) output).writeFixed12(trueUtcEpochMicros, truePicosOfMicros); + } + else if (value instanceof Long epochMicros) { + // value is read from log + // epochMicros is in micros, no nanos or picos component + ((Fixed12BlockBuilder) output).writeFixed12(epochMicros, 0); + } + else { + throw new TrinoException(GENERIC_INTERNAL_ERROR, + format("Unhandled type for %s: %s | value type: %s", javaType.getSimpleName(), type, value.getClass().getName())); + } + } + else if (javaType == LongTimestampWithTimeZone.class) { + verify(type.equals(TIMESTAMP_TZ_MICROS)); + long epochMicros = (long) value; + int picosOfMillis = toIntExact(floorMod(epochMicros, MICROSECONDS_PER_MILLISECOND)) * PICOSECONDS_PER_MICROSECOND; + type.writeObject(output, fromEpochMillisAndFraction(floorDiv(epochMicros, MICROSECONDS_PER_MILLISECOND), picosOfMillis, UTC_KEY)); + } + else if (type instanceof ArrayType arrayType) { + writeArray((ArrayBlockBuilder) output, (List) value, arrayType); + } + else if (type instanceof RowType rowType) { + if (value instanceof List list) { + // value is read from parquet + writeRow((RowBlockBuilder) output, rowType, list); + } + else if (value instanceof GenericRecord record) { + // value is read from log + writeRow((RowBlockBuilder) output, rowType, record); + } + else { + throw new TrinoException(GENERIC_INTERNAL_ERROR, + format("Unhandled type for %s: %s | value type: %s", javaType.getSimpleName(), type, value.getClass().getName())); + } + } + else if (type instanceof MapType mapType) { + writeMap((MapBlockBuilder) output, mapType, (Map) value); + } + else { + throw new TrinoException(GENERIC_INTERNAL_ERROR, format("Unhandled type for %s: %s", javaType.getSimpleName(), type)); + } + } + catch (ClassCastException cce) { + throw new TrinoException(GENERIC_INTERNAL_ERROR, format("ClassCastException for type %s: %s with error %s", javaType.getSimpleName(), type, cce)); + } + } + + public static LocalDateTime toLocalDateTime(String datetime) + { + int dotPosition = datetime.indexOf('.'); + if (dotPosition == -1) { + // no sub-second element + return LocalDateTime.from(DateTimeFormatter.ISO_LOCAL_DATE_TIME.parse(datetime)); + } + LocalDateTime result = LocalDateTime.from(DateTimeFormatter.ISO_LOCAL_DATE_TIME.parse(datetime.substring(0, dotPosition))); + // has sub-second element, so convert to nanosecond + String nanosStr = datetime.substring(dotPosition + 1); + int nanoOfSecond = parseInt(nanosStr) * NANO_FACTOR[nanosStr.length()]; + return result.withNano(nanoOfSecond); + } + + public static long toTrinoTimestamp(String datetime) + { + Instant instant = toLocalDateTime(datetime).toInstant(UTC); + return (instant.getEpochSecond() * MICROSECONDS_PER_SECOND) + (instant.getNano() / NANOSECONDS_PER_MICROSECOND); + } + + private static void writeSlice(BlockBuilder output, Type type, Object value) + { + if (type instanceof VarcharType) { + if (value instanceof Utf8) { + type.writeSlice(output, utf8Slice(((Utf8) value).toString())); + } + else if (value instanceof String) { + type.writeSlice(output, utf8Slice((String) value)); + } + else { + type.writeSlice(output, utf8Slice(value.toString())); + } + } + else if (type instanceof VarbinaryType) { + if (value instanceof ByteBuffer) { + type.writeSlice(output, Slices.wrappedHeapBuffer((ByteBuffer) value)); + } + else if (value instanceof SqlVarbinary sqlVarbinary) { + type.writeSlice(output, Slices.wrappedBuffer(sqlVarbinary.getBytes())); + } + else { + throw new TrinoException(GENERIC_INTERNAL_ERROR, + format("Unhandled type for %s: %s | value type: %s", type.getJavaType().getSimpleName(), type, value.getClass().getName())); + } + } + else if (type instanceof CharType) { + String stringValue; + if (value instanceof Utf8) { + stringValue = ((Utf8) value).toString(); + } + else if (value instanceof String) { + stringValue = (String) value; + } + else { + // Fallback: convert any other object to its string representation + stringValue = value.toString(); + } + // IMPORTANT: Char types may be padded with trailing "space" characters to make up for length if the contents are lesser than defined length. + // Need to trim out trailing spaces as Slice representing Char should not have trailing spaces + type.writeSlice(output, utf8Slice(stringValue.trim())); + } + else { + throw new TrinoException(GENERIC_INTERNAL_ERROR, + format("Unhandled type for %s: %s | value type: %s", type.getJavaType().getSimpleName(), type, value.getClass().getName())); + } + } + + private static void writeObject(BlockBuilder output, Type type, Object value) + { + if (type instanceof DecimalType decimalType) { + BigDecimal valueAsBigDecimal; + if (value instanceof SqlDecimal sqlDecimal) { + valueAsBigDecimal = sqlDecimal.toBigDecimal(); + } + else { + throw new TrinoException(GENERIC_INTERNAL_ERROR, + format("Unhandled type for %s: %s | value type: %s", type.getJavaType().getSimpleName(), type, value.getClass().getName())); + } + + Object trinoNativeDecimalValue = Decimals.encodeScaledValue(valueAsBigDecimal, decimalType.getScale()); + type.writeObject(output, trinoNativeDecimalValue); + } + else { + throw new TrinoException(GENERIC_INTERNAL_ERROR, "Unhandled type for Object: " + type.getTypeSignature()); + } + } + + private static void writeArray(ArrayBlockBuilder output, List value, ArrayType arrayType) + { + Type elementType = arrayType.getElementType(); + output.buildEntry(elementBuilder -> { + for (Object element : value) { + appendTo(elementType, element, elementBuilder); + } + }); + } + + private static void writeRow(RowBlockBuilder output, RowType rowType, GenericRecord record) + { + List fields = rowType.getFields(); + output.buildEntry(fieldBuilders -> { + for (int index = 0; index < fields.size(); index++) { + RowType.Field field = fields.get(index); + appendTo(field.getType(), record.get(field.getName().orElse("field" + index)), fieldBuilders.get(index)); + } + }); + } + + private static void writeRow(RowBlockBuilder output, RowType rowType, List list) + { + List fields = rowType.getFields(); + output.buildEntry(fieldBuilders -> { + for (int index = 0; index < fields.size(); index++) { + RowType.Field field = fields.get(index); + appendTo(field.getType(), list.get(index), fieldBuilders.get(index)); + } + }); + } + + private static void writeMap(MapBlockBuilder output, MapType mapType, Map value) + { + Type keyType = mapType.getKeyType(); + Type valueType = mapType.getValueType(); + output.buildEntry((keyBuilder, valueBuilder) -> { + for (Map.Entry entry : value.entrySet()) { + appendTo(keyType, entry.getKey(), keyBuilder); + appendTo(valueType, entry.getValue(), valueBuilder); + } + }); + } + + static class AvroDecimalConverter + { + private static final Conversions.DecimalConversion AVRO_DECIMAL_CONVERSION = new Conversions.DecimalConversion(); + + BigDecimal convert(int precision, int scale, byte[] bytes) + { + Schema schema = new Schema.Parser().parse(format("{\"type\":\"bytes\",\"logicalType\":\"decimal\",\"precision\":%d,\"scale\":%d}", precision, scale)); + return AVRO_DECIMAL_CONVERSION.fromBytes(ByteBuffer.wrap(bytes), schema, schema.getLogicalType()); + } + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/HudiTableTypeUtils.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/HudiTableTypeUtils.java new file mode 100644 index 0000000000000..c26dd4ca98a84 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/HudiTableTypeUtils.java @@ -0,0 +1,44 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.util; + +import io.trino.plugin.hudi.HudiErrorCode; +import io.trino.spi.TrinoException; +import org.apache.hudi.common.model.HoodieTableType; + +public class HudiTableTypeUtils +{ + private static final String HUDI_PARQUET_INPUT_FORMAT = "org.apache.hudi.hadoop.HoodieParquetInputFormat"; + private static final String HUDI_PARQUET_REALTIME_INPUT_FORMAT = "org.apache.hudi.hadoop.realtime.HoodieParquetRealtimeInputFormat"; + private static final String HUDI_INPUT_FORMAT = "com.uber.hoodie.hadoop.HoodieInputFormat"; + private static final String HUDI_REALTIME_INPUT_FORMAT = "com.uber.hoodie.hadoop.realtime.HoodieRealtimeInputFormat"; + + private HudiTableTypeUtils() + { + } + + public static HoodieTableType fromInputFormat(String inputFormat) + { + switch (inputFormat) { + case HUDI_PARQUET_INPUT_FORMAT: + case HUDI_INPUT_FORMAT: + return HoodieTableType.COPY_ON_WRITE; + case HUDI_PARQUET_REALTIME_INPUT_FORMAT: + case HUDI_REALTIME_INPUT_FORMAT: + return HoodieTableType.MERGE_ON_READ; + default: + throw new TrinoException(HudiErrorCode.HUDI_UNSUPPORTED_TABLE_TYPE, "Table has an unsupported input format: " + inputFormat); + } + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/SynthesizedColumnHandler.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/SynthesizedColumnHandler.java new file mode 100644 index 0000000000000..5d55adb5577c5 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/SynthesizedColumnHandler.java @@ -0,0 +1,320 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.util; + +import com.google.common.collect.ImmutableMap; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.plugin.hive.HivePartitionKey; +import io.trino.plugin.hudi.HudiSplit; +import io.trino.plugin.hudi.file.HudiFile; +import io.trino.spi.TrinoException; +import io.trino.spi.block.Block; +import io.trino.spi.block.BlockBuilder; +import io.trino.spi.block.RunLengthEncodedBlock; +import io.trino.spi.type.BigintType; +import io.trino.spi.type.BooleanType; +import io.trino.spi.type.DateType; +import io.trino.spi.type.DecimalType; +import io.trino.spi.type.IntegerType; +import io.trino.spi.type.SqlDecimal; +import io.trino.spi.type.TimestampWithTimeZoneType; +import io.trino.spi.type.Type; +import io.trino.spi.type.VarcharType; + +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.format.DateTimeParseException; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static io.airlift.slice.Slices.utf8Slice; +import static io.trino.metastore.Partitions.makePartName; +import static io.trino.plugin.hive.HiveColumnHandle.FILE_MODIFIED_TIME_COLUMN_NAME; +import static io.trino.plugin.hive.HiveColumnHandle.FILE_SIZE_COLUMN_NAME; +import static io.trino.plugin.hive.HiveColumnHandle.PARTITION_COLUMN_NAME; +import static io.trino.plugin.hive.HiveColumnHandle.PATH_COLUMN_NAME; +import static io.trino.spi.StandardErrorCode.GENERIC_INTERNAL_ERROR; +import static io.trino.spi.type.DateTimeEncoding.packDateTimeWithZone; +import static io.trino.spi.type.Decimals.writeBigDecimal; +import static io.trino.spi.type.Decimals.writeShortDecimal; +import static io.trino.spi.type.TimeZoneKey.UTC_KEY; +import static java.lang.Math.toIntExact; +import static java.lang.String.format; + +/** + * Handles synthesized (virtual) columns in Hudi tables, such as partition columns and metadata (not hudi metadata) + * columns. + */ +public class SynthesizedColumnHandler +{ + private final Map strategies; + private final SplitMetadata splitMetadata; + + public static SynthesizedColumnHandler create(HudiSplit hudiSplit) + { + return new SynthesizedColumnHandler(hudiSplit); + } + + /** + * Constructs a SynthesizedColumnHandler with the given partition keys. + */ + public SynthesizedColumnHandler(HudiSplit hudiSplit) + { + this.splitMetadata = SplitMetadata.of(hudiSplit); + ImmutableMap.Builder builder = ImmutableMap.builder(); + initSynthesizedColStrategies(builder); + initPartitionKeyStrategies(builder, hudiSplit); + strategies = builder.buildOrThrow(); + } + + /** + * Initializes strategies for synthesized columns. + */ + private void initSynthesizedColStrategies(ImmutableMap.Builder builder) + { + builder.put(PARTITION_COLUMN_NAME, (blockBuilder, _) -> + VarcharType.VARCHAR.writeSlice(blockBuilder, + utf8Slice(toPartitionName(splitMetadata.getPartitionKeyVals())))); + + builder.put(PATH_COLUMN_NAME, (blockBuilder, _) -> + VarcharType.VARCHAR.writeSlice(blockBuilder, utf8Slice(splitMetadata.getFilePath()))); + + builder.put(FILE_SIZE_COLUMN_NAME, (blockBuilder, _) -> + BigintType.BIGINT.writeLong(blockBuilder, splitMetadata.getFileSize())); + + builder.put(FILE_MODIFIED_TIME_COLUMN_NAME, (blockBuilder, _) -> { + long packedTimestamp = packDateTimeWithZone( + splitMetadata.getFileModificationTime(), UTC_KEY); + TimestampWithTimeZoneType.TIMESTAMP_TZ_MILLIS.writeLong(blockBuilder, packedTimestamp); + }); + } + + /** + * Initializes strategies for partition columns. + */ + private void initPartitionKeyStrategies(ImmutableMap.Builder builder, + HudiSplit hudiSplit) + { + // Type is ignored here as input partitionKey.value() is always passed as a String type + for (HivePartitionKey partitionKey : hudiSplit.getPartitionKeys()) { + builder.put(partitionKey.name(), (blockBuilder, targetType) -> + appendPartitionKey(targetType, partitionKey.value(), blockBuilder)); + } + } + + /** + * Checks if a column is a synthesized column. + * + * @param columnName The column name. + * @return True if the column is synthesized, false otherwise. + */ + public boolean isSynthesizedColumn(String columnName) + { + return strategies.containsKey(columnName); + } + + /** + * Checks if a Hive column handle represents a synthesized column. + * + * @param columnHandle The Hive column handle. + * @return True if the column is synthesized, false otherwise. + */ + public boolean isSynthesizedColumn(HiveColumnHandle columnHandle) + { + return isSynthesizedColumn(columnHandle.getName()); + } + + /** + * Retrieves the strategy for a given synthesized column. + * + * @param columnHandle The Hive column handle. + * @return The corresponding column strategy, or null if not found. + */ + public SynthesizedColumnStrategy getColumnStrategy(HiveColumnHandle columnHandle) + { + return strategies.get(columnHandle.getName()); + } + + /** + * Retrieves the count of synthesized column strategies currently present. + * + * @return The number of synthesized column strategies. + */ + public int getSynthesizedColumnCount() + { + return strategies.size(); + } + + /** + * Converts partition key-value pairs into a partition name string. + * + * @param partitionKeyVals Map of partition key-value pairs. + * @return Partition name string. + */ + private static String toPartitionName(Map partitionKeyVals) + { + return makePartName(List.copyOf(partitionKeyVals.keySet()), List.copyOf(partitionKeyVals.values())); + } + + /** + * Creates a {@link Block} for the given synthesized column, typically a {@link RunLengthEncodedBlock} as the synthesized value is constant for all positions within a split. + * + * @param columnHandle The handle of the synthesized column to create a block for. + * @param positionCount The number of positions (rows) the resulting block should represent. + * @return A {@link Block} containing the synthesized values. + */ + public Block createRleSynthesizedBlock(HiveColumnHandle columnHandle, int positionCount) + { + Type columnType = columnHandle.getType(); + + if (positionCount == 0) { + return columnType.createBlockBuilder(null, 0).build(); + } + + SynthesizedColumnStrategy strategy = getColumnStrategy(columnHandle); + + // Because this builder will only hold the single constant value + int expectedEntriesForValueBlock = 1; + BlockBuilder valueBuilder = columnType.createBlockBuilder(null, expectedEntriesForValueBlock); + + if (strategy == null) { + valueBuilder.appendNull(); + } + else { + // Apply the strategy to write the single value into the builder + strategy.appendToBlock(valueBuilder, columnType); + } + Block valueBlock = valueBuilder.build(); + + return RunLengthEncodedBlock.create(valueBlock, positionCount); + } + + /** + * Represents metadata about split being processed. + * Splits are assumed to be in the same partition. + */ + public static class SplitMetadata + { + private final Map partitionKeyVals; + private final String filePath; + private final long fileSize; + private final long modifiedTime; + + /** + * Creates SplitMetadata from a Hudi split and partition key list. + */ + public static SplitMetadata of(HudiSplit hudiSplit) + { + return new SplitMetadata(hudiSplit); + } + + public SplitMetadata(HudiSplit hudiSplit) + { + this.partitionKeyVals = hudiSplit.getPartitionKeys().stream() + .collect(Collectors.toMap(HivePartitionKey::name, HivePartitionKey::value)); + // Parquet files will be prioritised over log files + HudiFile hudiFile = hudiSplit.getBaseFile().isPresent() + ? hudiSplit.getBaseFile().get() + : hudiSplit.getLogFiles().getFirst(); + this.filePath = hudiFile.getPath(); + this.fileSize = hudiFile.getFileSize(); + this.modifiedTime = hudiFile.getModificationTime(); + } + + public Map getPartitionKeyVals() + { + return partitionKeyVals; + } + + public String getFilePath() + { + return filePath; + } + + public long getFileSize() + { + return fileSize; + } + + public long getFileModificationTime() + { + return modifiedTime; + } + } + + /** + * Helper function to prefill BlockBuilders with values from PartitionKeys which are in the String type. + * This function handles the casting of String type the actual column type. + */ + private static void appendPartitionKey(Type targetType, String value, BlockBuilder blockBuilder) + { + if (value == null) { + blockBuilder.appendNull(); + return; + } + + if (targetType instanceof VarcharType varcharType) { + varcharType.writeSlice(blockBuilder, utf8Slice(value)); + } + else if (targetType instanceof IntegerType integerType) { + integerType.writeInt(blockBuilder, Integer.parseInt(value)); + } + else if (targetType instanceof BigintType bigintType) { + bigintType.writeLong(blockBuilder, Long.parseLong(value)); + } + else if (targetType instanceof BooleanType booleanType) { + booleanType.writeBoolean(blockBuilder, Boolean.parseBoolean(value)); + } + else if (targetType instanceof DecimalType decimalType) { + SqlDecimal sqlDecimal = SqlDecimal.decimal(value, decimalType); + BigDecimal bigDecimal = sqlDecimal.toBigDecimal(); + + if (decimalType.isShort()) { + // For short decimals, get the unscaled long value + // SqlDecimal.toBigDecimal() is used for consistency with the original SqlDecimal path + // The unscaled value of a Trino short decimal (precision <= 18) fits in a long + writeShortDecimal(blockBuilder, bigDecimal.unscaledValue().longValue()); + } + else { + // For long decimals, use the BigDecimal representation obtained from SqlDecimal. + writeBigDecimal(decimalType, blockBuilder, bigDecimal); + } + } + else if (targetType instanceof DateType dateType) { + try { + // Parse the date string using "YYYY-MM-DD" format + LocalDate localDate = LocalDate.parse(value); + // Convert LocalDate to days since epoch where LocalDate#toEpochDay() returns a long + int daysSinceEpoch = toIntExact(localDate.toEpochDay()); + dateType.writeInt(blockBuilder, daysSinceEpoch); + } + catch (DateTimeParseException e) { + // Handle parsing error + throw new TrinoException(GENERIC_INTERNAL_ERROR, + format("Invalid date string format for DATE type: '%s'. Expected format like YYYY-MM-DD. Details: %s", + value, e.getMessage()), e); + } + catch (ArithmeticException e) { + // Handle potential overflow if toEpochDay() result is outside int range + throw new TrinoException(GENERIC_INTERNAL_ERROR, + format("Date string '%s' results in a day count out of integer range for DATE type. Details: %s", + value, e.getMessage()), e); + } + } + else { + throw new TrinoException(GENERIC_INTERNAL_ERROR, format("Unknown target type '%s' for column '%s'", targetType, value)); + } + } +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/SynthesizedColumnStrategy.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/SynthesizedColumnStrategy.java new file mode 100644 index 0000000000000..916e6cb83e4fd --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/SynthesizedColumnStrategy.java @@ -0,0 +1,25 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.util; + +import io.trino.spi.block.BlockBuilder; +import io.trino.spi.type.Type; + +/** + * Strategy interface for handling different types of synthesized columns + */ +public interface SynthesizedColumnStrategy +{ + void appendToBlock(BlockBuilder blockBuilder, Type type); +} diff --git a/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/TupleDomainUtils.java b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/TupleDomainUtils.java new file mode 100644 index 0000000000000..4cc8091c54b93 --- /dev/null +++ b/hudi-trino-plugin/src/main/java/io/trino/plugin/hudi/util/TupleDomainUtils.java @@ -0,0 +1,162 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.util; + +import io.trino.spi.predicate.Domain; +import io.trino.spi.predicate.TupleDomain; + +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +public class TupleDomainUtils +{ + // Utility classes should not have a public or default constructor. + private TupleDomainUtils() {} + + /** + * Get all columns that are referenced in the provided tupleDomain predicates. + */ + public static List getReferencedColumns(TupleDomain tupleDomain) + { + if (tupleDomain.getDomains().isEmpty()) { + return List.of(); + } + return tupleDomain.getDomains().get().keySet().stream().toList(); + } + + /** + * Check if all of the provided source fields are referenced in the tupleDomain predicates. + */ + public static boolean areAllFieldsReferenced(TupleDomain tupleDomain, List sourceFields) + { + Set referenceColSet = new HashSet<>(TupleDomainUtils.getReferencedColumns(tupleDomain)); + Set sourceFieldSet = new HashSet<>(sourceFields); + + return referenceColSet.containsAll(sourceFieldSet); + } + + /** + * Check if at least one of the provided source field is referenced in the tupleDomain predicates. + */ + public static boolean areSomeFieldsReferenced(TupleDomain tupleDomain, List sourceFields) + { + Set referenceColSet = new HashSet<>(TupleDomainUtils.getReferencedColumns(tupleDomain)); + for (String sourceField : sourceFields) { + if (referenceColSet.contains(sourceField)) { + return true; + } + } + return false; + } + + /** + * Check all columns referencing sourceFields are either IN or EQUAL predicates. + */ + public static boolean areDomainsInOrEqualOnly(TupleDomain tupleDomain, List sourceFields) + { + // If no recordKeys or no recordKeyDomains, return empty list + if (sourceFields == null || sourceFields.isEmpty() || tupleDomain.isAll() || tupleDomain.isNone()) { + return false; + } + + Optional> domainsOpt = tupleDomain.getDomains(); + // Not really necessary, as tupleDomain.isNone() already checks for this + if (domainsOpt.isEmpty()) { + return false; + } + + boolean areReferencedInOrEqual = true; + for (String sourceField : sourceFields) { + Domain domain = domainsOpt.get().get(sourceField); + // For cases where sourceField does not exist in tupleDomain + if (domain == null) { + return false; + } + areReferencedInOrEqual &= (domain.isSingleValue() || domain.getValues().isDiscreteSet()); + } + return areReferencedInOrEqual; + } + + /** + * Checks if a specific Domain represents ONLY an 'IS NULL' constraint. + * This means null is allowed, and no other non-null values are allowed. + * Important: Not handling `= NULL` predicates as colA `= NULL` does not evaluate to TRUE or FALSE, it evaluates to UNKNOWN, which is treated as false. + * + * @param domain The Domain to check. + * @return true if the domain represents 'IS NULL', false otherwise. + */ + private static boolean isOnlyNullConstraint(Domain domain) + { + // Null must be allowed, and the ValueSet must allow *no* non-null values. + return domain.isNullAllowed() && domain.getValues().isNone(); + } + + /** + * Checks if a specific Domain represents ONLY an 'IS NOT NULL' constraint. + * This means null is not allowed, and all non-null values are allowed (no other range/value restrictions). + * Important: Not handling `!= NULL` or `<> NULL` predicates as this does not evaluate to TRUE or FALSE, it evaluates to UNKNOWN, which is treated as false. + * + * @param domain The Domain to check. + * @return true if the domain represents 'IS NOT NULL', false otherwise. + */ + private static boolean isOnlyNotNullConstraint(Domain domain) + { + // Null must *NOT* be allowed, and the ValueSet must allow *ALL* possible non-null values. + return !domain.isNullAllowed() && domain.getValues().isAll(); + } + + /** + * Overloaded function to test if a Domain contains null checks or not. + * + * @param domain The Domain to check. + * @return true if the domain represents 'IS NOT NULL' or 'IS NULL', false otherwise. + */ + public static boolean hasSimpleNullCheck(Domain domain) + { + return isOnlyNullConstraint(domain) || isOnlyNotNullConstraint(domain); + } + + /** + * Checks if a TupleDomain contains at least one column Domain that represents + * exclusively an 'IS NULL' or 'IS NOT NULL' constraint. + * + * @param tupleDomain The TupleDomain to inspect. + * @return true if a simple null check constraint exists, false otherwise. + */ + public static boolean hasSimpleNullCheck(TupleDomain tupleDomain) + { + // A 'None' TupleDomain implies contradiction, not a simple null check + if (tupleDomain.isNone()) { + return false; + } + Optional> domains = tupleDomain.getDomains(); + // An 'All' TupleDomain has no constraints + if (domains.isEmpty()) { + return false; + } + + // Iterate through the domains for each column in the TupleDomain + for (Domain domain : domains.get().values()) { + if (hasSimpleNullCheck(domain)) { + // Found a domain that is purely an IS NULL or IS NOT NULL check + return true; + } + } + // No domain matched the simple null check patterns + return false; + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/SessionBuilder.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/SessionBuilder.java new file mode 100644 index 0000000000000..6a7d80e98e399 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/SessionBuilder.java @@ -0,0 +1,137 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import io.trino.Session; + +import static io.trino.SystemSessionProperties.ENABLE_DYNAMIC_FILTERING; +import static io.trino.SystemSessionProperties.JOIN_DISTRIBUTION_TYPE; +import static io.trino.plugin.hudi.HudiSessionProperties.COLUMN_STATS_INDEX_ENABLED; +import static io.trino.plugin.hudi.HudiSessionProperties.COLUMN_STATS_WAIT_TIMEOUT; +import static io.trino.plugin.hudi.HudiSessionProperties.DYNAMIC_FILTERING_WAIT_TIMEOUT; +import static io.trino.plugin.hudi.HudiSessionProperties.METADATA_TABLE_ENABLED; +import static io.trino.plugin.hudi.HudiSessionProperties.PARTITION_STATS_INDEX_ENABLED; +import static io.trino.plugin.hudi.HudiSessionProperties.QUERY_PARTITION_FILTER_REQUIRED; +import static io.trino.plugin.hudi.HudiSessionProperties.RECORD_LEVEL_INDEX_ENABLED; +import static io.trino.plugin.hudi.HudiSessionProperties.SECONDARY_INDEX_ENABLED; +import static io.trino.plugin.hudi.HudiSessionProperties.SECONDARY_INDEX_WAIT_TIMEOUT; +import static io.trino.plugin.hudi.HudiSessionProperties.TABLE_STATISTICS_ENABLED; +import static java.util.Objects.requireNonNull; + +public class SessionBuilder +{ + private final Session.SessionBuilder sessionBuilder; + private final String catalogName; + + private SessionBuilder(Session session) + { + requireNonNull(session, "Initial session cannot be null"); + this.sessionBuilder = Session.builder(session); + this.catalogName = session.getCatalog() + .orElseThrow(() -> new IllegalStateException("Session must have a catalog to configure properties.")); + } + + /** + * Creates a new SessionPropertyConfigurator from an existing session. + * + * @param session The base session to build upon. + * @return A new instance of SessionPropertyConfigurator. + */ + public static SessionBuilder from(Session session) + { + return new SessionBuilder(session); + } + + private SessionBuilder setCatalogProperty(String propertyName, String propertyValue) + { + this.sessionBuilder.setCatalogSessionProperty(catalogName, propertyName, propertyValue); + return this; + } + + private SessionBuilder setSystemProperty(String propertyName, String propertyValue) + { + this.sessionBuilder.setSystemProperty(propertyName, propertyValue); + return this; + } + + /** + * Builds the new Session with the configured properties. + * + * @return The newly configured Session object. + */ + public Session build() + { + return this.sessionBuilder.build(); + } + + public SessionBuilder withJoinDistributionType(String joinDistributionType) + { + return setSystemProperty(JOIN_DISTRIBUTION_TYPE, joinDistributionType); + } + + public SessionBuilder withPartitionFilterRequired(boolean required) + { + return setCatalogProperty(QUERY_PARTITION_FILTER_REQUIRED, String.valueOf(required)); + } + + public SessionBuilder withTableStatisticsEnabled(boolean enabled) + { + return setCatalogProperty(TABLE_STATISTICS_ENABLED, String.valueOf(enabled)); + } + + public SessionBuilder withMdtEnabled(boolean enabled) + { + return setCatalogProperty(METADATA_TABLE_ENABLED, String.valueOf(enabled)); + } + + public SessionBuilder withDynamicFilterEnabled(boolean isDynamicFilterEnabled) + { + return setSystemProperty(ENABLE_DYNAMIC_FILTERING, String.valueOf(isDynamicFilterEnabled)); + } + + public SessionBuilder withDynamicFilterTimeout(String durationProp) + { + return setCatalogProperty(DYNAMIC_FILTERING_WAIT_TIMEOUT, durationProp); + } + + public SessionBuilder withColStatsIndexEnabled(boolean enabled) + { + return setCatalogProperty(COLUMN_STATS_INDEX_ENABLED, String.valueOf(enabled)); + } + + public SessionBuilder withRecordLevelIndexEnabled(boolean enabled) + { + return setCatalogProperty(RECORD_LEVEL_INDEX_ENABLED, String.valueOf(enabled)); + } + + public SessionBuilder withSecondaryIndexEnabled(boolean enabled) + { + return setCatalogProperty(SECONDARY_INDEX_ENABLED, String.valueOf(enabled)); + } + + public SessionBuilder withPartitionStatsIndexEnabled(boolean enabled) + { + return setCatalogProperty(PARTITION_STATS_INDEX_ENABLED, String.valueOf(enabled)); + } + + public SessionBuilder withColumnStatsTimeout(String durationProp) + { + return setCatalogProperty(COLUMN_STATS_WAIT_TIMEOUT, durationProp); + } + + public SessionBuilder withSecondaryIndexTimeout(String durationProp) + { + return setCatalogProperty(SECONDARY_INDEX_WAIT_TIMEOUT, durationProp); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConfig.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConfig.java index 746b3c05f7134..5e07fedd920b1 100644 --- a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConfig.java +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiConfig.java @@ -16,6 +16,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import io.airlift.units.DataSize; +import io.airlift.units.Duration; import org.junit.jupiter.api.Test; import java.util.Map; @@ -32,17 +33,30 @@ public void testDefaults() { assertRecordedDefaults(recordDefaults(HudiConfig.class) .setColumnsToHide(ImmutableList.of()) + .setTableStatisticsEnabled(true) + .setMetadataEnabled(false) .setUseParquetColumnNames(true) + .setUseParquetColumnIndex(false) + .setTableStatisticsExecutorParallelism(4) .setSizeBasedSplitWeightsEnabled(true) .setStandardSplitWeightSize(DataSize.of(128, MEGABYTE)) .setMinimumAssignedSplitWeight(0.05) + .setTargetSplitSize(DataSize.of(128, MEGABYTE)) .setMaxSplitsPerSecond(Integer.MAX_VALUE) .setMaxOutstandingSplits(1000) .setSplitLoaderParallelism(4) .setSplitGeneratorParallelism(4) .setPerTransactionMetastoreCacheMaximumSize(2000) .setQueryPartitionFilterRequired(false) - .setIgnoreAbsentPartitions(false)); + .setIgnoreAbsentPartitions(false) + .setRecordLevelIndexEnabled(true) + .setSecondaryIndexEnabled(true) + .setColumnStatsIndexEnabled(true) + .setPartitionStatsIndexEnabled(true) + .setDynamicFilteringWaitTimeout(Duration.valueOf("1s")) + .setColumnStatsWaitTimeout(Duration.valueOf("1s")) + .setRecordIndexWaitTimeout(Duration.valueOf("2s")) + .setSecondaryIndexWaitTimeout(Duration.valueOf("2s"))); } @Test @@ -50,10 +64,15 @@ public void testExplicitPropertyMappings() { Map properties = ImmutableMap.builder() .put("hudi.columns-to-hide", "_hoodie_record_key") + .put("hudi.table-statistics-enabled", "false") + .put("hudi.metadata-enabled", "true") .put("hudi.parquet.use-column-names", "false") + .put("hudi.parquet.use-column-index", "true") + .put("hudi.table-statistics-executor-parallelism", "16") .put("hudi.size-based-split-weights-enabled", "false") .put("hudi.standard-split-weight-size", "64MB") .put("hudi.minimum-assigned-split-weight", "0.1") + .put("hudi.target-split-size", "32MB") .put("hudi.max-splits-per-second", "100") .put("hudi.max-outstanding-splits", "100") .put("hudi.split-loader-parallelism", "16") @@ -61,21 +80,42 @@ public void testExplicitPropertyMappings() .put("hudi.per-transaction-metastore-cache-maximum-size", "1000") .put("hudi.query-partition-filter-required", "true") .put("hudi.ignore-absent-partitions", "true") + .put("hudi.index.record-level-index-enabled", "false") + .put("hudi.index.secondary-index-enabled", "false") + .put("hudi.index.column-stats-index-enabled", "false") + .put("hudi.index.partition-stats-index-enabled", "false") + .put("hudi.dynamic-filtering.wait-timeout", "2s") + .put("hudi.index.column-stats.wait-timeout", "2s") + .put("hudi.index.record-index.wait-timeout", "1s") + .put("hudi.index.secondary-index.wait-timeout", "1s") .buildOrThrow(); HudiConfig expected = new HudiConfig() .setColumnsToHide(ImmutableList.of("_hoodie_record_key")) + .setTableStatisticsEnabled(false) + .setMetadataEnabled(true) .setUseParquetColumnNames(false) + .setUseParquetColumnIndex(true) + .setTableStatisticsExecutorParallelism(16) .setSizeBasedSplitWeightsEnabled(false) .setStandardSplitWeightSize(DataSize.of(64, MEGABYTE)) .setMinimumAssignedSplitWeight(0.1) + .setTargetSplitSize(DataSize.of(32, MEGABYTE)) .setMaxSplitsPerSecond(100) .setMaxOutstandingSplits(100) .setSplitLoaderParallelism(16) .setSplitGeneratorParallelism(32) .setPerTransactionMetastoreCacheMaximumSize(1000) .setQueryPartitionFilterRequired(true) - .setIgnoreAbsentPartitions(true); + .setIgnoreAbsentPartitions(true) + .setRecordLevelIndexEnabled(false) + .setSecondaryIndexEnabled(false) + .setColumnStatsIndexEnabled(false) + .setPartitionStatsIndexEnabled(false) + .setDynamicFilteringWaitTimeout(Duration.valueOf("2s")) + .setColumnStatsWaitTimeout(Duration.valueOf("2s")) + .setRecordIndexWaitTimeout(Duration.valueOf("1s")) + .setSecondaryIndexWaitTimeout(Duration.valueOf("1s")); assertFullMapping(properties, expected); } diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiPageSource.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiPageSource.java new file mode 100644 index 0000000000000..8bb46f8fb3f5a --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiPageSource.java @@ -0,0 +1,28 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import io.trino.spi.connector.ConnectorPageSource; +import org.junit.jupiter.api.Test; + +import static io.trino.spi.testing.InterfaceTestUtils.assertAllMethodsOverridden; + +public class TestHudiPageSource +{ + @Test + public void testEverythingImplemented() + { + assertAllMethodsOverridden(ConnectorPageSource.class, HudiPageSource.class); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiPageSourceProviderTest.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiPageSourceProviderTest.java new file mode 100644 index 0000000000000..8966553939742 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiPageSourceProviderTest.java @@ -0,0 +1,242 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi; + +import io.trino.metastore.HiveType; +import io.trino.plugin.hive.HiveColumnHandle; +import io.trino.spi.type.BigintType; +import io.trino.spi.type.Type; +import org.apache.parquet.schema.LogicalTypeAnnotation; +import org.apache.parquet.schema.MessageType; +import org.apache.parquet.schema.PrimitiveType; +import org.apache.parquet.schema.Types; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Optional; + +import static io.trino.plugin.hudi.HudiPageSourceProvider.remapColumnIndicesToPhysical; +import static io.trino.spi.type.DoubleType.DOUBLE; +import static io.trino.spi.type.IntegerType.INTEGER; +import static io.trino.spi.type.VarcharType.VARCHAR; +import static org.apache.parquet.schema.Type.Repetition.OPTIONAL; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; + +class TestHudiPageSourceProviderTest +{ + @Test + public void testRemapSimpleMatchCaseInsensitive() + { + // Physical Schema: [col_a (int), col_b (string)] + MessageType fileSchema = new MessageType("file_schema", + Types.primitive(PrimitiveType.PrimitiveTypeName.INT32, OPTIONAL).named("col_a"), + Types.primitive(PrimitiveType.PrimitiveTypeName.BINARY, OPTIONAL).as(LogicalTypeAnnotation.stringType()).named("col_b")); + + // Requested Columns (same order, different case) + List requestedColumns = List.of( + createDummyHandle("COL_A", 0, HiveType.HIVE_INT, INTEGER), + createDummyHandle("COL_B", 1, HiveType.HIVE_STRING, VARCHAR)); + + // Perform remapping (case-insensitive) + List remapped = remapColumnIndicesToPhysical(fileSchema, requestedColumns, false); + + assertThat(remapped).hasSize(2); + // First requested column "COL_A" should map to physical index 0 + assertHandle(remapped.get(0), "COL_A", 0, HiveType.HIVE_INT, INTEGER); + // Second requested column "COL_B" should map to physical index 1 + assertHandle(remapped.get(1), "COL_B", 1, HiveType.HIVE_STRING, VARCHAR); + } + + @Test + public void testRemapSimpleMatchCaseSensitive() + { + // Physical Schema: [col_a (int), Col_B (string)] - Note the case difference + MessageType fileSchema = new MessageType("file_schema", + Types.primitive(PrimitiveType.PrimitiveTypeName.INT32, OPTIONAL).named("col_a"), + Types.primitive(PrimitiveType.PrimitiveTypeName.BINARY, OPTIONAL).as(LogicalTypeAnnotation.stringType()).named("Col_B")); + + // Requested Columns (matching case) + List requestedColumns = List.of( + createDummyHandle("col_a", 0, HiveType.HIVE_INT, INTEGER), + createDummyHandle("Col_B", 1, HiveType.HIVE_STRING, VARCHAR)); + + // Perform remapping (case-sensitive) + List remapped = remapColumnIndicesToPhysical(fileSchema, requestedColumns, true); + + assertThat(remapped).hasSize(2); + assertHandle(remapped.get(0), "col_a", 0, HiveType.HIVE_INT, INTEGER); + assertHandle(remapped.get(1), "Col_B", 1, HiveType.HIVE_STRING, VARCHAR); + } + + @Test + public void testRemapCaseSensitiveMismatch() + { + // Physical Schema: [col_a (int), col_b (string)] + MessageType fileSchema = new MessageType("file_schema", + Types.primitive(PrimitiveType.PrimitiveTypeName.INT32, OPTIONAL).named("col_a"), + Types.primitive(PrimitiveType.PrimitiveTypeName.BINARY, OPTIONAL).as(LogicalTypeAnnotation.stringType()).named("col_b")); + + // Requested Columns (different case) + List requestedColumns = List.of( + createDummyHandle("COL_A", 0, HiveType.HIVE_INT, INTEGER), // This will mismatch + createDummyHandle("col_b", 1, HiveType.HIVE_STRING, VARCHAR)); + + // Perform remapping (case-sensitive) - Expect NPE because "COL_A" won't be found + assertThatThrownBy(() -> remapColumnIndicesToPhysical(fileSchema, requestedColumns, true)) + .isInstanceOf(NullPointerException.class); // Check the exception type + } + + @Test + public void testRemapDifferentOrder() + { + // Physical Schema: [id (int), name (string), timestamp (long)] + MessageType fileSchema = new MessageType("file_schema", + Types.primitive(PrimitiveType.PrimitiveTypeName.INT32, OPTIONAL).named("id"), + Types.primitive(PrimitiveType.PrimitiveTypeName.BINARY, OPTIONAL).as(LogicalTypeAnnotation.stringType()).named("name"), + Types.primitive(PrimitiveType.PrimitiveTypeName.INT64, OPTIONAL).named("timestamp")); + + // Requested Columns (different order) + List requestedColumns = List.of( + // Original index irrelevant + createDummyHandle("name", 99, HiveType.HIVE_STRING, VARCHAR), + createDummyHandle("timestamp", 5, HiveType.HIVE_LONG, BigintType.BIGINT), + createDummyHandle("id", 0, HiveType.HIVE_INT, INTEGER)); + + // Perform remapping (case-insensitive) + List remapped = remapColumnIndicesToPhysical(fileSchema, requestedColumns, false); + + assertThat(remapped).hasSize(3); + // First requested "name" -> physical index 1 + assertHandle(remapped.get(0), "name", 1, HiveType.HIVE_STRING, VARCHAR); + // Second requested "timestamp" -> physical index 2 + assertHandle(remapped.get(1), "timestamp", 2, HiveType.HIVE_LONG, BigintType.BIGINT); + // Third requested "id" -> physical index 0 + assertHandle(remapped.get(2), "id", 0, HiveType.HIVE_INT, INTEGER); + } + + @Test + public void testRemapSubset() + { + // Physical Schema: [col_a, col_b, col_c, col_d] + MessageType fileSchema = new MessageType("file_schema", + Types.primitive(PrimitiveType.PrimitiveTypeName.INT32, OPTIONAL).named("col_a"), + Types.primitive(PrimitiveType.PrimitiveTypeName.BINARY, OPTIONAL).as(LogicalTypeAnnotation.stringType()).named("col_b"), + Types.primitive(PrimitiveType.PrimitiveTypeName.BOOLEAN, OPTIONAL).named("col_c"), + Types.primitive(PrimitiveType.PrimitiveTypeName.DOUBLE, OPTIONAL).named("col_d")); + + // Requested Columns (subset and different order) + List requestedColumns = List.of( + createDummyHandle("col_d", 1, HiveType.HIVE_DOUBLE, DOUBLE), + createDummyHandle("col_a", 0, HiveType.HIVE_INT, INTEGER)); + + // Perform remapping (case-insensitive) + List remapped = remapColumnIndicesToPhysical(fileSchema, requestedColumns, false); + + assertThat(remapped).hasSize(2); + // First requested "col_d" -> physical index 3 + assertHandle(remapped.get(0), "col_d", 3, HiveType.HIVE_DOUBLE, DOUBLE); + // Second requested "col_a" -> physical index 0 + assertHandle(remapped.get(1), "col_a", 0, HiveType.HIVE_INT, INTEGER); + } + + @Test + public void testRemapEmptyRequested() + { + // Physical Schema: [col_a, col_b] + MessageType fileSchema = new MessageType("file_schema", + Types.primitive(PrimitiveType.PrimitiveTypeName.INT32, OPTIONAL).named("col_a"), + Types.primitive(PrimitiveType.PrimitiveTypeName.BINARY, OPTIONAL).as(LogicalTypeAnnotation.stringType()).named("col_b")); + + // Requested Columns (empty list) + List requestedColumns = List.of(); + + // Perform remapping + List remapped = remapColumnIndicesToPhysical(fileSchema, requestedColumns, false); + + assertThat(remapped).isEmpty(); + } + + @Test + public void testRemapColumnNotFound() + { + // Physical Schema: [col_a] + MessageType fileSchema = new MessageType("file_schema", + Types.primitive(PrimitiveType.PrimitiveTypeName.INT32, OPTIONAL).named("col_a")); + + // Requested Columns (includes a non-existent column) + List requestedColumns = List.of( + createDummyHandle("col_a", 0, HiveType.HIVE_INT, INTEGER), + // Not in schema + createDummyHandle("col_x", 1, HiveType.HIVE_STRING, VARCHAR)); + + // Perform remapping (case-insensitive) - Expect NPE because "col_x" won't be found + assertThatThrownBy(() -> remapColumnIndicesToPhysical(fileSchema, requestedColumns, false)) + .isInstanceOf(NullPointerException.class); + } + + /** + * Creates a basic HiveColumnHandle for testing. + * Assumes REGULAR column type and no projection info or comments. + * The initial hiveColumnIndex is often irrelevant for this specific test, as we are testing the remapping logic. + * + * @param name Name of the column handle + * @param initialIndex The original index before remapping which might not be the physical one + * @param hiveType Hive type of column handle + * @param trinoType Trino type of column handle + */ + private HiveColumnHandle createDummyHandle( + String name, + int initialIndex, + HiveType hiveType, + Type trinoType) + { + return new HiveColumnHandle( + name, + initialIndex, + hiveType, + trinoType, + Optional.empty(), + HiveColumnHandle.ColumnType.REGULAR, + Optional.empty()); + } + + /** + * Asserts that a HiveColumnHandle has the expected properties after remapping. + */ + private void assertHandle( + HiveColumnHandle handle, + String expectedBaseName, + int expectedPhysicalIndex, + HiveType expectedHiveType, + Type expectedTrinoType) + { + assertThat(handle.getBaseColumnName()) + .as("BaseColumnName mismatch for %s", expectedBaseName) + .isEqualTo(expectedBaseName); + assertThat(handle.getBaseHiveColumnIndex()) + .as("BaseHiveColumnIndex (physical) mismatch for %s", expectedBaseName) + .isEqualTo(expectedPhysicalIndex); + assertThat(handle.getBaseHiveType()) + .as("BaseHiveType mismatch for %s", expectedBaseName) + .isEqualTo(expectedHiveType); + assertThat(handle.getType()) + .as("Trino Type mismatch for %s", expectedBaseName) + .isEqualTo(expectedTrinoType); + // Assert that other fields if they are relevant + assertThat(handle.getColumnType()) + .as("ColumnType mismatch for %s", expectedBaseName) + .isEqualTo(HiveColumnHandle.ColumnType.REGULAR); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSmokeTest.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSmokeTest.java index 24abd8b5509c2..3f7300576789d 100644 --- a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSmokeTest.java +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/TestHudiSmokeTest.java @@ -13,23 +13,77 @@ */ package io.trino.plugin.hudi; +import com.google.common.collect.ImmutableList; +import com.google.common.io.Resources; import io.trino.Session; import io.trino.filesystem.Location; import io.trino.filesystem.TrinoFileSystemFactory; import io.trino.filesystem.TrinoInputFile; +import io.trino.filesystem.local.LocalInputFile; +import io.trino.parquet.ParquetReaderOptions; +import io.trino.plugin.base.metrics.FileFormatDataSourceStats; +import io.trino.plugin.hive.HiveTimestampPrecision; +import io.trino.plugin.hive.parquet.ParquetReaderConfig; +import io.trino.plugin.hudi.file.HudiBaseFile; import io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer; +import io.trino.spi.SplitWeight; +import io.trino.spi.connector.ConnectorPageSource; +import io.trino.spi.connector.ConnectorSession; +import io.trino.spi.connector.DynamicFilter; +import io.trino.spi.predicate.TupleDomain; import io.trino.spi.security.ConnectorIdentity; +import io.trino.spi.type.Type; +import io.trino.sql.planner.OptimizerConfig; import io.trino.testing.AbstractTestQueryFramework; +import io.trino.testing.MaterializedResult; +import io.trino.testing.MaterializedRow; import io.trino.testing.QueryRunner; +import io.trino.testing.TestingConnectorSession; +import org.apache.hudi.common.table.HoodieTableVersion; +import org.apache.hudi.common.util.Option; import org.intellij.lang.annotations.Language; +import org.joda.time.DateTimeZone; +import org.json.JSONArray; +import org.json.JSONObject; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.EnumSource; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; +import java.io.File; +import java.time.LocalDateTime; import java.time.ZonedDateTime; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import java.util.stream.Collectors; +import java.util.stream.IntStream; +import java.util.stream.Stream; +import static io.trino.metastore.HiveType.HIVE_TIMESTAMP; +import static io.trino.plugin.hive.HiveColumnHandle.ColumnType.REGULAR; +import static io.trino.plugin.hive.HiveColumnHandle.createBaseColumn; +import static io.trino.plugin.hudi.HudiPageSourceProvider.createPageSource; +import static io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer.TestingTable.HUDI_COMPREHENSIVE_TYPES_V6_MOR; +import static io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer.TestingTable.HUDI_COMPREHENSIVE_TYPES_V8_MOR; import static io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer.TestingTable.HUDI_COW_PT_TBL; +import static io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer.TestingTable.HUDI_CUSTOM_KEYGEN_PT_V8_MOR; +import static io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer.TestingTable.HUDI_MULTI_PT_V8_MOR; import static io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer.TestingTable.HUDI_NON_PART_COW; +import static io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer.TestingTable.HUDI_STOCK_TICKS_COW; +import static io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer.TestingTable.HUDI_STOCK_TICKS_MOR; +import static io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer.TestingTable.HUDI_TIMESTAMP_KEYGEN_PT_EPOCH_TO_YYYY_MM_DD_HH_V8_MOR; +import static io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer.TestingTable.HUDI_TIMESTAMP_KEYGEN_PT_SCALAR_TO_YYYY_MM_DD_HH_V8_MOR; +import static io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer.TestingTable.HUDI_TRIPS_COW_V8; import static io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer.TestingTable.STOCK_TICKS_COW; import static io.trino.plugin.hudi.testing.ResourceHudiTablesInitializer.TestingTable.STOCK_TICKS_MOR; +import static io.trino.spi.type.TimestampType.createTimestampType; +import static io.trino.testing.MaterializedResult.materializeSourceDataStream; import static org.assertj.core.api.Assertions.assertThat; public class TestHudiSmokeTest @@ -60,11 +114,64 @@ public void testReadPartitionedTables() assertQuery("SELECT symbol, max(ts) FROM " + STOCK_TICKS_MOR + " GROUP BY symbol HAVING symbol = 'GOOG'", "SELECT * FROM VALUES ('GOOG', '2018-08-31 10:59:00')"); + System.out.println(getQueryRunner().execute(getSession(), "EXPLAIN ANALYZE SELECT * FROM " + HUDI_STOCK_TICKS_COW).toString()); + System.out.println("test start"); + getQueryRunner().execute(getSession(), "SET SESSION hudi.metadata_enabled=true"); + String res = getQueryRunner().execute(getSession(), "SELECT * FROM " + HUDI_STOCK_TICKS_COW).toString(); + System.out.println(res); assertQuery("SELECT dt, count(1) FROM " + STOCK_TICKS_MOR + " GROUP BY dt", "SELECT * FROM VALUES ('2018-08-31', '99')"); } + @Test + public void testReadPartitionedCOWTableVer8() + { + String res = getQueryRunner().execute(getSession(), "SELECT * FROM " + HUDI_STOCK_TICKS_COW).toString(); + System.out.println(res); + assertQuery("SELECT date FROM " + HUDI_STOCK_TICKS_COW + " GROUP BY date", + "SELECT * FROM VALUES ('2018-08-31')"); + assertQuery("SELECT date, count(1) FROM " + HUDI_STOCK_TICKS_COW + " GROUP BY date", + "SELECT * FROM VALUES ('2018-08-31', '99')"); + } + + @Test + public void testReadPartitionedMORTableVer8() + { + getQueryRunner().execute(getSession(), "SET SESSION hudi.metadata_enabled=true"); + String res = getQueryRunner().execute(getSession(), "SELECT * FROM " + HUDI_STOCK_TICKS_COW).toString(); + System.out.println(res); + assertQuery("SELECT date FROM " + HUDI_STOCK_TICKS_MOR + " GROUP BY date", + "SELECT * FROM VALUES ('2018-08-31')"); + assertQuery("SELECT date, count(1) FROM " + HUDI_STOCK_TICKS_COW + " GROUP BY date", + "SELECT * FROM VALUES ('2018-08-31', '99')"); + } + + @Test + public void testBaseFileOnlyReadWithProjection() + { + Session session = SessionBuilder.from(getSession()).build(); + MaterializedResult countResult = getQueryRunner().execute( + session, "SELECT count(*) FROM " + HUDI_TRIPS_COW_V8); + assertThat(countResult.getOnlyValue()).isEqualTo(40000L); + assertThat(countResult.getStatementStats().get().getPhysicalInputBytes()).isLessThan(500000L); + MaterializedResult groupByResult = getQueryRunner().execute( + session, "SELECT driver, count(*) FROM " + HUDI_TRIPS_COW_V8 + " group by 1"); + assertThat(groupByResult.getMaterializedRows().size()).isEqualTo(1); + assertThat(groupByResult.getMaterializedRows().getFirst().getFieldCount()).isEqualTo(2); + assertThat(groupByResult.getMaterializedRows().getFirst().getField(0)).isEqualTo("driver-563"); + assertThat(groupByResult.getMaterializedRows().getFirst().getField(1)).isEqualTo(40000L); + assertThat(groupByResult.getStatementStats().get().getPhysicalInputBytes()).isLessThan(500000L); + } + + @Test + public void testReadPartitionedMORTables() + { + getQueryRunner().execute(getSession(), "SET SESSION hudi.metadata_enabled=true"); + String res = getQueryRunner().execute(getSession(), "SELECT * FROM " + HUDI_STOCK_TICKS_MOR).toString(); + System.out.println(res); + } + @Test public void testMultiPartitionedTable() { @@ -138,8 +245,10 @@ public void testMetaColumns() public void testPathColumn() throws Exception { - String path = (String) computeScalar("SELECT \"$path\" FROM " + HUDI_COW_PT_TBL + " WHERE id = 1"); - assertThat(toInputFile(path).exists()).isTrue(); + String path1 = (String) computeScalar("SELECT \"$path\" FROM " + HUDI_COW_PT_TBL + " WHERE id = 1"); + assertThat(toInputFile(path1).exists()).isTrue(); + String path2 = (String) computeScalar("SELECT \"$path\" FROM " + HUDI_STOCK_TICKS_MOR + " WHERE volume = 6794"); + assertThat(toInputFile(path2).exists()).isTrue(); } @Test @@ -170,10 +279,61 @@ public void testPartitionColumn() assertQueryFails("SELECT \"$partition\" FROM " + HUDI_NON_PART_COW, ".* Column '\\$partition' cannot be resolved"); } + @ParameterizedTest + @ValueSource(booleans = {true, false}) + public void testTableStatistics(boolean tableStatisticsEnabled) + throws InterruptedException + { + @Language("SQL") String query = "EXPLAIN (FORMAT JSON) SELECT t1.uuid, t1.driver, t1.fare, t1.ts " + + "FROM " + HUDI_TRIPS_COW_V8 + " t1 " + + "INNER JOIN " + HUDI_TRIPS_COW_V8 + " t2 ON t1.uuid = t2.uuid " + + "WHERE t2.ts > 0"; + Session session = SessionBuilder.from(getSession()) + .withJoinDistributionType(OptimizerConfig.JoinDistributionType.AUTOMATIC.name()) + .withTableStatisticsEnabled(tableStatisticsEnabled) + .withMdtEnabled(true) + .build(); + QueryRunner queryRunner = getQueryRunner(); + // First time the asynchronous table statistics calculation is triggered + queryRunner.execute(session, query); + Thread.sleep(2000); + // Second time the table statistics is available for CBO and the join distribution type should be REPLICATED + String jsonPlanString = (String) queryRunner.execute(session, query).getOnlyValue(); + + // Navigate to the ScanFilterProject node + String tableName = "tests.hudi_trips_cow_v8"; + JSONObject scanNode = findNodeInPlan(jsonPlanString, "ScanFilterProject", Option.of(tableName)); + assertThat(scanNode).isNotNull(); + + // Verify the estimates are based on the table statistics if enabled + JSONArray estimatesArray = scanNode.getJSONArray("estimates"); + assertThat(estimatesArray).isNotNull(); + assertThat(estimatesArray.length()).isGreaterThan(0); + JSONObject estimates = estimatesArray.getJSONObject(0); + assertThat(estimates).isNotNull(); + if (tableStatisticsEnabled) { + assertThat(estimates.getDouble("outputRowCount")).isEqualTo(40000.0); + assertThat(estimates.getDouble("outputSizeInBytes")).isGreaterThan(20000.0); + } + else { + assertThat(estimates.getString("outputRowCount")).isEqualTo("NaN"); + assertThat(estimates.getString("outputSizeInBytes")).isEqualTo("NaN"); + } + + // Verify the join distribution type is REPLICATED if table statistics is enabled; PARTITIONED otherwise + JSONObject joinNode = findNodeInPlan(jsonPlanString, "InnerJoin", Option.empty()); + String distributionDetails = findDetailContaining(joinNode, "Distribution"); + assertThat(distributionDetails).isNotNull(); + String distribution = distributionDetails.split(":")[1].trim(); + assertThat(distribution).isEqualTo(tableStatisticsEnabled ? "REPLICATED" : "PARTITIONED"); + } + @Test public void testPartitionFilterRequired() { - Session session = withPartitionFilterRequired(getSession()); + Session session = SessionBuilder.from(getSession()) + .withPartitionFilterRequired(true) + .build(); assertQueryFails( session, @@ -184,7 +344,9 @@ public void testPartitionFilterRequired() @Test public void testPartitionFilterRequiredPredicateOnNonPartitionColumn() { - Session session = withPartitionFilterRequired(getSession()); + Session session = SessionBuilder.from(getSession()) + .withPartitionFilterRequired(true) + .build(); assertQueryFails( session, @@ -195,7 +357,9 @@ public void testPartitionFilterRequiredPredicateOnNonPartitionColumn() @Test public void testPartitionFilterRequiredNestedQueryWithInnerPartitionPredicate() { - Session session = withPartitionFilterRequired(getSession()); + Session session = SessionBuilder.from(getSession()) + .withPartitionFilterRequired(true) + .build(); assertQuery(session, "SELECT name FROM (SELECT * FROM " + HUDI_COW_PT_TBL + " WHERE dt = '2021-12-09') WHERE id = 1", "VALUES 'a1'"); } @@ -203,7 +367,9 @@ public void testPartitionFilterRequiredNestedQueryWithInnerPartitionPredicate() @Test public void testPartitionFilterRequiredNestedQueryWithOuterPartitionPredicate() { - Session session = withPartitionFilterRequired(getSession()); + Session session = SessionBuilder.from(getSession()) + .withPartitionFilterRequired(true) + .build(); assertQuery(session, "SELECT name FROM (SELECT * FROM " + HUDI_COW_PT_TBL + " WHERE id = 1) WHERE dt = '2021-12-09'", "VALUES 'a1'"); } @@ -211,7 +377,9 @@ public void testPartitionFilterRequiredNestedQueryWithOuterPartitionPredicate() @Test public void testPartitionFilterRequiredNestedWithIsNotNullFilter() { - Session session = withPartitionFilterRequired(getSession()); + Session session = SessionBuilder.from(getSession()) + .withPartitionFilterRequired(true) + .build(); assertQuery(session, "SELECT name FROM " + HUDI_COW_PT_TBL + " WHERE dt IS NOT null", "VALUES 'a1', 'a2'"); } @@ -219,7 +387,9 @@ public void testPartitionFilterRequiredNestedWithIsNotNullFilter() @Test public void testPartitionFilterRequiredFilterRemovedByPlanner() { - Session session = withPartitionFilterRequired(getSession()); + Session session = SessionBuilder.from(getSession()) + .withPartitionFilterRequired(true) + .build(); assertQueryFails( session, @@ -230,7 +400,10 @@ public void testPartitionFilterRequiredFilterRemovedByPlanner() @Test public void testPartitionFilterRequiredOnJoin() { - Session session = withPartitionFilterRequired(getSession()); + Session session = SessionBuilder.from(getSession()) + .withPartitionFilterRequired(true) + .build(); + @Language("RegExp") String errorMessage = "Filter required on tests." + HUDI_COW_PT_TBL.getTableName() + " for at least one of the partition columns: dt, hh"; // ON with partition column @@ -284,7 +457,9 @@ public void testPartitionFilterRequiredOnJoin() @Test public void testPartitionFilterRequiredOnJoinBothTablePartitioned() { - Session session = withPartitionFilterRequired(getSession()); + Session session = SessionBuilder.from(getSession()) + .withPartitionFilterRequired(true) + .build(); // ON with partition column assertQueryFails( @@ -321,7 +496,9 @@ public void testPartitionFilterRequiredOnJoinBothTablePartitioned() @Test public void testPartitionFilterRequiredWithLike() { - Session session = withPartitionFilterRequired(getSession()); + Session session = SessionBuilder.from(getSession()) + .withPartitionFilterRequired(true) + .build(); assertQueryFails( session, "SELECT name FROM " + HUDI_COW_PT_TBL + " WHERE name LIKE '%1'", @@ -331,7 +508,9 @@ public void testPartitionFilterRequiredWithLike() @Test public void testPartitionFilterRequiredFilterIncluded() { - Session session = withPartitionFilterRequired(getSession()); + Session session = SessionBuilder.from(getSession()) + .withPartitionFilterRequired(true) + .build(); assertQuery(session, "SELECT name FROM " + HUDI_COW_PT_TBL + " WHERE hh = '10'", "VALUES 'a1'"); assertQuery(session, "SELECT count(*) FROM " + HUDI_COW_PT_TBL + " WHERE hh < '12'", "VALUES 2"); assertQuery(session, "SELECT count(*) FROM " + HUDI_COW_PT_TBL + " WHERE Hh < '11'", "VALUES 1"); @@ -359,11 +538,635 @@ public void testPartitionFilterRequiredFilterIncluded() assertQueryFails(session, "SELECT count(*) AS COUNT FROM " + HUDI_COW_PT_TBL + " WHERE CAST(hh AS INTEGER) > 2 GROUP BY name ", errorMessage); } - private static Session withPartitionFilterRequired(Session session) + @Test + public void testHudiLongTimestampType() + throws Exception + { + testTimestampMicros(HiveTimestampPrecision.MILLISECONDS, LocalDateTime.parse("2020-10-12T16:26:02.907")); + testTimestampMicros(HiveTimestampPrecision.MICROSECONDS, LocalDateTime.parse("2020-10-12T16:26:02.906668")); + testTimestampMicros(HiveTimestampPrecision.NANOSECONDS, LocalDateTime.parse("2020-10-12T16:26:02.906668")); + } + + @Test + public void testHudiCustomKeygenEpochMillisPartitionedTables() + { + // NOTE: As of now, the partition_path value that is synced to metastore will be returned instead of the raw value that is used by the keygen + Session session = SessionBuilder.from(getSession()).build(); + @Language("SQL") String actualQuery = "SELECT _hoodie_partition_path, partition_field_country, partition_field_date FROM " + HUDI_CUSTOM_KEYGEN_PT_V8_MOR; + @Language("SQL") String expectedQuery = "VALUES ('partition_field_country=MY/partition_field_date=2025-05-13', 'MY', '2025-05-13')," + + "('partition_field_country=CN/partition_field_date=2025-06-05', 'CN', '2025-06-05')," + + "('partition_field_country=US/partition_field_date=2025-06-06', 'US', '2025-06-06')," + + "('partition_field_country=SG/partition_field_date=2025-06-06', 'SG', '2025-06-06')," + + "('partition_field_country=SG/partition_field_date=2025-06-06', 'SG', '2025-06-06')," + + "('partition_field_country=SG/partition_field_date=2025-06-07', 'SG', '2025-06-07')," + + "('partition_field_country=SG/partition_field_date=2025-06-07', 'SG', '2025-06-07')"; + assertQuery(session, actualQuery, expectedQuery); + + // Ensure that partition pruning is working (using partition_path value) of level 3 partition_path value + @Language("SQL") String actualPartitionPruningQuery = actualQuery + " WHERE partition_field_date='2025-06-06'"; + MaterializedResult partitionPruningResult = getQueryRunner().execute(session, actualPartitionPruningQuery); + // Only one split in the partition, hence, only one split processed + assertThat(partitionPruningResult.getStatementStats().get().getTotalSplits()).isEqualTo(2); + // 2 splits/filegroups, but 3 rows + assertQuery(actualPartitionPruningQuery, "VALUES ('partition_field_country=US/partition_field_date=2025-06-06', 'US', '2025-06-06'), " + + "('partition_field_country=SG/partition_field_date=2025-06-06', 'SG', '2025-06-06'), " + + "('partition_field_country=SG/partition_field_date=2025-06-06', 'SG', '2025-06-06')"); + } + + @ParameterizedTest + @ValueSource(booleans = {true, false}) + public void testHudiTimestampKeygenEpochMillisPartitionedTables(boolean isRtTable) + { + String tableName = isRtTable ? HUDI_TIMESTAMP_KEYGEN_PT_EPOCH_TO_YYYY_MM_DD_HH_V8_MOR.getRtTableName() + : HUDI_TIMESTAMP_KEYGEN_PT_EPOCH_TO_YYYY_MM_DD_HH_V8_MOR.getRoTableName(); + // NOTE: As of now, the partition_path value that is synced to metastore will be returned instead of the raw value that is used by the keygen + Session session = SessionBuilder.from(getSession()).build(); + @Language("SQL") String actualQuery = "SELECT _hoodie_partition_path, partition_field FROM " + tableName; + @Language("SQL") String expectedQuery = "VALUES ('2025-06-07 08', '2025-06-07 08'), ('2025-06-06 10', '2025-06-06 10'), ('2025-06-06 09', '2025-06-06 09'), " + + "('2025-06-05 05', '2025-06-05 05'), ('2025-05-13 02', '2025-05-13 02')"; + assertQuery(session, actualQuery, expectedQuery); + + // Ensure that partition pruning is working (using partition_path value) + @Language("SQL") String actualPartPruningQuery = actualQuery + " WHERE partition_field='2025-06-07 08'"; + MaterializedResult partPruneRes = getQueryRunner().execute(session, actualPartPruningQuery); + // Only one split in the partition, hence, only one split processed + assertThat(partPruneRes.getStatementStats().get().getTotalSplits()).isEqualTo(1); + } + + @ParameterizedTest + @ValueSource(booleans = {true, false}) + public void testHudiTimestampKeygenScalarPartitionedTables(boolean isRtTable) + { + String tableName = isRtTable ? HUDI_TIMESTAMP_KEYGEN_PT_SCALAR_TO_YYYY_MM_DD_HH_V8_MOR.getRtTableName() + : HUDI_TIMESTAMP_KEYGEN_PT_SCALAR_TO_YYYY_MM_DD_HH_V8_MOR.getRoTableName(); + // NOTE: As of now, the partition_path value that is synced to metastore will be returned instead of the raw value that is used by the keygen + Session session = SessionBuilder.from(getSession()).build(); + @Language("SQL") String actualQuery = "SELECT _hoodie_partition_path, partition_field FROM " + + tableName; + @Language("SQL") String expectedQuery = "VALUES ('2024-10-04 12', '2024-10-04 12'), ('2024-10-05 12', '2024-10-05 12'), ('2024-10-06 12', '2024-10-06 12'), " + + "('2024-10-07 12', '2024-10-07 12'), ('2024-10-08 12', '2024-10-08 12')"; + assertQuery(session, actualQuery, expectedQuery); + + // Ensure that partition pruning is working (using partition_path value) + @Language("SQL") String actualPartPruningQuery = actualQuery + " WHERE partition_field='2024-10-04 12'"; + MaterializedResult partPruneRes = getQueryRunner().execute(session, actualPartPruningQuery); + // Only one split in the partition, hence, only one split processed + assertThat(partPruneRes.getStatementStats().get().getTotalSplits()).isEqualTo(1); + } + + @ParameterizedTest + @EnumSource( + value = ResourceHudiTablesInitializer.TestingTable.class, + names = {"HUDI_MULTI_FG_PT_V6_MOR", "HUDI_MULTI_FG_PT_V8_MOR"}) + public void testPartitionPruningReadMultiFgPartitionedMOR(ResourceHudiTablesInitializer.TestingTable table) + { + // Test for partition pruning without MDT (i.e. w/o partition pruning using partition stats index) + Session session = SessionBuilder.from(getSession()).build(); + MaterializedResult totalRes = getQueryRunner().execute(session, "SELECT * FROM " + table); + MaterializedResult prunedRes = getQueryRunner().execute(session, "SELECT * FROM " + table + " WHERE country='SG'"); + int totalSplits = totalRes.getStatementStats().get().getTotalSplits(); + int prunedSplits = prunedRes.getStatementStats().get().getTotalSplits(); + assertThat(prunedSplits).isLessThan(totalSplits); + // With partition pruning, only 2 splits in the partition should be returned + assertThat(prunedSplits).isEqualTo(2); + } + + @ParameterizedTest + @EnumSource( + value = ResourceHudiTablesInitializer.TestingTable.class, + names = {"HUDI_MULTI_FG_PT_V6_MOR", "HUDI_MULTI_FG_PT_V8_MOR"}) + public void testColStatsFileSkipping(ResourceHudiTablesInitializer.TestingTable table) + { + Session session = SessionBuilder.from(getSession()) + .withMdtEnabled(true) + .withColStatsIndexEnabled(true) + .withColumnStatsTimeout("1s") + .withRecordLevelIndexEnabled(false) + .withSecondaryIndexEnabled(false) + .withPartitionStatsIndexEnabled(false) + .build(); + MaterializedResult totalRes = getQueryRunner().execute(session, "SELECT * FROM " + table); + MaterializedResult prunedRes = getQueryRunner().execute(session, "SELECT * FROM " + table + " WHERE country='SG' AND name='a1'"); + int totalSplits = totalRes.getStatementStats().get().getTotalSplits(); + int prunedSplits = prunedRes.getStatementStats().get().getTotalSplits(); + assertThat(prunedSplits).isLessThan(totalSplits); + // With colstats file skipping, only 1 split should be returned + assertThat(prunedSplits).isEqualTo(1); + } + + @ParameterizedTest + @EnumSource( + value = ResourceHudiTablesInitializer.TestingTable.class, + names = {"HUDI_MULTI_FG_PT_V6_MOR", "HUDI_MULTI_FG_PT_V8_MOR"}) + public void testRecordLevelFileSkipping(ResourceHudiTablesInitializer.TestingTable table) + { + Session session = SessionBuilder.from(getSession()) + .withMdtEnabled(true) + .withColStatsIndexEnabled(false) + .withRecordLevelIndexEnabled(true) + .withSecondaryIndexEnabled(false) + .withPartitionStatsIndexEnabled(false) + .withColumnStatsTimeout("1s") + .build(); + MaterializedResult totalRes = getQueryRunner().execute(session, "SELECT * FROM " + table); + MaterializedResult prunedRes = getQueryRunner().execute(session, "SELECT * FROM " + table + + " WHERE country='SG' AND id IN (1, 3) AND name = 'a1'"); + int totalSplits = totalRes.getStatementStats().get().getTotalSplits(); + int prunedSplits = prunedRes.getStatementStats().get().getTotalSplits(); + assertThat(prunedSplits).isLessThan(totalSplits); + // With RLI file skipping, only 1 split should be returned + assertThat(prunedSplits).isEqualTo(1); + } + + @ParameterizedTest + @EnumSource( + value = ResourceHudiTablesInitializer.TestingTable.class, + names = {"HUDI_MULTI_FG_PT_V6_MOR", "HUDI_MULTI_FG_PT_V8_MOR"}) + public void testSecondaryIndexFileSkipping(ResourceHudiTablesInitializer.TestingTable table) + { + Session session = SessionBuilder.from(getSession()) + .withMdtEnabled(true) + .withColStatsIndexEnabled(false) + .withRecordLevelIndexEnabled(false) + .withSecondaryIndexEnabled(true) + .withPartitionStatsIndexEnabled(false) + .withSecondaryIndexTimeout("10s") + .build(); + MaterializedResult totalRes = getQueryRunner().execute(session, "SELECT * FROM " + table); + MaterializedResult prunedRes = getQueryRunner().execute(session, "SELECT * FROM " + table + + " WHERE country='SG' AND price = 101.00"); + int totalSplits = totalRes.getStatementStats().get().getTotalSplits(); + int prunedSplits = prunedRes.getStatementStats().get().getTotalSplits(); + assertThat(prunedSplits).isLessThan(totalSplits); + // SI is only available for table versions >= 8 + // With SI file skipping, only 1 split should be returned + int expectedSplits = table.getHoodieTableVersion() + .greaterThanOrEquals(HoodieTableVersion.EIGHT) ? 1 : 2; + assertThat(prunedSplits).isEqualTo(expectedSplits); + } + + @ParameterizedTest + @EnumSource( + value = ResourceHudiTablesInitializer.TestingTable.class, + names = {"HUDI_MULTI_FG_PT_V6_MOR", "HUDI_MULTI_FG_PT_V8_MOR"}) + public void testPartitionStatsIndexPartitionPruning(ResourceHudiTablesInitializer.TestingTable table) + { + Session session = SessionBuilder.from(getSession()) + .withMdtEnabled(true) + .withColStatsIndexEnabled(false) + .withRecordLevelIndexEnabled(false) + .withSecondaryIndexEnabled(false) + .withPartitionStatsIndexEnabled(true) + .build(); + MaterializedResult prunedRes = getQueryRunner().execute(session, "SELECT * FROM " + table + // Add a constraint that is in colstats + + " WHERE ts < 1001 " + + // Add a constraint that is in colstats + "AND price < 200.00 " + + // Add a constraint on a column that is not in colstats + "AND _hoodie_file_name = 'abc' " + + // Add a simple null check constraint + "AND id is not null"); + int prunedSplits = prunedRes.getStatementStats().get().getTotalSplits(); + + // Partition stats index is only available for table versions >= 8 + // With PSI, only 2 splits in the SG partitions will be scanned + int expectedSplits = table.getHoodieTableVersion() + .greaterThanOrEquals(HoodieTableVersion.EIGHT) ? 2 : 4; + assertThat(prunedSplits).isEqualTo(expectedSplits); + } + + @ParameterizedTest + @EnumSource( + value = ResourceHudiTablesInitializer.TestingTable.class, + names = {"HUDI_MULTI_FG_PT_V6_MOR", "HUDI_MULTI_FG_PT_V8_MOR"}) + public void testDynamicFilterEnabledPredicatePushdown(ResourceHudiTablesInitializer.TestingTable table) + { + Session session = SessionBuilder + .from(getSession()) + .withDynamicFilterTimeout("10s") + .build(); + final String tableIdentifier = "hudi:tests." + table.getRoTableName(); + + @Language("SQL") String query = "SELECT t1.id, t1.name, t1.price, t1.ts FROM " + + table + " t1 " + + "INNER JOIN " + table + " t2 ON t1.id = t2.id " + + "WHERE t2.price <= 102"; + MaterializedResult explainRes = getQueryRunner().execute(session, "EXPLAIN ANALYZE " + query); + Pattern scanFilterInputRowsPattern = getScanFilterInputRowsPattern(tableIdentifier); + Matcher matcher = scanFilterInputRowsPattern.matcher(explainRes.toString()); + assertThat(matcher.find()) + .withFailMessage("Could not find 'ScanFilter' for table '%s' with 'dynamicFilters' and 'Input: X rows' stats in EXPLAIN output.\nOutput was:\n%s", + tableIdentifier, explainRes.toString()) + .isTrue(); + + // matcher#group() must be invoked after matcher#find() + String rowsInputString = matcher.group(1); + long actualInputRows = Long.parseLong(rowsInputString); + long expectedInputRowsAfterFiltering = 2; + assertThat(actualInputRows) + .describedAs("Number of rows input to the ScanFilter for the probe side table (%s) should reflect effective dynamic filtering", tableIdentifier) + .isEqualTo(expectedInputRowsAfterFiltering); + + // Exercise query and check output + assertQuery(query, "VALUES (1, 'a1', 100.0, 1000), (3, 'a3', 101.0, 1001)"); + } + + @ParameterizedTest + @EnumSource( + value = ResourceHudiTablesInitializer.TestingTable.class, + names = {"HUDI_MULTI_FG_PT_V6_MOR", "HUDI_MULTI_FG_PT_V8_MOR"}) + public void testDynamicFilterDisabledPredicatePushdown(ResourceHudiTablesInitializer.TestingTable table) + { + Session session = SessionBuilder.from(getSession()) + .withDynamicFilterEnabled(false) + .build(); + final String tableIdentifier = "hudi:tests." + table.getRoTableName(); + + @Language("SQL") String query = "SELECT t1.id, t1.name, t1.price, t1.ts FROM " + + table + " t1 " + + "INNER JOIN " + table + " t2 ON t1.id = t2.id " + + "WHERE t2.price <= 102"; + MaterializedResult explainRes = getQueryRunner().execute(session, "EXPLAIN ANALYZE " + query); + Pattern scanFilterInputRowsPattern = getScanFilterInputRowsPattern(tableIdentifier); + Matcher matcher = scanFilterInputRowsPattern.matcher(explainRes.toString()); + // Should not find any dynamic filtering keywords + assertThat(matcher.find()) + .withFailMessage("Could not find 'ScanFilter' for table '%s' with 'dynamicFilters' and 'Input: X rows' stats in EXPLAIN output.\nOutput was:\n%s", + tableIdentifier, explainRes.toString()) + .isFalse(); + + // Skip check on whether optimization is not applied or not, just check that output is queryable + assertQuery(query, "VALUES (1, 'a1', 100.0, 1000), (3, 'a3', 101.0, 1001)"); + } + + @ParameterizedTest + @EnumSource( + value = ResourceHudiTablesInitializer.TestingTable.class, + names = {"HUDI_MULTI_FG_PT_V6_MOR", "HUDI_MULTI_FG_PT_V8_MOR"}) + public void testDynamicFilterEnabled_withPartitionPruningUsingDynamicFilter(ResourceHudiTablesInitializer.TestingTable table) + { + Session session = SessionBuilder.from(getSession()) + .withDynamicFilterTimeout("10s") + .build(); + final String tableIdentifier = "hudi:tests." + table.getRoTableName(); + // Query is joined-on partitionField + @Language("SQL") String query = "SELECT t1.id, t1.name, t1.price, t1.ts, t1.country FROM " + + table + " t1 " + + "INNER JOIN " + table + " t2 ON t1.country = t2.country " + + "WHERE t2.price <= 102"; + + MaterializedResult explainRes = getQueryRunner().execute(session, "EXPLAIN ANALYZE " + query); + Pattern scanFilterInputRowsPattern = getScanFilterInputRowsPattern(tableIdentifier); + Matcher matcher = scanFilterInputRowsPattern.matcher(explainRes.toString()); + assertThat(matcher.find()) + .withFailMessage("Could not find 'ScanFilter' for table '%s' with 'dynamicFilters' and 'Input: X rows' stats in EXPLAIN output.\nOutput was:\n%s", + tableIdentifier, explainRes.toString()) + .isTrue(); + + // matcher#group() must be invoked after matcher#find() + String rowsInputString = matcher.group(1); + long actualInputRows = Long.parseLong(rowsInputString); + long expectedInputRowsAfterFiltering = 2; + assertThat(actualInputRows) + .describedAs("Number of rows input to the ScanFilter for the probe side table (%s) should reflect effective dynamic filtering", tableIdentifier) + .isEqualTo(expectedInputRowsAfterFiltering); + + // Exercise query and check output + assertQuery(query, "VALUES (1, 'a1', 100.0, 1000, 'SG'), (3, 'a3', 101.0, 1001, 'SG'), (1, 'a1', 100.0, 1000, 'SG'), (3, 'a3', 101.0, 1001, 'SG')"); + } + + @Test + public void testDynamicFilterEnabled_withPartitionPruningUsingDynamicFilterOnNestedPartitions() + { + Session session = SessionBuilder.from(getSession()) + .withDynamicFilterTimeout("10s") + .build(); + final String tableIdentifier = "hudi:tests." + HUDI_MULTI_PT_V8_MOR.getRoTableName(); + // Query is joined-on recordKey and partitionField + @Language("SQL") String query = "SELECT t1.id FROM " + + HUDI_MULTI_PT_V8_MOR + " t1 " + + "INNER JOIN " + HUDI_MULTI_PT_V8_MOR + " t2 ON t1.id = t2.id AND t1.part_int = t2.part_int " + + "WHERE t2.part_int = 2023"; + + MaterializedResult explainRes = getQueryRunner().execute(session, "EXPLAIN ANALYZE " + query); + Pattern scanFilterInputRowsPattern = getScanFilterInputRowsPattern(tableIdentifier); + Matcher matcher = scanFilterInputRowsPattern.matcher(explainRes.toString()); + assertThat(matcher.find()) + .withFailMessage("Could not find 'ScanFilter' for table '%s' with 'dynamicFilters' and 'Input: X rows' stats in EXPLAIN output.\nOutput was:\n%s", + tableIdentifier, explainRes.toString()) + .isTrue(); + + // matcher#group() must be invoked after matcher#find() + String rowsInputString = matcher.group(1); + long actualInputRows = Long.parseLong(rowsInputString); + // 1 row in each split, should only scan 3 splits, i.e. 3 rows + // For a more strict search, we can check the number of splits scanned on the builder side + long expectedInputRowsAfterFiltering = 3; + assertThat(actualInputRows) + .describedAs("Number of rows input to the ScanFilter for the probe side table (%s) should reflect effective dynamic filtering", tableIdentifier) + .isEqualTo(expectedInputRowsAfterFiltering); + + // Exercise query and check output + assertQuery(query, "VALUES (1), (2), (4)"); + } + + @ParameterizedTest + @EnumSource( + value = ResourceHudiTablesInitializer.TestingTable.class, + names = {"HUDI_MULTI_FG_PT_V6_MOR", "HUDI_MULTI_FG_PT_V8_MOR"}) + public void testDynamicFilterDisabled_withPartitionPruningUsingDynamicFilter(ResourceHudiTablesInitializer.TestingTable table) + { + Session session = SessionBuilder.from(getSession()) + .withDynamicFilterEnabled(false) + .build(); + final String tableIdentifier = "hudi:tests." + table.getRoTableName(); + + // Query is joined-on recordKey and partitionField + @Language("SQL") String query = "SELECT t1.id, t1.name, t1.price, t1.ts, t1.country FROM " + + table + " t1 " + + "INNER JOIN " + table + " t2 ON t1.country = t2.country " + + "WHERE t2.price <= 102"; + + MaterializedResult explainRes = getQueryRunner().execute(session, "EXPLAIN ANALYZE " + query); + Pattern scanFilterInputRowsPattern = getScanFilterInputRowsPattern(tableIdentifier); + Matcher matcher = scanFilterInputRowsPattern.matcher(explainRes.toString()); + assertThat(matcher.find()) + .withFailMessage("Could not find 'ScanFilter' for table '%s' with 'dynamicFilters' and 'Input: X rows' stats in EXPLAIN output.\nOutput was:\n%s", + tableIdentifier, explainRes.toString()) + .isFalse(); + + // Skip check on whether optimization is not applied or not, just check that output is queryable + // Cartesian product of result is produced since we are joining by partition column + assertQuery(query, "VALUES (1, 'a1', 100.0, 1000, 'SG'), (3, 'a3', 101.0, 1001, 'SG'), (1, 'a1', 100.0, 1000, 'SG'), (3, 'a3', 101.0, 1001, 'SG')"); + } + + @Test + public void testPartitionPruningOnNestedPartitions() + { + // Should only scan paths that match the part_str=*/part_int=2023/part_date=*/part_bigint=*/part_decimal=*/part_timestamp=*/part_bool=* + Session session = getSession(); + // No partition pruning + @Language("SQL") String actualQuery = "SELECT part_str, part_int, part_date, part_bigint, part_bool FROM " + HUDI_MULTI_PT_V8_MOR; + MaterializedResult actualRes = getQueryRunner().execute(session, actualQuery); + int actualTotalSplits = actualRes.getStatementStats().get().getTotalSplits(); + assertThat(actualTotalSplits).isEqualTo(5); + + // With partition pruning + @Language("SQL") String actualPartPruneQuery = actualQuery + " WHERE part_int = 2023"; + MaterializedResult actualPartPruneRes = getQueryRunner().execute(session, actualPartPruneQuery); + int actualPartPruneSplits = actualPartPruneRes.getStatementStats().get().getTotalSplits(); + assertThat(actualPartPruneSplits).isLessThan(actualTotalSplits); + assertThat(actualPartPruneSplits).isEqualTo(3); + } + + @ParameterizedTest + @MethodSource("comprehensiveTestParameters") + public void testComprehensiveTypes(ResourceHudiTablesInitializer.TestingTable table, boolean isRtTable) + { + Session session = SessionBuilder.from(getSession()) + .withMdtEnabled(true) + .build(); + // Not using #assertQuery() as it uses H2QueryRunner, which restricts the types which can be defined, particularly MAP types + // Use #getQueryRunner(), which uses TrinoQueryRunner instead + + // Define the columns that are being tested: + ImmutableList columnsToTest = ImmutableList.of( + "uuid", "precombine_field", "col_boolean", "col_tinyint", "col_smallint", "col_int", "col_bigint", "col_float", "col_double", "col_decimal", "col_string", + "col_varchar", "col_char", "col_binary", "col_date", "col_timestamp", "col_array_int", "col_array_string", "col_map_string_int", "col_struct", "col_array_struct", + "col_map_string_struct", "col_array_struct_with_map", "col_map_struct_with_array", "col_struct_nested_struct", "col_array_array_int", "col_map_string_array_double", + "col_map_string_map_string_date", "col_struct_array_struct", "col_struct_map", "part_col"); + + // Define expected output + ImmutableList> expectedRowValues = ImmutableList.of( + // uuid STRING + ImmutableList.of("'uuid1'", "'uuid2'", "'uuid3'"), + // precombine_field LONG -> BIGINT + ImmutableList.of( + // Updates were performed (RT table holds the updated value) + isRtTable ? "BIGINT '1001'" : "BIGINT '1000'", + isRtTable ? "BIGINT '1006'" : "BIGINT '1005'", + isRtTable ? "BIGINT '1101'" : "BIGINT '1100'"), + // col_boolean BOOLEAN + ImmutableList.of("true", "false", "CAST(NULL AS BOOLEAN)"), + // col_tinyint TINYINT + ImmutableList.of("TINYINT '1'", "TINYINT '2'", "CAST(NULL AS TINYINT)"), + // col_smallint SMALLINT + ImmutableList.of("SMALLINT '100'", "SMALLINT '200'", "CAST(NULL AS SMALLINT)"), + // col_int + ImmutableList.of("INTEGER '1000'", "INTEGER '2000'", "CAST(NULL AS INTEGER)"), + // col_bigint BIGINT + ImmutableList.of("BIGINT '100000'", "BIGINT '200000'", "CAST(NULL AS BIGINT)"), + // col_float + ImmutableList.of("REAL '1.1'", "REAL '2.2'", "CAST(NULL AS REAL)"), + // col_double + ImmutableList.of( + // Updates were performed on partition A values (RT table holds the updated value) + isRtTable ? "DOUBLE '110.123'" : "DOUBLE '10.123'", + isRtTable ? "DOUBLE '120.456'" : "DOUBLE '20.456'", + "CAST(NULL AS DOUBLE)"), + // col_decimal + ImmutableList.of("DECIMAL '123.45'", "DECIMAL '234.56'", "CAST(NULL AS DECIMAL(10,2))"), + // col_string + ImmutableList.of( + "'string val 1'", + "'string val 2'", + // Updates were performed on partition B values (RT table holds the updated value) + isRtTable ? "'updated string'" : "NULL"), + // col_varchar + ImmutableList.of("CAST('varchar val 1' AS VARCHAR(50))", "CAST('varchar val 2' AS VARCHAR(50))", "CAST(NULL AS VARCHAR(50))"), + // col_char + ImmutableList.of("CAST('charval1' AS CHAR(10))", "CAST('charval2' AS CHAR(10))", "CAST(NULL AS CHAR(10))"), + // col_binary BINARY -> VARBINARY: UTF-8 bytes of "binary1", "binary2", null + ImmutableList.of("X'62696e61727931'", "X'62696e61727932'", "CAST(NULL AS VARBINARY)"), + // col_date + ImmutableList.of("DATE '2025-01-15'", "DATE '2025-02-20'", "CAST(NULL AS DATE)"), + // col_timestamp TIMESTAMP + ImmutableList.of("TIMESTAMP '2025-01-15 11:30:00.000'", "TIMESTAMP '2025-02-20 12:45:00.000'", "CAST(NULL AS TIMESTAMP)"), + // col_array_int ARRAY + ImmutableList.of("ARRAY[1, 2, 3]", "ARRAY[4, 5]", "CAST(NULL AS ARRAY)"), + // col_array_string ARRAY + ImmutableList.of("ARRAY['a', 'b', 'c']", "ARRAY['d', 'e', 'f']", "CAST(NULL AS ARRAY)"), + // col_map_string_int MAP + ImmutableList.of("MAP(ARRAY['key1', 'key2'], ARRAY[10, 20])", "MAP(ARRAY['key3'], ARRAY[30])", "CAST(NULL AS MAP(VARCHAR, INTEGER))"), + // col_struct + ImmutableList.of( + "CAST(ROW('struct_str1', 55, false) AS ROW(f1 VARCHAR, f2 INTEGER, f3 BOOLEAN))", + "CAST(ROW('struct_str2', 66, true) AS ROW(f1 VARCHAR, f2 INTEGER, f3 BOOLEAN))", + "CAST(NULL AS ROW(f1 VARCHAR, f2 INTEGER, f3 BOOLEAN))"), + // col_array_struct + ImmutableList.of( + "ARRAY[CAST(ROW(1.1E0, ARRAY['n1','n2']) AS ROW(nested_f1 DOUBLE, nested_f2 ARRAY)), CAST(ROW(2.2E0, ARRAY['n3']) AS ROW(nested_f1 DOUBLE, nested_f2 ARRAY))]", + "CAST(NULL AS ARRAY)>)", + "ARRAY[CAST(ROW(3.3E0, ARRAY['n4']) AS ROW(nested_f1 DOUBLE, nested_f2 ARRAY))]"), + // col_map_string_struct + ImmutableList.of( + "MAP(ARRAY['mapkey1'], ARRAY[CAST(ROW(DATE '2024-11-01', DECIMAL '9.80') AS ROW(nested_f3 DATE, nested_f4 DECIMAL(5,2)))])", + "MAP(ARRAY['mapkey2'], ARRAY[CAST(ROW(DATE '2024-12-10', DECIMAL '7.60') AS ROW(nested_f3 DATE, nested_f4 DECIMAL(5,2)))])", + "CAST(NULL AS MAP)"), + // col_array_struct_with_map + ImmutableList.of( + "ARRAY[CAST(ROW('arr_struct1', MAP(ARRAY['map_in_struct_k1'], ARRAY[1])) AS ROW(f_arr_struct_str VARCHAR, f_arr_struct_map MAP)), CAST(ROW('arr_struct2', MAP(ARRAY['map_in_struct_k2', 'map_in_struct_k3'], ARRAY[2, 3])) AS ROW(f_arr_struct_str VARCHAR, f_arr_struct_map MAP))]", + // inner map is null + "ARRAY[CAST(ROW('arr_struct3', MAP(ARRAY['map_in_struct_k4'], ARRAY[4])) AS ROW(f_arr_struct_str VARCHAR, f_arr_struct_map MAP)), CAST(ROW('arr_struct4', CAST(NULL AS MAP)) AS ROW(f_arr_struct_str VARCHAR, f_arr_struct_map MAP))]", + "CAST(NULL AS ARRAY)>)"), + // col_map_struct_with_array + ImmutableList.of( + "MAP(ARRAY['map_struct1', 'map_struct2'], ARRAY[CAST(ROW(ARRAY[true, false], TIMESTAMP '2025-01-01 01:01:01.000') AS ROW(f_map_struct_arr ARRAY, f_map_struct_ts TIMESTAMP(3))), CAST(ROW(ARRAY[false], TIMESTAMP '2025-02-02 02:02:02.000') AS ROW(f_map_struct_arr ARRAY, f_map_struct_ts TIMESTAMP(3)))])", + // inner map is null + "MAP(ARRAY['map_struct3', 'map_struct4'], ARRAY[CAST(ROW(CAST(NULL AS ARRAY), TIMESTAMP '2025-03-03 03:03:03.000') AS ROW(f_map_struct_arr ARRAY, f_map_struct_ts TIMESTAMP(3))), CAST(ROW(ARRAY[true], CAST(NULL AS TIMESTAMP(3))) AS ROW(f_map_struct_arr ARRAY, f_map_struct_ts TIMESTAMP(3)))])", + "CAST(NULL AS MAP, f_map_struct_ts TIMESTAMP(3))>)"), + // col_struct_nested_struct + ImmutableList.of( + "CAST(ROW(101, CAST(ROW('inner_str_1', true) AS ROW(inner_f1 VARCHAR, inner_f2 BOOLEAN))) AS ROW(outer_f1 INTEGER, nested_struct ROW(inner_f1 VARCHAR, inner_f2 BOOLEAN)))", + // inner struct is null + "CAST(ROW(102, CAST(NULL AS ROW(inner_f1 VARCHAR, inner_f2 BOOLEAN))) AS ROW(outer_f1 INTEGER, nested_struct ROW(inner_f1 VARCHAR, inner_f2 BOOLEAN)))", + "CAST(NULL AS ROW(outer_f1 INTEGER, nested_struct ROW(inner_f1 VARCHAR, inner_f2 BOOLEAN)))"), + // col_array_array_int + ImmutableList.of("ARRAY[ARRAY[1, 2], ARRAY[3, 4, 5]]", "ARRAY[ARRAY[6], ARRAY[7, 8]]", "CAST(NULL AS ARRAY>)"), + // col_map_string_array_double + ImmutableList.of( + "MAP(ARRAY['arr_key1', 'arr_key2'], ARRAY[ARRAY[1.1E0, 2.2E0], ARRAY[3.3E0]])", + // inner array is null + "MAP(ARRAY['arr_key3'], ARRAY[CAST(NULL AS ARRAY)])", + "CAST(NULL AS MAP>)"), + // col_map_string_map_string_date + ImmutableList.of( + "MAP(ARRAY['map_key1'], ARRAY[MAP(ARRAY['mapkey10', 'mapkey20'], ARRAY[DATE '2024-01-01', DATE '2024-02-02'])])", + // inner map value/map is null, assuming int key 30 coerced to '30' + "MAP(ARRAY['map_key2', 'map_key3'], ARRAY[MAP(ARRAY[CAST('30' AS VARCHAR)], ARRAY[CAST(NULL AS DATE)]), CAST(NULL AS MAP)])", + "CAST(NULL AS MAP>)"), + // col_struct_array_struct + ImmutableList.of( + "CAST(ROW('outer_str_1', ARRAY[CAST(ROW(TIMESTAMP '2023-11-11 11:11:11.000', 'inner_str_1') AS ROW(inner_f3 TIMESTAMP(3), inner_f4 VARCHAR))]) AS ROW(outer_f2 VARCHAR, struct_array ARRAY))", + "CAST(ROW('outer_str_2', ARRAY[CAST(ROW(TIMESTAMP '2023-12-12 12:12:12.000', 'inner_str_2') AS ROW(inner_f3 TIMESTAMP(3), inner_f4 VARCHAR))]) AS ROW(outer_f2 VARCHAR, struct_array ARRAY))", + "CAST(NULL AS ROW(outer_f2 VARCHAR, struct_array ARRAY))"), + // col_struct_map (BIGINT literals don't need L) + ImmutableList.of( + "CAST(ROW(true, MAP(ARRAY['struct_map_k1', 'struct_map_k2'], ARRAY[1000, 2000])) AS ROW(outer_f3 BOOLEAN, struct_map MAP))", + // inner map is null + "CAST(ROW(false, CAST(NULL AS MAP)) AS ROW(outer_f3 BOOLEAN, struct_map MAP))", + "CAST(NULL AS ROW(outer_f3 BOOLEAN, struct_map MAP))"), + // part_col + ImmutableList.of("'A'", "'A'", "'B'")); + + // "Zip" results up for convenient lookup + Map> mapping = listsToMap(columnsToTest, expectedRowValues); + + // Determine which table to use base on test parameters + final String sourceTable = isRtTable ? table.getRtTableName() : table.getTableName(); + + // Test each column individually so that errors thrown are more specific/useful + for (String column : mapping.keySet()) { + // Use UNION ALL so that de-dupes will not happen + @Language("SQL") String expectedQuery = mapping.get(column).stream().map(l -> "SELECT " + l).collect(Collectors.joining(" UNION ALL ")); + @Language("SQL") String actualQuery = "SELECT " + column + " FROM " + sourceTable; + + MaterializedResult actualResults = getQueryRunner().execute(session, actualQuery); + MaterializedResult expectedResults = getQueryRunner().execute(session, expectedQuery); + assertThat(actualResults.getMaterializedRows()) + .describedAs("failedQuery: " + actualQuery) + .hasSameSizeAs(expectedResults.getMaterializedRows()) + .containsAll(expectedResults.getMaterializedRows()); + } + + // Perform same test on all columns together + int numRows = expectedRowValues.getFirst().size(); + @Language("SQL") String expectedQuery = IntStream.range(0, numRows) + .mapToObj(rowIndex -> { + // For each row, collect the corresponding values for all columns in the defined order + String rowValuesString = columnsToTest.stream() + .map(columnName -> { + List columnData = mapping.get(columnName); + return columnData.get(rowIndex); + }) + .collect(Collectors.joining(", ")); // Joins column values: "val1, val2, val3" + return "SELECT " + rowValuesString; // Forms: "SELECT val1, val2, val3" + }) + .collect(Collectors.joining(" UNION ALL ")); + @Language("SQL") String actualQuery = "SELECT " + String.join(", ", columnsToTest) + " FROM " + sourceTable; + MaterializedResult actualResults = getQueryRunner().execute(session, actualQuery); + MaterializedResult expectedResults = getQueryRunner().execute(session, expectedQuery); + assertThat(actualResults.getMaterializedRows()) + .hasSameSizeAs(expectedResults.getMaterializedRows()) + .containsAll(expectedResults.getMaterializedRows()); + + // Perform test on selecting nested field + String columnToTest = "col_map_string_struct"; + // 1. Extract all values from the map into an array. Since each map has one entry, this array will have one ROW (or be NULL if the map is NULL). + // 2. Access the first (and only) ROW object from this array. (Using 1-based indexing for arrays, which Trino and Presto uses) + // 3. Access the 'nested_f4' field from that ROW object. + @Language("SQL") String nestedFieldQuery = "SELECT (map_values(" + columnToTest + "))[1].nested_f4 AS extracted_nested_f4 FROM " + sourceTable; + @Language("SQL") String expectedNestedFieldQuery = "WITH " + sourceTable + " AS ( " + + mapping.get(columnToTest).stream() + .map(l -> "SELECT " + l + " AS " + columnToTest) + .collect(Collectors.joining(" UNION ALL ")) + + ") " + + nestedFieldQuery; + @Language("SQL") String actualNestedFieldQuery = nestedFieldQuery; + MaterializedResult expectedNestedResult = getQueryRunner().execute(session, expectedNestedFieldQuery); + MaterializedResult actualNestedResult = getQueryRunner().execute(session, actualNestedFieldQuery); + assertThat(actualNestedResult.getMaterializedRows()) + .hasSameSizeAs(expectedNestedResult.getMaterializedRows()) + .containsAll(expectedNestedResult.getMaterializedRows()); + } + + @Test + public void testHudiPartitionFieldsWithMultipleTypes() + { + Session session = getSession(); + @Language("SQL") String actualQuery = "SELECT part_str, part_int, part_date, part_bigint, part_bool FROM " + HUDI_MULTI_PT_V8_MOR; + @Language("SQL") String expectedQuery = "VALUES " + + "('apparel', 2024, DATE '2024-01-05', 20000000001, false), " + + "('books', 2023, DATE '2023-01-15', 10000000001, true), " + + "('books', 2024, DATE '2024-02-20', 10000000003, true), " + + "('electronics', 2023, DATE '2023-03-10', 10000000002, false), " + + "('electronics', 2023, DATE '2023-03-10', 10000000002, true) "; + assertQuery(session, actualQuery, expectedQuery); + } + + private void testTimestampMicros(HiveTimestampPrecision timestampPrecision, LocalDateTime expected) + throws Exception { - return Session.builder(session) - .setCatalogSessionProperty(session.getCatalog().orElseThrow(), "query_partition_filter_required", "true") + File parquetFile = new File(Resources.getResource("long_timestamp.parquet").toURI()); + Type columnType = createTimestampType(timestampPrecision.getPrecision()); + HudiSplit hudiSplit = new HudiSplit( + new HudiBaseFile(parquetFile.getPath(), parquetFile.getName(), parquetFile.length(), parquetFile.lastModified(), 0, parquetFile.length()), + ImmutableList.of(), + "000", + TupleDomain.all(), + ImmutableList.of(), + SplitWeight.standard()); + + HudiConfig config = new HudiConfig().setUseParquetColumnNames(false); + HudiSessionProperties sessionProperties = new HudiSessionProperties(config, new ParquetReaderConfig()); + ConnectorSession session = TestingConnectorSession.builder() + .setPropertyMetadata(sessionProperties.getSessionProperties()) .build(); + + try (ConnectorPageSource pageSource = createPageSource( + session, + List.of(createBaseColumn("created", 0, HIVE_TIMESTAMP, columnType, REGULAR, Optional.empty())), + hudiSplit, + new LocalInputFile(parquetFile), + new FileFormatDataSourceStats(), + new ParquetReaderOptions(), + DateTimeZone.UTC, DynamicFilter.EMPTY, true)) { + MaterializedResult result = materializeSourceDataStream(session, pageSource, List.of(columnType)).toTestTypes(); + assertThat(result.getMaterializedRows()) + .containsOnly(new MaterializedRow(List.of(expected))); + } + } + + private static Pattern getScanFilterInputRowsPattern(String tableIdentifier) + { + // Regex to find the ScanFilter for the specific table that received a dynamic filter and extract the 'Input: X rows' value associated with it. + return Pattern.compile( + // Match the ScanFilter line for the specific table, ensuring dynamicFilters is present + "ScanFilter\\[table = " + Pattern.quote(tableIdentifier) + ".*dynamicFilters = \\{.*?\\}.*?\\]" + + ".*?" + // Match subsequent lines non-greedily until the target line is found + "\\n\\s+Input:\\s+(\\d+)\\s+rows", // Match the 'Input: X rows' line, ensuring it's indented relative to ScanFilter + Pattern.DOTALL); } private TrinoInputFile toInputFile(String path) @@ -373,4 +1176,126 @@ private TrinoInputFile toInputFile(String path) .create(ConnectorIdentity.ofUser("test")) .newInputFile(Location.of(path)); } + + public static Map listsToMap(List keys, List values) + { + if (keys == null || values == null) { + throw new IllegalArgumentException("Key and Value lists cannot be null."); + } + + // Determine the number of entries based on the shorter list + int limit = Math.min(keys.size(), values.size()); + + return IntStream.range(0, limit) + .boxed() + .collect(Collectors.toMap( + keys::get, + values::get, + // Merge function for duplicate keys, last one wins + (_, newValue) -> newValue)); + } + + private static Stream comprehensiveTestParameters() + { + ResourceHudiTablesInitializer.TestingTable[] tablesToTest = { + HUDI_COMPREHENSIVE_TYPES_V6_MOR, + HUDI_COMPREHENSIVE_TYPES_V8_MOR + }; + Boolean[] booleanValues = {true, false}; + + return Stream.of(tablesToTest) + .flatMap(table -> + Stream.of(booleanValues) + .map(boolValue -> Arguments.of(table, boolValue))); + } + + /** + * Entry point for finding a node in the complete JSON plan string. + * It iterates through each plan fragment ("0", "1", etc.) and starts the recursive search. + * + * @param jsonPlanString the complete JSON string of the execution plan + * @param nodeType the "name" of the node type to find (e.g., "InnerJoin", "ScanFilterProject") + * @param tableName the name of the table to match for nodes like "ScanFilterProject". can be empty + * @return The found JSONObject, or null if not found in any fragment. + */ + public static JSONObject findNodeInPlan(String jsonPlanString, String nodeType, Option tableName) + { + JSONObject fullPlan = new JSONObject(jsonPlanString); + + // Iterate over the fragment keys ("0", "1", etc.) + Iterator fragmentKeys = fullPlan.keys(); + while (fragmentKeys.hasNext()) { + String key = fragmentKeys.next(); + JSONObject fragmentNode = fullPlan.getJSONObject(key); + + // Start the recursive search from the root node of the fragment + JSONObject result = findNodeRecursive(fragmentNode, nodeType, tableName); + if (result != null) { + return result; + } + } + return null; + } + + /** + * Recursively searches for a node within a plan tree starting from the given node. + * + * @param currentNode the current {@link JSONObject} node in the plan tree to inspect + * @param nodeType the "name" of the node type to find + * @param tableName the table name to match for specific node types. can be empty + * @return the found {@link JSONObject}, or null if not found. + */ + private static JSONObject findNodeRecursive(JSONObject currentNode, String nodeType, Option tableName) + { + if (currentNode.has("name") && currentNode.getString("name").equals(nodeType)) { + // If a tableName is specified, we must match it (for Scan/Filter/Project nodes) + if (tableName.isPresent()) { + if (currentNode.has("descriptor") && currentNode.getJSONObject("descriptor").has("table")) { + String table = currentNode.getJSONObject("descriptor").getString("table"); + if (table.contains(tableName.get())) { + return currentNode; + } + } + } + else { + // If no tableName is required, found a match by nodeType alone + return currentNode; + } + } + + // If not a match, recurse into the children + if (currentNode.has("children")) { + JSONArray children = currentNode.getJSONArray("children"); + for (int i = 0; i < children.length(); i++) { + JSONObject childNode = children.getJSONObject(i); + JSONObject result = findNodeRecursive(childNode, nodeType, tableName); + if (result != null) { + return result; + } + } + } + + return null; + } + + /** + * Searches the "details" array of a given plan node for a string containing specific text. + * + * @param node the {@link JSONObject} plan node to search within + * @param content the substring to search for in the details array + * @return the full text of the first matching detail, or null if no match is found. + */ + public static String findDetailContaining(JSONObject node, String content) + { + if (node != null && node.has("details")) { + JSONArray details = node.getJSONArray("details"); + for (int i = 0; i < details.length(); i++) { + String detailText = details.getString(i); + if (detailText.contains(content)) { + return detailText; + } + } + } + return null; + } } diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/query/index/HudiRecordLevelIndexSupportTest.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/query/index/HudiRecordLevelIndexSupportTest.java new file mode 100644 index 0000000000000..70101870b478a --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/query/index/HudiRecordLevelIndexSupportTest.java @@ -0,0 +1,484 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.query.index; + +import io.airlift.slice.Slice; +import io.airlift.slice.Slices; +import io.trino.spi.predicate.Domain; +import io.trino.spi.predicate.Range; +import io.trino.spi.predicate.TupleDomain; +import io.trino.spi.predicate.ValueSet; +import io.trino.spi.type.IntegerType; +import org.junit.jupiter.api.Test; + +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static io.trino.plugin.hudi.query.index.HudiRecordLevelIndexSupport.extractPredicatesForColumns; +import static io.trino.spi.predicate.Domain.singleValue; +import static io.trino.spi.predicate.Range.range; +import static io.trino.spi.type.BigintType.BIGINT; +import static io.trino.spi.type.VarcharType.VARCHAR; +import static org.assertj.core.api.Assertions.assertThat; + +public class HudiRecordLevelIndexSupportTest +{ + /** + * Example unit test case on how to initialize domains and run tests. + */ + @Test + public void testExtractPredicatesForColumns() + { + // Define column symbols + TestingColumnHandle idColumn = new TestingColumnHandle("id"); + TestingColumnHandle nameColumn = new TestingColumnHandle("name"); + TestingColumnHandle valueColumn = new TestingColumnHandle("value"); + TestingColumnHandle timestampColumn = new TestingColumnHandle("timestamp"); + + // Create domains for columns + Domain idDomain = singleValue(BIGINT, 42L); + Domain nameDomain = singleValue(VARCHAR, Slices.utf8Slice("test")); + Domain valueDomain = Domain.create( + ValueSet.ofRanges(range(BIGINT, 10L, true, 20L, false)), + false); + Domain timestampDomain = singleValue(BIGINT, 1715882800000L); + + // Build TupleDomain with all columns + Map domains = new HashMap<>(); + domains.put(idColumn, idDomain); + domains.put(nameColumn, nameDomain); + domains.put(valueColumn, valueDomain); + domains.put(timestampColumn, timestampDomain); + TupleDomain tupleDomain = TupleDomain.withColumnDomains(domains).transformKeys(TestingColumnHandle::getName); + + // Define the columns we want to extract + List columnsToExtract = List.of(idColumn.getName(), nameColumn.getName()); + + // Extract predicates + TupleDomain extractedDomain = extractPredicatesForColumns(tupleDomain, columnsToExtract); + + // Verify the result + Map extractedDomains = extractedDomain.getDomains().get(); + assertThat(extractedDomains).hasSize(2); + assertThat(extractedDomains).containsKey(idColumn.getName()); + assertThat(extractedDomains).containsKey(nameColumn.getName()); + assertThat(extractedDomains).doesNotContainKey(valueColumn.getName()); + assertThat(extractedDomains).doesNotContainKey(timestampColumn.getName()); + + assertThat(extractedDomains.get(idColumn.getName())).isEqualTo(idDomain); + assertThat(extractedDomains.get(nameColumn.getName())).isEqualTo(nameDomain); + } + + @Test + public void testExtractPredicatesForColumns_None() + { + // When TupleDomain is None + TupleDomain tupleDomain = TupleDomain.none(); + List columns = List.of(); + + TupleDomain result = HudiRecordLevelIndexSupport.extractPredicatesForColumns(tupleDomain, columns); + + assertThat(result.isNone()).isTrue(); + } + + @Test + public void testExtractPredicatesForColumns_All() + { + // When TupleDomain is All + TupleDomain tupleDomain = TupleDomain.all(); + List columns = List.of("col1"); + + TupleDomain result = HudiRecordLevelIndexSupport.extractPredicatesForColumns(tupleDomain, columns); + + assertThat(result.isAll()).isTrue(); + } + + @Test + public void testExtractPredicatesForColumns_WithInClause() + { + // Setup columns + TestingColumnHandle col1 = new TestingColumnHandle("col1"); + TestingColumnHandle col2 = new TestingColumnHandle("col2"); + + // Create a TupleDomain with col1 having multiple values (IN clause) + Map domains = new HashMap<>(); + domains.put(col1, createMultiValueDomain(List.of("value1", "value2", "value3"))); // IN ('value1', 'value2', 'value3') + domains.put(col2, createStringDomain("value4")); // = 'value4' + TupleDomain tupleDomain = TupleDomain.withColumnDomains(domains).transformKeys(TestingColumnHandle::getName); + + // Request predicates for col1 only + List columns = List.of(col1.getName()); + + // Should return TupleDomain with only col1 containing all its values + TupleDomain result = HudiRecordLevelIndexSupport.extractPredicatesForColumns(tupleDomain, columns); + + assertThat(result.isNone()).isFalse(); + assertThat(result.isAll()).isFalse(); + + Map resultDomains = result.getDomains().get(); + assertThat(resultDomains).hasSize(1); + assertThat(resultDomains).containsKey(col1.getName()); + assertThat(resultDomains).doesNotContainKey(col2.getName()); + + List values = getMultiValue(resultDomains.get(col1.getName())); + assertThat(values).hasSize(3); + assertThat(values).contains("value1", "value2", "value3"); + } + + @Test + public void testExtractPredicatesForColumns_MixedPredicates() + { + // Setup columns + TestingColumnHandle col1 = new TestingColumnHandle("col1"); // Simple equality + TestingColumnHandle col2 = new TestingColumnHandle("col2"); // IN clause + TestingColumnHandle col3 = new TestingColumnHandle("col3"); // Range predicate + TestingColumnHandle col4 = new TestingColumnHandle("col4"); // Not part of record key set + + // Create domains with different predicate types + Map domains = new HashMap<>(); + domains.put(col1, createStringDomain("value1")); + domains.put(col2, createMultiValueDomain(List.of("a", "b", "c"))); + + // Create a simple range domain simulation from 10 (inclusive) to 50 (exclusive) + Range range = Range.range(IntegerType.INTEGER, 10L, true, 50L, false); + ValueSet valueSet = ValueSet.ofRanges(range); + Domain rangeDomain = Domain.create(valueSet, false); + domains.put(col3, rangeDomain); + + domains.put(col4, createStringDomain("value4")); + + TupleDomain tupleDomain = TupleDomain.withColumnDomains(domains).transformKeys(TestingColumnHandle::getName); + + // Request predicates for col1, col2, and col3 + List columns = List.of(col1.getName(), col2.getName(), col3.getName()); + + TupleDomain result = HudiRecordLevelIndexSupport.extractPredicatesForColumns(tupleDomain, columns); + + Map resultDomains = result.getDomains().get(); + assertThat(resultDomains).hasSize(3); + + // Check col1 (equality) + List valuesCol1 = getMultiValue(resultDomains.get(col1.getName())); + assertThat(resultDomains).containsKey(col1.getName()); + assertThat(valuesCol1).hasSize(1); + assertThat(valuesCol1.getFirst()).isEqualTo("value1"); + + // Check col2 (IN clause) + List valuesCol2 = getMultiValue(resultDomains.get(col2.getName())); + assertThat(resultDomains).containsKey(col2.getName()); + assertThat(valuesCol2).hasSize(3); + assertThat(valuesCol2).containsAll(Arrays.asList("a", "b", "c")); + + // Check col3 (range) + assertThat(resultDomains).containsKey(col3.getName()); + assertThat(resultDomains.get(col3.getName()).getValues().getRanges().getSpan().getLowValue().get()).isEqualTo(10L); + assertThat(resultDomains.get(col3.getName()).getValues().getRanges().getSpan().getHighValue().get()).isEqualTo(50L); + + // Check col4 (not requested) + assertThat(resultDomains).doesNotContainKey(col4.getName()); + } + + @Test + public void testExtractPredicatesForColumns_NoMatchingColumns() + { + // Setup columns that don't match + TestingColumnHandle col1 = new TestingColumnHandle("col1"); + TestingColumnHandle col2 = new TestingColumnHandle("col2"); + TestingColumnHandle col3 = new TestingColumnHandle("col3"); + + // Create a TupleDomain with col1 and col2 + Map domains = new HashMap<>(); + domains.put(col1, createStringDomain("value1")); + domains.put(col2, createStringDomain("value2")); + TupleDomain tupleDomain = TupleDomain.withColumnDomains(domains).transformKeys(TestingColumnHandle::getName); + + // Request predicates for col3 only + List columns = List.of(col3.getName()); + + // Since no matching columns, should return TupleDomain.all() + TupleDomain result = HudiRecordLevelIndexSupport.extractPredicatesForColumns(tupleDomain, columns); + + // domains.isPresent() && domains.get().isEmpty() + assertThat(result.isAll()).isTrue(); + } + + @Test + public void testExtractPredicatesForColumns_PartialMatchingColumns() + { + // Setup columns + TestingColumnHandle col1 = new TestingColumnHandle("col1"); + TestingColumnHandle col2 = new TestingColumnHandle("col2"); + TestingColumnHandle col3 = new TestingColumnHandle("col3"); + + // Create a TupleDomain with col1, col2, and col3 + Map domains = new HashMap<>(); + domains.put(col1, createStringDomain("value1")); + domains.put(col2, createStringDomain("value2")); + domains.put(col3, createStringDomain("value3")); + TupleDomain tupleDomain = TupleDomain.withColumnDomains(domains).transformKeys(TestingColumnHandle::getName); + + // Request predicates for col1 and col3 only + List columns = List.of(col1.getName(), col3.getName()); + + // Should return TupleDomain with only col1 and col3 + TupleDomain result = HudiRecordLevelIndexSupport.extractPredicatesForColumns(tupleDomain, columns); + + assertThat(result.isNone()).isFalse(); + assertThat(result.isAll()).isFalse(); + + Map resultDomains = result.getDomains().get(); + assertThat(resultDomains).hasSize(2); + assertThat(resultDomains).containsKey(col1.getName()); + assertThat(resultDomains).containsKey(col3.getName()); + assertThat(resultDomains).doesNotContainKey(col2.getName()); + + assertThat(getSingleValue(resultDomains.get(col1.getName()))).isEqualTo("value1"); + assertThat(getSingleValue(resultDomains.get(col3.getName()))).isEqualTo("value3"); + } + + @Test + public void testExtractPredicatesForColumns_AllMatchingColumns() + { + // Setup columns + TestingColumnHandle col1 = new TestingColumnHandle("col1"); + TestingColumnHandle col2 = new TestingColumnHandle("col2"); + + // Create a TupleDomain with col1 and col2 + Map domains = new HashMap<>(); + domains.put(col1, createStringDomain("value1")); + domains.put(col2, createStringDomain("value2")); + TupleDomain tupleDomain = TupleDomain.withColumnDomains(domains).transformKeys(TestingColumnHandle::getName); + + // Request predicates for all columns + List columns = List.of(col1.getName(), col2.getName()); + + // Should return the original TupleDomain + TupleDomain result = HudiRecordLevelIndexSupport.extractPredicatesForColumns(tupleDomain, columns); + + assertThat(result.isNone()).isFalse(); + assertThat(result.isAll()).isFalse(); + + Map resultDomains = result.getDomains().get(); + assertThat(resultDomains).hasSize(2); + assertThat(resultDomains).containsKey(col1.getName()); + assertThat(resultDomains).containsKey(col2.getName()); + + assertThat(getSingleValue(resultDomains.get(col1.getName()))).isEqualTo("value1"); + assertThat(getSingleValue(resultDomains.get(col2.getName()))).isEqualTo("value2"); + } + + @Test + public void testConstructRecordKeys_WithInClause() + { + // Domain with multiple values for a key simulating an IN clause + Map domains = new HashMap<>(); + domains.put("key1", createMultiValueDomain(List.of("value1", "value2", "value3"))); + TupleDomain recordKeyDomains = TupleDomain.withColumnDomains(domains); + List recordKeys = List.of("key1"); + + List result = HudiRecordLevelIndexSupport.constructRecordKeys(recordKeyDomains, recordKeys); + + // The code should take the first value from the IN list for building the key + assertThat(result).hasSize(3); + assertThat(result).isEqualTo(List.of("value1", "value2", "value3")); + } + + @Test + public void testConstructRecordKeys_ComplexKeyWithInClause() + { + Map domains = new HashMap<>(); + // Domain with multiple values for the first key + domains.put("part1", createMultiValueDomain(List.of("val1a", "val1b", "val1c"))); + // Regular single-value domain for second key + domains.put("part2", createStringDomain("value2")); + + TupleDomain recordKeyDomains = TupleDomain.withColumnDomains(domains); + List recordKeys = List.of("part1", "part2"); + + List result = HudiRecordLevelIndexSupport.constructRecordKeys(recordKeyDomains, recordKeys); + + assertThat(result).hasSize(3); + // Expecting the first value of the IN clause to be used + assertThat(result.get(0)).isEqualTo("part1:val1a,part2:value2"); + } + + @Test + public void testConstructRecordKeys_MultipleKeysWithMultipleValues() + { + Map domains = new HashMap<>(); + // Multiple IN clauses + domains.put("part1", createMultiValueDomain(List.of("val1a", "val1b", "val1c"))); + domains.put("part2", createMultiValueDomain(List.of("val2a", "val2b"))); + + TupleDomain recordKeyDomains = TupleDomain.withColumnDomains(domains); + List recordKeys = List.of("part1", "part2"); + + List result = HudiRecordLevelIndexSupport.constructRecordKeys(recordKeyDomains, recordKeys); + + // Verify only the first value from each IN clause is used + assertThat(result).hasSize(6); + assertThat(result).isEqualTo( + List.of("part1:val1a,part2:val2a", "part1:val1a,part2:val2b", + "part1:val1b,part2:val2a", "part1:val1b,part2:val2b", + "part1:val1c,part2:val2a", "part1:val1c,part2:val2b")); + } + + @Test + public void testConstructRecordKeys_MultipleKeysWithRange() + { + Map domains = new HashMap<>(); + // Multiple IN clauses + domains.put("part1", createMultiValueDomain(List.of("val1a", "val1b", "val1c"))); + domains.put("part2", createMultiValueDomain(List.of("val2a", "val2b"))); + + Range range = Range.range(IntegerType.INTEGER, 10L, true, 50L, false); + ValueSet valueSet = ValueSet.ofRanges(range); + Domain rangeDomain = Domain.create(valueSet, false); + domains.put("part3", rangeDomain); + + TupleDomain recordKeyDomains = TupleDomain.withColumnDomains(domains); + List recordKeys = List.of("part1", "part2", "part3"); + + List result = HudiRecordLevelIndexSupport.constructRecordKeys(recordKeyDomains, recordKeys); + + // Can only handle IN and EQUAL cases + assertThat(result).isEmpty(); + } + + @Test + public void testConstructRecordKeys_NullRecordKeys() + { + TupleDomain recordKeyDomains = createStringTupleDomain(Map.of("key1", "value1")); + List recordKeys = null; + + List result = HudiRecordLevelIndexSupport.constructRecordKeys(recordKeyDomains, recordKeys); + + assertThat(result).isEmpty(); + } + + @Test + public void testConstructRecordKeys_EmptyRecordKeys() + { + TupleDomain recordKeyDomains = createStringTupleDomain(Map.of("key1", "value1")); + List recordKeys = Collections.emptyList(); + + List result = HudiRecordLevelIndexSupport.constructRecordKeys(recordKeyDomains, recordKeys); + + assertThat(result).isEmpty(); + } + + @Test + public void testConstructRecordKeys_EmptyDomains() + { + TupleDomain recordKeyDomains = TupleDomain.withColumnDomains(Collections.emptyMap()); + List recordKeys = List.of("key1"); + + List result = HudiRecordLevelIndexSupport.constructRecordKeys(recordKeyDomains, recordKeys); + + assertThat(result).isEmpty(); + } + + @Test + public void testConstructRecordKeys_MissingDomainForKey() + { + TupleDomain recordKeyDomains = createStringTupleDomain(Map.of("key1", "value1")); + List recordKeys = List.of("key2"); // Key not in domains + + List result = HudiRecordLevelIndexSupport.constructRecordKeys(recordKeyDomains, recordKeys); + + assertThat(result).isEmpty(); + } + + @Test + public void testConstructRecordKeys_SingleKey() + { + TupleDomain recordKeyDomains = createStringTupleDomain(Map.of("key1", "value1")); + List recordKeys = List.of("key1"); + + List result = HudiRecordLevelIndexSupport.constructRecordKeys(recordKeyDomains, recordKeys); + + assertThat(result).hasSize(1); + assertThat(result.getFirst()).isEqualTo("value1"); + } + + @Test + public void testConstructRecordKeys_ComplexKey() + { + Map keyValues = new HashMap<>(); + keyValues.put("part1", "value1"); + keyValues.put("part2", "value2"); + keyValues.put("part3", "value3"); + + TupleDomain recordKeyDomains = createStringTupleDomain(keyValues); + List recordKeys = List.of("part1", "part2", "part3"); + + List result = HudiRecordLevelIndexSupport.constructRecordKeys(recordKeyDomains, recordKeys); + + assertThat(result).hasSize(1); + assertThat(result.getFirst()).isEqualTo("part1:value1,part2:value2,part3:value3"); + } + + @Test + public void testConstructRecordKeys_ComplexKeyWithMissingPart() + { + Map keyValues = new HashMap<>(); + keyValues.put("part1", "value1"); + // part2 is missing + keyValues.put("part3", "value3"); + + TupleDomain recordKeyDomains = createStringTupleDomain(keyValues); + List recordKeys = List.of("part1", "part2", "part3"); + + List result = HudiRecordLevelIndexSupport.constructRecordKeys(recordKeyDomains, recordKeys); + + // Since one key is missing, should return empty list + assertThat(result).isEmpty(); + } + + // Helper methods for test data creation + private Domain createStringDomain(String value) + { + return Domain.singleValue(VARCHAR, Slices.utf8Slice(value)); + } + + private Domain createMultiValueDomain(List values) + { + return Domain.multipleValues(VARCHAR, values.stream().map(Slices::utf8Slice).collect(Collectors.toList())); + } + + private TupleDomain createStringTupleDomain(Map keyValues) + { + Map domains = keyValues.entrySet().stream() + .collect(Collectors.toMap( + Map.Entry::getKey, + entry -> createStringDomain(entry.getValue()))); + return TupleDomain.withColumnDomains(domains); + } + + private String getSingleValue(Domain domain) + { + return ((Slice) domain.getSingleValue()).toStringUtf8(); + } + + private List getMultiValue(Domain domain) + { + return domain.getNullableDiscreteSet().getNonNullValues().stream() + .map(x -> ((Slice) x) + .toStringUtf8()).toList(); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/query/index/TestingColumnHandle.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/query/index/TestingColumnHandle.java new file mode 100644 index 0000000000000..98f11e350f0b0 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/query/index/TestingColumnHandle.java @@ -0,0 +1,60 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.query.index; + +import io.trino.spi.connector.ColumnHandle; + +/** + * Test implementation of ColumnHandle for unit tests + */ +public class TestingColumnHandle + implements ColumnHandle +{ + private final String name; + + public TestingColumnHandle(String name) + { + this.name = name; + } + + public String getName() + { + return name; + } + + @Override + public int hashCode() + { + return name.hashCode(); + } + + @Override + public boolean equals(Object obj) + { + if (this == obj) { + return true; + } + if (obj == null || getClass() != obj.getClass()) { + return false; + } + TestingColumnHandle other = (TestingColumnHandle) obj; + return name.equals(other.name); + } + + @Override + public String toString() + { + return "Column:" + name; + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/split/TestHudiSplitFactory.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/split/TestHudiSplitFactory.java new file mode 100644 index 0000000000000..37d4eac6e88b1 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/split/TestHudiSplitFactory.java @@ -0,0 +1,202 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.split; + +import com.google.common.collect.ImmutableList; +import io.airlift.units.DataSize; +import io.trino.plugin.hive.HivePartitionKey; +import io.trino.plugin.hudi.HudiSplit; +import io.trino.plugin.hudi.HudiTableHandle; +import io.trino.spi.predicate.TupleDomain; +import org.apache.hudi.common.model.FileSlice; +import org.apache.hudi.common.model.HoodieBaseFile; +import org.apache.hudi.common.model.HoodieFileGroupId; +import org.apache.hudi.common.model.HoodieLogFile; +import org.apache.hudi.common.model.HoodieTableType; +import org.apache.hudi.common.util.Option; +import org.apache.hudi.common.util.collection.Pair; +import org.apache.hudi.storage.StoragePath; +import org.apache.hudi.storage.StoragePathInfo; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static io.airlift.units.DataSize.Unit.MEGABYTE; +import static org.assertj.core.api.Assertions.assertThat; + +public class TestHudiSplitFactory +{ + private static final String COMMIT_TIME = "20250625153731546"; + private static final List PARTITION_KEYS = ImmutableList.of(); + + @Test + public void testCreateHudiSplitsWithSmallBaseFile() + { + // Test with 20MB target split size and 10MB base file + // - should create 1 split + testSplitCreation( + DataSize.of(20, MEGABYTE), + DataSize.of(10, MEGABYTE), + Option.empty(), + ImmutableList.of( + Pair.of(0L, DataSize.of(10, MEGABYTE)))); + } + + @Test + public void testCreateHudiSplitsWithExactSplitDivide() + { + // Test with 20MB target and 60MB base file + // - should create 3 splits + testSplitCreation( + DataSize.of(20, MEGABYTE), + DataSize.of(60, MEGABYTE), + Option.empty(), + ImmutableList.of( + Pair.of(0L, DataSize.of(20, MEGABYTE)), + Pair.of(DataSize.of(20, MEGABYTE).toBytes(), DataSize.of(20, MEGABYTE)), + Pair.of(DataSize.of(40, MEGABYTE).toBytes(), DataSize.of(20, MEGABYTE)))); + } + + @Test + public void testCreateHudiSplitsWithSlightlyOversizedFile() + { + // Test with 20MB target and 61MB base file + // - should create 3 splits (61/20 = 3.05, 0.05 is within split slop of 0.1) + testSplitCreation( + DataSize.of(20, MEGABYTE), + DataSize.of(61, MEGABYTE), + Option.empty(), + ImmutableList.of( + Pair.of(0L, DataSize.of(20, MEGABYTE)), + Pair.of(DataSize.of(20, MEGABYTE).toBytes(), DataSize.of(20, MEGABYTE)), + Pair.of(DataSize.of(40, MEGABYTE).toBytes(), DataSize.of(21, MEGABYTE)))); + } + + @Test + public void testCreateHudiSplitsWithOversizedFileExceedingSlop() + { + // Test with 20MB target and 65MB base file + // - should create 4 splits (65/20 = 3.25) + testSplitCreation( + DataSize.of(20, MEGABYTE), + DataSize.of(65, MEGABYTE), + Option.empty(), + ImmutableList.of( + Pair.of(0L, DataSize.of(20, MEGABYTE)), + Pair.of(DataSize.of(20, MEGABYTE).toBytes(), DataSize.of(20, MEGABYTE)), + Pair.of(DataSize.of(40, MEGABYTE).toBytes(), DataSize.of(20, MEGABYTE)), + Pair.of(DataSize.of(60, MEGABYTE).toBytes(), DataSize.of(5, MEGABYTE)))); + } + + @Test + public void testCreateHudiSplitsWithLargerBlockSize() + { + // Test with 1MB target split size and 32MB base file + // - should create 4 splits because the block size of 8MB is larger than the target split size + testSplitCreation( + DataSize.of(1, MEGABYTE), + DataSize.of(32, MEGABYTE), + Option.empty(), + ImmutableList.of( + Pair.of(0L, DataSize.of(8, MEGABYTE)), + Pair.of(DataSize.of(8, MEGABYTE).toBytes(), DataSize.of(8, MEGABYTE)), + Pair.of(DataSize.of(16, MEGABYTE).toBytes(), DataSize.of(8, MEGABYTE)), + Pair.of(DataSize.of(24, MEGABYTE).toBytes(), DataSize.of(8, MEGABYTE)))); + } + + @Test + public void testCreateHudiSplitsWithLogFile() + { + // Test with 20MB target and 65MB base file and 10MB log file + // - should create 1 split regardless of size + testSplitCreation( + DataSize.of(20, MEGABYTE), + DataSize.of(65, MEGABYTE), + Option.of(DataSize.of(10, MEGABYTE)), + ImmutableList.of( + Pair.of(0L, DataSize.of(65, MEGABYTE)))); + } + + @Test + public void testCreateHudiSplitsWithZeroSizeFile() + { + // Test with zero-size file - should create 1 split with zero size + testSplitCreation( + DataSize.of(128, MEGABYTE), + DataSize.of(0, MEGABYTE), + Option.empty(), + ImmutableList.of(Pair.of(0L, DataSize.of(0, MEGABYTE)))); + } + + private static void testSplitCreation( + DataSize targetSplitSize, + DataSize baseFileSize, + Option logFileSize, + List> expectedSplitInfo) + { + HudiTableHandle tableHandle = createTableHandle(); + HudiSplitWeightProvider weightProvider = new SizeBasedSplitWeightProvider(0.05, DataSize.of(128, MEGABYTE)); + + FileSlice fileSlice = createFileSlice(baseFileSize, logFileSize); + + List splits = HudiSplitFactory.createHudiSplits( + tableHandle, PARTITION_KEYS, fileSlice, COMMIT_TIME, weightProvider, targetSplitSize); + + assertThat(splits).hasSize(expectedSplitInfo.size()); + + for (int i = 0; i < expectedSplitInfo.size(); i++) { + HudiSplit split = splits.get(i); + assertThat(split.getBaseFile()).isPresent(); + assertThat(split.getBaseFile().get().getFileSize()).isEqualTo(baseFileSize.toBytes()); + assertThat(split.getBaseFile().get().getStart()) + .isEqualTo(expectedSplitInfo.get(i).getLeft()); + assertThat(split.getBaseFile().get().getLength()) + .isEqualTo(expectedSplitInfo.get(i).getRight().toBytes()); + assertThat(split.getCommitTime()).isEqualTo(COMMIT_TIME); + assertThat(split.getLogFiles().size()).isEqualTo(logFileSize.isPresent() ? 1 : 0); + long totalSize = logFileSize.isPresent() ? + baseFileSize.toBytes() + logFileSize.get().toBytes() : expectedSplitInfo.get(i).getRight().toBytes(); + assertThat(split.getSplitWeight()).isEqualTo(weightProvider.calculateSplitWeight(totalSize)); + } + } + + private static HudiTableHandle createTableHandle() + { + return new HudiTableHandle( + "test_schema", + "test_table", + "/test/path", + HoodieTableType.MERGE_ON_READ, + ImmutableList.of(), + TupleDomain.all(), + TupleDomain.all()); + } + + private static FileSlice createFileSlice(DataSize baseFileSize, Option logFileSize) + { + String fileId = "5a4f6a70-0306-40a8-952b-045b0d8ff0d4-0"; + HoodieFileGroupId fileGroupId = new HoodieFileGroupId("partition", fileId); + long blockSize = 8L * 1024 * 1024; + String baseFilePath = "/test/path/" + fileGroupId + "_4-19-0_" + COMMIT_TIME + ".parquet"; + String logFilePath = "/test/path/." + fileId + "_2025062515374131546.log.1_0-53-80"; + StoragePathInfo baseFileInfo = new StoragePathInfo( + new StoragePath(baseFilePath), baseFileSize.toBytes(), false, (short) 0, blockSize, System.currentTimeMillis()); + StoragePathInfo logFileInfo = new StoragePathInfo( + new StoragePath(logFilePath), logFileSize.isPresent() ? logFileSize.get().toBytes() : 0L, + false, (short) 0, blockSize, System.currentTimeMillis()); + HoodieBaseFile baseFile = new HoodieBaseFile(baseFileInfo); + return new FileSlice(fileGroupId, COMMIT_TIME, baseFile, + logFileSize.isPresent() ? ImmutableList.of(new HoodieLogFile(logFileInfo)) : ImmutableList.of()); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoHudiStorage.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoHudiStorage.java deleted file mode 100644 index ba379496118b4..0000000000000 --- a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoHudiStorage.java +++ /dev/null @@ -1,304 +0,0 @@ -/* - * Licensed 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. - */ -package io.trino.plugin.hudi.storage; - -import com.google.common.collect.ImmutableList; -import io.trino.filesystem.TrinoFileSystem; -import io.trino.filesystem.local.LocalFileSystemFactory; -import io.trino.spi.block.TestingSession; -import org.apache.hudi.common.util.Option; -import org.apache.hudi.io.storage.TestHoodieStorageBase; -import org.apache.hudi.io.util.IOUtils; -import org.apache.hudi.storage.HoodieInstantWriter; -import org.apache.hudi.storage.HoodieStorage; -import org.apache.hudi.storage.StoragePath; -import org.apache.hudi.storage.StoragePathInfo; -import org.junit.jupiter.api.BeforeAll; -import org.junit.jupiter.api.Test; - -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.net.URI; -import java.net.URISyntaxException; -import java.nio.file.Path; -import java.util.Comparator; -import java.util.List; - -import static com.google.common.collect.ImmutableList.toImmutableList; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.assertThatThrownBy; - -final class TestTrinoHudiStorage - extends TestHoodieStorageBase -{ - private static final byte[] EMPTY_BYTES = new byte[] {}; - - private static TrinoFileSystem fileSystem; - - @BeforeAll - static void setUp() - { - fileSystem = new LocalFileSystemFactory(Path.of("/tmp")) - .create(TestingSession.SESSION); - } - - @Override - protected HoodieStorage getStorage(Object fileSystem, Object config) - { - return new TrinoHudiStorage((TrinoFileSystem) fileSystem, (TrinoStorageConfiguration) config); - } - - @Override - protected TrinoFileSystem getFileSystem(Object config) - { - return fileSystem; - } - - @Override - protected TrinoStorageConfiguration getConf() - { - return new TrinoStorageConfiguration(); - } - - @Override - protected String getTempDir() - { - // As the LocalFileSystemFactory is used, the path should have "local:" as the scheme - return "local:" + this.tempDir.toUri().getPath(); - } - - @Override - @Test - public void testGetUri() - throws URISyntaxException - { - assertThat(getStorage().getUri()).isEqualTo(new URI("")); - } - - // This test is overridden since TrinoHudiStorage does not support globEntries, - // as it is not used in the Trino Hudi connector - @Override - @Test - public void testListing() - throws IOException - { - HoodieStorage storage = getStorage(); - // Full list: - // w/1.file - // w/2.file - // x/1.file - // x/2.file - // x/y/1.file - // x/y/2.file - // x/z/1.file - // x/z/2.file - prepareFilesOnStorage(storage); - - validatePathInfoList( - storage.listDirectEntries(new StoragePath(getTempDir(), "x")), - ImmutableList.builder() - .add(getStoragePathInfo("x/1.file", false)) - .add(getStoragePathInfo("x/2.file", false)) - .add(getStoragePathInfo("x/y", true)) - .add(getStoragePathInfo("x/z", true)) - .build()); - - validatePathInfoList( - storage.listFiles(new StoragePath(getTempDir(), "x")), - ImmutableList.builder() - .add(getStoragePathInfo("x/1.file", false)) - .add(getStoragePathInfo("x/2.file", false)) - .add(getStoragePathInfo("x/y/1.file", false)) - .add(getStoragePathInfo("x/y/2.file", false)) - .add(getStoragePathInfo("x/z/1.file", false)) - .add(getStoragePathInfo("x/z/2.file", false)) - .build()); - - validatePathInfoList( - storage.listDirectEntries( - new StoragePath(getTempDir(), "x"), e -> e.getName().contains("2")), - ImmutableList.builder() - .add(getStoragePathInfo("x/2.file", false)) - .build()); - - validatePathInfoList( - storage.listDirectEntries(ImmutableList.builder() - .add(new StoragePath(getTempDir(), "w")) - .add(new StoragePath(getTempDir(), "x/z")) - .build()), - ImmutableList.builder() - .add(getStoragePathInfo("w/1.file", false)) - .add(getStoragePathInfo("w/2.file", false)) - .add(getStoragePathInfo("x/z/1.file", false)) - .add(getStoragePathInfo("x/z/2.file", false)) - .build()); - - assertThatThrownBy( - () -> storage.listDirectEntries(new StoragePath(getTempDir(), "*"))) - .isInstanceOf(FileNotFoundException.class); - - // TrinoHudiStorage does not support globEntries, as it is not used - // in the Trino Hudi connector - assertThatThrownBy( - () -> storage.globEntries(new StoragePath(getTempDir(), "x/*/1.file"))) - .isInstanceOf(UnsupportedOperationException.class); - } - - // This test is overridden since TrinoHudiStorage always returns true for deletion, - // because TrinoFileSystem does not indicate whether the file to delete exists or not - @Override - @Test - public void testDelete() - throws IOException - { - HoodieStorage storage = getStorage(); - - StoragePath path = new StoragePath(getTempDir(), "testDelete/1.file"); - assertThat(storage.exists(path)).isFalse(); - storage.create(path).close(); - assertThat(storage.exists(path)).isTrue(); - - assertThat(storage.deleteFile(path)).isTrue(); - assertThat(storage.exists(path)).isFalse(); - // TrinoFileSystem does not indicate whether the file to delete exists or not - assertThat(storage.deleteFile(path)).isTrue(); - - StoragePath path2 = new StoragePath(getTempDir(), "testDelete/2"); - assertThat(storage.exists(path2)).isFalse(); - assertThat(storage.createDirectory(path2)).isTrue(); - assertThat(storage.exists(path2)).isTrue(); - - assertThat(storage.deleteDirectory(path2)).isTrue(); - assertThat(storage.exists(path2)).isFalse(); - // TrinoFileSystem does not indicate whether the directory to delete exists or not - assertThat(storage.deleteDirectory(path2)).isTrue(); - } - - // This test is overridden because TrinoFileSystem does not overwrite the file with - // #create so the test logic has to be adapted (not that this behavior does not affect - // product code logic in Trino Hudi connector as it's read-only) - @Override - @Test - public void testCreateWriteAndRead() - throws IOException - { - HoodieStorage storage = getStorage(); - - StoragePath path = new StoragePath(getTempDir(), "testCreateAppendAndRead/1.file"); - assertThat(storage.exists(path)).isFalse(); - storage.create(path).close(); - validatePathInfo(storage, path, EMPTY_BYTES, false); - storage.deleteFile(path); - - byte[] data = new byte[] {2, 42, 49, (byte) 158, (byte) 233, 66, 9}; - - try (OutputStream stream = storage.create(path)) { - stream.write(data); - stream.flush(); - } - validatePathInfo(storage, path, data, false); - - assertThatThrownBy(() -> storage.create(path, false)) - .isInstanceOf(IOException.class); - validatePathInfo(storage, path, data, false); - - assertThatThrownBy(() -> storage.create(path, false)) - .isInstanceOf(IOException.class); - validatePathInfo(storage, path, data, false); - - StoragePath path2 = new StoragePath(getTempDir(), "testCreateAppendAndRead/2.file"); - assertThat(storage.exists(path2)).isFalse(); - assertThat(storage.createNewFile(path2)).isTrue(); - validatePathInfo(storage, path2, EMPTY_BYTES, false); - assertThat(storage.createNewFile(path2)).isFalse(); - - StoragePath path3 = new StoragePath(getTempDir(), "testCreateAppendAndRead/3.file"); - assertThat(storage.exists(path3)).isFalse(); - storage.createImmutableFileInPath(path3, Option.of(HoodieInstantWriter.convertByteArrayToWriter(data))); - validatePathInfo(storage, path3, data, false); - - StoragePath path4 = new StoragePath(getTempDir(), "testCreateAppendAndRead/4"); - assertThat(storage.exists(path4)).isFalse(); - assertThat(storage.createDirectory(path4)).isTrue(); - validatePathInfo(storage, path4, EMPTY_BYTES, true); - assertThat(storage.createDirectory(path4)).isTrue(); - } - - private HoodieStorage getStorage() - { - Object config = getConf(); - return getStorage(getFileSystem(config), config); - } - - private StoragePathInfo getStoragePathInfo(String subPath, boolean isDirectory) - { - return new StoragePathInfo(new StoragePath(getTempDir(), subPath), - 0, isDirectory, (short) 1, 1000000L, 10L); - } - - private static void validatePathInfo( - HoodieStorage storage, - StoragePath path, - byte[] data, - boolean isDirectory) - throws IOException - { - assertThat(storage.exists(path)).isTrue(); - StoragePathInfo pathInfo = storage.getPathInfo(path); - assertThat(pathInfo.getPath()).isEqualTo(path); - assertThat(pathInfo.isDirectory()).isEqualTo(isDirectory); - assertThat(pathInfo.isFile()).isEqualTo(!isDirectory); - if (!isDirectory) { - assertThat(pathInfo.getLength()).isEqualTo(data.length); - try (InputStream stream = storage.open(path)) { - assertThat(IOUtils.readAsByteArray(stream, data.length)).isEqualTo(data); - } - assertThat(pathInfo.getModificationTime()).isGreaterThan(0); - } - } - - private static void validatePathInfoList( - List actual, - List expected) - { - assertThat(actual).hasSize(expected.size()); - List sortedExpected = expected.stream() - .sorted(Comparator.comparing(StoragePathInfo::getPath)) - .collect(toImmutableList()); - List sortedActual = actual.stream() - .sorted(Comparator.comparing(StoragePathInfo::getPath)) - .collect(toImmutableList()); - for (int i = 0; i < expected.size(); i++) { - // We cannot use StoragePathInfo#equals as that only compares the path - assertThat(sortedActual.get(i).getPath()).isEqualTo(sortedExpected.get(i).getPath()); - assertThat(sortedActual.get(i).isDirectory()).isEqualTo(sortedExpected.get(i).isDirectory()); - assertThat(sortedActual.get(i).isFile()).isEqualTo(sortedExpected.get(i).isFile()); - if (sortedExpected.get(i).isFile()) { - assertThat(sortedActual.get(i).getLength()).isEqualTo(sortedExpected.get(i).getLength()); - } - assertThat(sortedActual.get(i).getModificationTime()).isGreaterThan(0); - } - } - - private void prepareFilesOnStorage(HoodieStorage storage) - throws IOException - { - String directory = getTempDir(); - for (String relativePath : RELATIVE_FILE_PATHS) { - storage.create(new StoragePath(directory, relativePath)).close(); - } - } -} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoStorageConfiguration.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoStorageConfiguration.java deleted file mode 100644 index 0304e4459ad64..0000000000000 --- a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/storage/TestTrinoStorageConfiguration.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Licensed 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. - */ -package io.trino.plugin.hudi.storage; - -import org.apache.hudi.io.storage.BaseTestStorageConfiguration; -import org.junit.jupiter.api.Test; - -import java.util.HashMap; -import java.util.Map; - -import static org.apache.hudi.common.config.HoodieStorageConfig.HOODIE_IO_FACTORY_CLASS; -import static org.apache.hudi.common.config.HoodieStorageConfig.HOODIE_STORAGE_CLASS; -import static org.assertj.core.api.Assertions.assertThat; - -final class TestTrinoStorageConfiguration - extends BaseTestStorageConfiguration> -{ - @Override - protected TrinoStorageConfiguration getStorageConfiguration(Map config) - { - return new TrinoStorageConfiguration(config); - } - - @Override - protected Map getConf(Map config) - { - return config; - } - - @Test - void testConfigOverrides() - { - String overriddenClassName = "NewIoFactoryClass"; - Map providedConfig = new HashMap<>(); - providedConfig.put(HOODIE_IO_FACTORY_CLASS.key(), overriddenClassName); - TrinoStorageConfiguration config = getStorageConfiguration(providedConfig); - assertThat(config.getString(HOODIE_IO_FACTORY_CLASS.key()).get()).isEqualTo(overriddenClassName); - assertThat(config.getString(HOODIE_STORAGE_CLASS.key()).get()).isEqualTo(TrinoHudiStorage.class.getName()); - } -} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/HudiTableUnzipper.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/HudiTableUnzipper.java new file mode 100644 index 0000000000000..ac1405819127d --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/HudiTableUnzipper.java @@ -0,0 +1,125 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.testing; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Comparator; +import java.util.stream.Stream; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +import static com.google.common.io.Resources.getResource; +import static java.util.Objects.requireNonNull; + +public class HudiTableUnzipper +{ + private static final String ZIP_EXT = ".zip"; + + private HudiTableUnzipper() {} + + public static void unzipAllItemsInResource(String resourceName, Path outputPath) + throws IOException, URISyntaxException + { + requireNonNull(resourceName, "Resource name cannot be null or empty."); + + URL resourceUrl = HudiTableUnzipper.class.getClassLoader().getResource(resourceName); + if (resourceUrl == null) { + throw new IOException("Resource not found: " + resourceName); + } + + for (File file : Path.of(getResource(resourceName).toURI()).toFile().listFiles()) { + if (file.isFile() && file.getName().endsWith(ZIP_EXT)) { + // Only handle zip files + unzipFile(file.toURI().toURL(), outputPath); + } + } + } + + private static void unzipFile(URL resourceUrl, Path targetDirectory) + throws IOException + { + try (InputStream is = resourceUrl.openStream(); ZipInputStream zis = new ZipInputStream(is)) { + ZipEntry zipEntry = zis.getNextEntry(); + byte[] buffer = new byte[1024]; + + while (zipEntry != null) { + Path newFilePath = targetDirectory.resolve(zipEntry.getName()); + + // Prevent Zip Slip vulnerability (Do not want files written outside the our target dir) + if (!newFilePath.normalize().startsWith(targetDirectory.normalize())) { + throw new IOException("Bad zip entry: " + zipEntry.getName()); + } + + if (zipEntry.isDirectory()) { + // Handle directories + if (!Files.exists(newFilePath)) { + Files.createDirectories(newFilePath); + } + } + else { + // Ensure parent directory exists before handling files + Path parentDir = newFilePath.getParent(); + if (parentDir != null && !Files.exists(parentDir)) { + Files.createDirectories(parentDir); + } + + try (FileOutputStream fos = new FileOutputStream(newFilePath.toFile())) { + int len; + while ((len = zis.read(buffer)) > 0) { + fos.write(buffer, 0, len); + } + } + } + zis.closeEntry(); + zipEntry = zis.getNextEntry(); + } + } + } + + public static void deleteInflatedFiles(Path path) + throws URISyntaxException, IOException + { + requireNonNull(path, "path cannot be null or empty."); + for (File file : path.toFile().listFiles()) { + // Ignore all zip files + if (file.isFile() && file.getName().endsWith(ZIP_EXT)) { + continue; + } + // Not really required, as we are in the test-classes directory + // Ensure that we are only deleting deflated folders of zip + if (path.resolve(file.getName() + ZIP_EXT).toFile().exists()) { + deleteFilesInDirectory(file.toPath()); + } + } + } + + private static void deleteFilesInDirectory(Path pathToDelete) + throws IOException + { + // Recursively delete all files in path + try (Stream filesInDir = Files.walk(pathToDelete)) { + // Reverse order to delete all children before parent + filesInDir.sorted(Comparator.reverseOrder()) + .map(Path::toFile) + .forEach(File::delete); + } + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/ResourceHudiTablesInitializer.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/ResourceHudiTablesInitializer.java index 55d7c78b22fbf..5783da409e569 100644 --- a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/ResourceHudiTablesInitializer.java +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/ResourceHudiTablesInitializer.java @@ -15,6 +15,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import io.airlift.log.Logger; import io.trino.filesystem.Location; import io.trino.filesystem.TrinoFileSystem; import io.trino.filesystem.TrinoFileSystemFactory; @@ -29,51 +30,120 @@ import io.trino.metastore.StorageFormat; import io.trino.metastore.Table; import io.trino.plugin.hudi.HudiConnector; +import io.trino.plugin.hudi.storage.HudiTrinoStorage; +import io.trino.plugin.hudi.storage.TrinoStorageConfiguration; import io.trino.spi.security.ConnectorIdentity; import io.trino.testing.QueryRunner; +import org.apache.hudi.common.table.HoodieTableMetaClient; +import org.apache.hudi.common.table.HoodieTableVersion; -import java.io.File; import java.io.IOException; +import java.io.InputStream; import java.io.OutputStream; import java.nio.file.Files; import java.nio.file.Path; +import java.security.DigestInputStream; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Optional; +import java.util.UUID; import java.util.stream.Collectors; import java.util.stream.Stream; -import static com.google.common.io.Resources.getResource; import static io.trino.hive.formats.HiveClassNames.HUDI_PARQUET_INPUT_FORMAT; +import static io.trino.hive.formats.HiveClassNames.HUDI_PARQUET_REALTIME_INPUT_FORMAT; import static io.trino.hive.formats.HiveClassNames.MAPRED_PARQUET_OUTPUT_FORMAT_CLASS; import static io.trino.hive.formats.HiveClassNames.PARQUET_HIVE_SERDE_CLASS; +import static io.trino.metastore.HiveType.HIVE_BINARY; +import static io.trino.metastore.HiveType.HIVE_BOOLEAN; +import static io.trino.metastore.HiveType.HIVE_BYTE; +import static io.trino.metastore.HiveType.HIVE_DATE; import static io.trino.metastore.HiveType.HIVE_DOUBLE; +import static io.trino.metastore.HiveType.HIVE_FLOAT; import static io.trino.metastore.HiveType.HIVE_INT; import static io.trino.metastore.HiveType.HIVE_LONG; +import static io.trino.metastore.HiveType.HIVE_SHORT; import static io.trino.metastore.HiveType.HIVE_STRING; +import static io.trino.metastore.HiveType.HIVE_TIMESTAMP; +import static io.trino.metastore.type.TypeInfoFactory.getDecimalTypeInfo; +import static io.trino.metastore.type.TypeInfoFactory.getListTypeInfo; +import static io.trino.metastore.type.TypeInfoFactory.getStructTypeInfo; import static io.trino.plugin.hive.HivePartitionManager.extractPartitionValues; import static io.trino.plugin.hive.TableType.EXTERNAL_TABLE; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.ARRAY_BOOLEAN_TYPE_INFO; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.ARRAY_DOUBLE_TYPE_INFO; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.ARRAY_INT_TYPE_INFO; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.ARRAY_STRING_TYPE_INFO; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.BOOLEAN_TYPE_INFO; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.DATE_TYPE_INFO; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.DOUBLE_TYPE_INFO; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.INT_TYPE_INFO; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.MAP_STRING_DATE_TYPE_INFO; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.MAP_STRING_INT_TYPE_INFO; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.MAP_STRING_LONG_TYPE_INFO; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.STRING_TYPE_INFO; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.TIMESTAMP_TYPE_INFO; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.charHiveType; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.decimalHiveType; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.listHiveType; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.mapHiveType; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.structHiveType; +import static io.trino.plugin.hudi.testing.TypeInfoHelper.varcharHiveType; public class ResourceHudiTablesInitializer implements HudiTablesInitializer { + private static final Logger log = Logger.get(ResourceHudiTablesInitializer.class); + private static final String HASH_ALGORITHM = "SHA-256"; + private static final String TEST_RESOURCE_NAME = "hudi-testing-data"; + + // There might be other entry points that are using this initializer, make the location unique so it is more identifiable via logs + private final String baseLocationPrefix = UUID.randomUUID().toString(); + private final Path tempDir; + + /** + * Manually declaring a temp directory here and performing a manual cleanup as this constructor is invoked in HudiQueryRunner in a @BeforeAll static function. + * This means that jupiter's managed @TempDir annotation cannot be used as the path will be passed as null. + */ + public ResourceHudiTablesInitializer() + { + // There are multiple entry points and they may perform unzipping together, ensure that they are all unzipping to different paths + try { + this.tempDir = Files.createTempDirectory(TEST_RESOURCE_NAME + "_" + baseLocationPrefix); + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + @Override public void initializeTables(QueryRunner queryRunner, Location externalLocation, String schemaName) throws Exception { + // Inflate all deflated test resource archives to a temporary directory + HudiTableUnzipper.unzipAllItemsInResource(TEST_RESOURCE_NAME, tempDir); TrinoFileSystem fileSystem = ((HudiConnector) queryRunner.getCoordinator().getConnector("hudi")).getInjector() .getInstance(TrinoFileSystemFactory.class) .create(ConnectorIdentity.ofUser("test")); - Location baseLocation = externalLocation.appendSuffix(schemaName); - copyDir(new File(getResource("hudi-testing-data").toURI()).toPath(), fileSystem, baseLocation); + String locationSuffix = schemaName + "_" + baseLocationPrefix; + Location baseLocation = externalLocation.appendSuffix(locationSuffix); + log.info("Initialized test resource directory as: %s", baseLocation.toString()); + copyDir(tempDir, fileSystem, baseLocation); + // Perform a cleanup + HudiTableUnzipper.deleteInflatedFiles(tempDir); for (TestingTable table : TestingTable.values()) { String tableName = table.getTableName(); Location tablePath = baseLocation.appendPath(tableName); + + // Always create ro table by default createTable( queryRunner, schemaName, @@ -81,7 +151,27 @@ public void initializeTables(QueryRunner queryRunner, Location externalLocation, tableName, table.getDataColumns(), table.getPartitionColumns(), - table.getPartitions()); + table.getPartitions(), + false); + + if (table.isCreateRtTable()) { + createTable( + queryRunner, + schemaName, + tablePath, + table.getRtTableName(), + table.getDataColumns(), + table.getPartitionColumns(), + table.getPartitions(), + true); + } + + // Set table version + HoodieTableMetaClient metaClient = HoodieTableMetaClient.builder() + .setStorage(new HudiTrinoStorage(fileSystem, new TrinoStorageConfiguration())) + .setBasePath(tablePath.toString()) + .build(); + table.setTableVersion(metaClient.getTableConfig().getTableVersion()); } } @@ -92,13 +182,19 @@ private void createTable( String tableName, List dataColumns, List partitionColumns, - Map partitions) + Map partitions, + boolean isRtTable) { - StorageFormat storageFormat = StorageFormat.create( + StorageFormat roStorageFormat = StorageFormat.create( PARQUET_HIVE_SERDE_CLASS, HUDI_PARQUET_INPUT_FORMAT, MAPRED_PARQUET_OUTPUT_FORMAT_CLASS); + StorageFormat rtStorageFormat = StorageFormat.create( + PARQUET_HIVE_SERDE_CLASS, + HUDI_PARQUET_REALTIME_INPUT_FORMAT, + MAPRED_PARQUET_OUTPUT_FORMAT_CLASS); + Table table = Table.builder() .setDatabaseName(schemaName) .setTableName(tableName) @@ -108,12 +204,13 @@ private void createTable( .setPartitionColumns(partitionColumns) .setParameters(ImmutableMap.of("serialization.format", "1", "EXTERNAL", "TRUE")) .withStorage(storageBuilder -> storageBuilder - .setStorageFormat(storageFormat) + .setStorageFormat(isRtTable ? rtStorageFormat : roStorageFormat) .setLocation(tablePath.toString())) .build(); + HiveMetastore metastore = ((HudiConnector) queryRunner.getCoordinator().getConnector("hudi")).getInjector() - .getInstance(HiveMetastoreFactory.class) - .createMetastore(Optional.empty()); + .getInstance(HiveMetastoreFactory.class) + .createMetastore(Optional.empty()); metastore.createTable(table, PrincipalPrivileges.NO_PRIVILEGES); List partitionsToAdd = new ArrayList<>(); @@ -123,7 +220,7 @@ private void createTable( .setTableName(tableName) .setValues(extractPartitionValues(partitionName)) .withStorage(storageBuilder -> storageBuilder - .setStorageFormat(storageFormat) + .setStorageFormat(isRtTable ? rtStorageFormat : roStorageFormat) .setLocation(tablePath.appendPath(partitionPath).toString())) .setColumns(dataColumns) .build(); @@ -152,21 +249,104 @@ public static void copyDir(Path sourceDirectory, TrinoFileSystem fileSystem, Loc continue; } + HashAndSizeResult srcHashAndSize; + try { + srcHashAndSize = calculateHashAndSize(path); + } + catch (NoSuchAlgorithmException e) { + throw new IOException("Failed to calculate source hash: Algorithm not found", e); + } + Location location = destinationDirectory.appendPath(sourceDirectory.relativize(path).toString()); fileSystem.createDirectory(location.parentDirectory()); try (OutputStream out = fileSystem.newOutputFile(location).create()) { Files.copy(path, out); + // Flush all data before close() to ensure durability + out.flush(); + } + + HashAndSizeResult dstHashAndSize; + try { + dstHashAndSize = calculateHashAndSize(location, fileSystem); + } + catch (NoSuchAlgorithmException e) { + throw new IOException("Failed to calculate destination hash: Algorithm not found", e); + } + catch (IOException e) { + throw new IOException("Failed to read back " + location + " for hash verification", e); + } + + if (!Arrays.equals(srcHashAndSize.hash, dstHashAndSize.hash)) { + // Hashes do not match, file is corrupt or copy failed + String errorMessage = String.format( + "Hash mismatch for file: %s (source size: %d bytes) copied to %s (destination size: %d bytes). Content hashes differ", + path, + srcHashAndSize.size, + location, + dstHashAndSize.size); + throw new IOException(errorMessage); } } } } + /** + * Helper method to calculate hash and size from an input stream + */ + private static HashAndSizeResult calculateHashAndSize(InputStream inputStream) + throws IOException, NoSuchAlgorithmException + { + MessageDigest md = MessageDigest.getInstance(HASH_ALGORITHM); + try (DigestInputStream dis = new DigestInputStream(inputStream, md)) { + byte[] buffer = new byte[8192]; + int bytesRead; + long streamSize = 0; + while ((bytesRead = dis.read(buffer)) != -1) { + streamSize += bytesRead; + } + return new HashAndSizeResult(md.digest(), streamSize); + } + } + + /** + * Helper method to calculate hash for a local Path + */ + private static HashAndSizeResult calculateHashAndSize(Path path) + throws IOException, NoSuchAlgorithmException + { + try (InputStream is = Files.newInputStream(path)) { + return calculateHashAndSize(is); + } + } + + /** + * Helper method to calculate hash for a file on TrinoFileSystem + */ + private static HashAndSizeResult calculateHashAndSize(Location location, TrinoFileSystem fileSystem) + throws IOException, NoSuchAlgorithmException + { + try (InputStream is = fileSystem.newInputFile(location).newStream()) { + return calculateHashAndSize(is); + } + } + public enum TestingTable { HUDI_NON_PART_COW(nonPartitionRegularColumns()), - HUDI_COW_PT_TBL(multiPartitionRegularColumns(), multiPartitionColumns(), multiPartitions()), - STOCK_TICKS_COW(stockTicksRegularColumns(), stockTicksPartitionColumns(), stockTicksPartitions()), - STOCK_TICKS_MOR(stockTicksRegularColumns(), stockTicksPartitionColumns(), stockTicksPartitions()), + HUDI_TRIPS_COW_V8(tripsRegularColumns()), + HUDI_COW_PT_TBL(multiPartitionRegularColumns(), multiPartitionColumns(), multiPartitions(), false), + STOCK_TICKS_COW(stockTicksRegularColumns(), stockTicksPartitionColumns(), stockTicksPartitions(), false), + STOCK_TICKS_MOR(stockTicksRegularColumns(), stockTicksPartitionColumns(), stockTicksPartitions(), false), + HUDI_STOCK_TICKS_COW(hudiStockTicksRegularColumns(), hudiStockTicksPartitionColumns(), hudiStockTicksPartitions(), false), + HUDI_STOCK_TICKS_MOR(hudiStockTicksRegularColumns(), hudiStockTicksPartitionColumns(), hudiStockTicksPartitions(), false), + HUDI_MULTI_FG_PT_V6_MOR(hudiMultiFgRegularColumns(), hudiMultiFgPartitionsColumn(), hudiMultiFgPartitions(), false), + HUDI_MULTI_FG_PT_V8_MOR(hudiMultiFgRegularColumns(), hudiMultiFgPartitionsColumn(), hudiMultiFgPartitions(), false), + HUDI_COMPREHENSIVE_TYPES_V6_MOR(hudiComprehensiveTypesColumns(), hudiComprehensiveTypesPartitionColumns(), hudiComprehensiveTypesPartitions(), true), + HUDI_COMPREHENSIVE_TYPES_V8_MOR(hudiComprehensiveTypesColumns(), hudiComprehensiveTypesPartitionColumns(), hudiComprehensiveTypesPartitions(), true), + HUDI_MULTI_PT_V8_MOR(hudiMultiPtMorColumns(), hudiMultiPtMorPartitionColumns(), hudiMultiPtMorPartitions(), false), + HUDI_TIMESTAMP_KEYGEN_PT_EPOCH_TO_YYYY_MM_DD_HH_V8_MOR(hudiTimestampKeygenColumns(), hudiTimestampKeygenPartitionColumns(), hudiTimestampKeygenPartitions("EPOCHMILLISECONDS"), true), + HUDI_TIMESTAMP_KEYGEN_PT_SCALAR_TO_YYYY_MM_DD_HH_V8_MOR(hudiTimestampKeygenColumns(), hudiTimestampKeygenPartitionColumns(), hudiTimestampKeygenPartitions("SCALAR"), true), + HUDI_CUSTOM_KEYGEN_PT_V8_MOR(hudiCustomKeyGenColumns(), hudiCustomKeyGenPartitionColumns(), hudiCustomKeyGenPartitions(), false), /**/; private static final List HUDI_META_COLUMNS = ImmutableList.of( @@ -179,20 +359,24 @@ public enum TestingTable private final List regularColumns; private final List partitionColumns; private final Map partitions; + private final boolean isCreateRtTable; + private HoodieTableVersion tableVersion; TestingTable( List regularColumns, List partitionColumns, - Map partitions) + Map partitions, + boolean isCreateRtTable) { this.regularColumns = regularColumns; this.partitionColumns = partitionColumns; this.partitions = partitions; + this.isCreateRtTable = isCreateRtTable; } TestingTable(List regularColumns) { - this(regularColumns, ImmutableList.of(), ImmutableMap.of()); + this(regularColumns, ImmutableList.of(), ImmutableMap.of(), false); } public String getTableName() @@ -200,6 +384,27 @@ public String getTableName() return name().toLowerCase(Locale.ROOT); } + public String getRtTableName() + { + return name().toLowerCase(Locale.ROOT) + "_rt"; + } + + public String getRoTableName() + { + // ro tables do not have suffix + return getTableName(); + } + + public void setTableVersion(HoodieTableVersion tableVersion) + { + this.tableVersion = tableVersion; + } + + public HoodieTableVersion getHoodieTableVersion() + { + return this.tableVersion; + } + public List getDataColumns() { return Stream.of(HUDI_META_COLUMNS, regularColumns) @@ -217,6 +422,11 @@ public Map getPartitions() return partitions; } + public boolean isCreateRtTable() + { + return isCreateRtTable; + } + private static List nonPartitionRegularColumns() { return ImmutableList.of( @@ -227,6 +437,21 @@ private static List nonPartitionRegularColumns() column("hh", HIVE_STRING)); } + private static List tripsRegularColumns() + { + return ImmutableList.of( + column("begin_lat", HIVE_DOUBLE), + column("begin_lon", HIVE_DOUBLE), + column("driver", HIVE_STRING), + column("end_lat", HIVE_DOUBLE), + column("end_lon", HIVE_DOUBLE), + column("fare", HIVE_DOUBLE), + column("partitionpath", HIVE_STRING), + column("rider", HIVE_STRING), + column("ts", HIVE_LONG), + column("uuid", HIVE_STRING)); + } + private static List stockTicksRegularColumns() { return ImmutableList.of( @@ -254,6 +479,32 @@ private static Map stockTicksPartitions() return ImmutableMap.of("dt=2018-08-31", "2018/08/31"); } + private static List hudiStockTicksRegularColumns() + { + return ImmutableList.of( + column("volume", HIVE_LONG), + column("ts", HIVE_STRING), + column("symbol", HIVE_STRING), + column("year", HIVE_INT), + column("month", HIVE_STRING), + column("high", HIVE_DOUBLE), + column("low", HIVE_DOUBLE), + column("key", HIVE_STRING), + column("close", HIVE_DOUBLE), + column("open", HIVE_DOUBLE), + column("day", HIVE_STRING)); + } + + private static List hudiStockTicksPartitionColumns() + { + return ImmutableList.of(column("date", HIVE_STRING)); + } + + private static Map hudiStockTicksPartitions() + { + return ImmutableMap.of("date=2018-08-31", "2018/08/31"); + } + private static List multiPartitionRegularColumns() { return ImmutableList.of( @@ -275,5 +526,228 @@ private static Map multiPartitions() "dt=2021-12-09/hh=10", "dt=2021-12-09/hh=10", "dt=2021-12-09/hh=11", "dt=2021-12-09/hh=11"); } + + private static List hudiMultiFgRegularColumns() + { + return ImmutableList.of( + column("id", HIVE_INT), + column("name", HIVE_STRING), + column("price", HIVE_DOUBLE), + column("ts", HIVE_LONG)); + } + + private static List hudiMultiFgPartitionsColumn() + { + return ImmutableList.of( + column("country", HIVE_STRING)); + } + + private static Map hudiMultiFgPartitions() + { + return ImmutableMap.of( + "country=SG", "country=SG", + "country=US", "country=US"); + } + + private static List hudiComprehensiveTypesColumns() + { + return ImmutableList.of( + // ----- Primary Key & Precombine ----- + column("uuid", HIVE_STRING), + column("precombine_field", HIVE_LONG), + + // ----- Numeric Types ----- + column("col_boolean", HIVE_BOOLEAN), + column("col_tinyint", HIVE_BYTE), + column("col_smallint", HIVE_SHORT), + column("col_int", HIVE_INT), + column("col_bigint", HIVE_LONG), + column("col_float", HIVE_FLOAT), + column("col_double", HIVE_DOUBLE), + column("col_decimal", decimalHiveType(10, 2)), + + // ----- String Types ----- + column("col_string", HIVE_STRING), + column("col_varchar", varcharHiveType(50)), + column("col_char", charHiveType(10)), + + // ----- Binary Type ----- + column("col_binary", HIVE_BINARY), + + // ----- Datetime Types ----- + column("col_date", HIVE_DATE), + column("col_timestamp", HIVE_TIMESTAMP), + + // ----- Complex Types ----- + // ARRAY + column("col_array_int", listHiveType(INT_TYPE_INFO)), + // ARRAY + column("col_array_string", listHiveType(STRING_TYPE_INFO)), + // MAP + column("col_map_string_int", mapHiveType(STRING_TYPE_INFO, INT_TYPE_INFO)), + // STRUCT + column("col_struct", structHiveType( + ImmutableList.of("f1", "f2", "f3"), + ImmutableList.of(STRING_TYPE_INFO, INT_TYPE_INFO, BOOLEAN_TYPE_INFO))), + // ARRAY>> + column("col_array_struct", listHiveType( + getStructTypeInfo( + ImmutableList.of("nested_f1", "nested_f2"), + ImmutableList.of(DOUBLE_TYPE_INFO, ARRAY_STRING_TYPE_INFO)))), + // MAP> + column("col_map_string_struct", mapHiveType( + STRING_TYPE_INFO, + getStructTypeInfo( + ImmutableList.of("nested_f3", "nested_f4"), + ImmutableList.of(DATE_TYPE_INFO, getDecimalTypeInfo(5, 2))))), + // ARRAY>> + column("col_array_struct_with_map", listHiveType( + getStructTypeInfo( + ImmutableList.of("f_arr_struct_str", "f_arr_struct_map"), + ImmutableList.of(STRING_TYPE_INFO, MAP_STRING_INT_TYPE_INFO)))), + // MAP, f_map_struct_ts: TIMESTAMP>> + column("col_map_struct_with_array", mapHiveType( + STRING_TYPE_INFO, + getStructTypeInfo( + ImmutableList.of("f_map_struct_arr", "f_map_struct_ts"), + ImmutableList.of(ARRAY_BOOLEAN_TYPE_INFO, TIMESTAMP_TYPE_INFO)))), + // STRUCT> + column("col_struct_nested_struct", structHiveType( + ImmutableList.of("outer_f1", "nested_struct"), + ImmutableList.of( + INT_TYPE_INFO, + getStructTypeInfo( + ImmutableList.of("inner_f1", "inner_f2"), + ImmutableList.of(STRING_TYPE_INFO, BOOLEAN_TYPE_INFO))))), + // ARRAY> + column("col_array_array_int", listHiveType(ARRAY_INT_TYPE_INFO)), + // MAP> + column("col_map_string_array_double", mapHiveType(STRING_TYPE_INFO, ARRAY_DOUBLE_TYPE_INFO)), + // MAP> + column("col_map_string_map_string_date", mapHiveType(STRING_TYPE_INFO, MAP_STRING_DATE_TYPE_INFO)), + // STRUCT>> + column("col_struct_array_struct", structHiveType( + ImmutableList.of("outer_f2", "struct_array"), + ImmutableList.of( + STRING_TYPE_INFO, + getListTypeInfo(getStructTypeInfo( + ImmutableList.of("inner_f3", "inner_f4"), + ImmutableList.of(TIMESTAMP_TYPE_INFO, STRING_TYPE_INFO)))))), + // STRUCT> + column("col_struct_map", structHiveType( + ImmutableList.of("outer_f3", "struct_map"), + ImmutableList.of(BOOLEAN_TYPE_INFO, MAP_STRING_LONG_TYPE_INFO)))); + } + + private static List hudiComprehensiveTypesPartitionColumns() + { + return ImmutableList.of(column("part_col", HIVE_STRING)); + } + + private static Map hudiComprehensiveTypesPartitions() + { + return ImmutableMap.of( + "part_col=A", "part_col=A", + "part_col=B", "part_col=B"); + } + + private static List hudiMultiPtMorColumns() + { + return ImmutableList.of( + column("id", HIVE_INT), + column("name", HIVE_STRING), + column("price", HIVE_DOUBLE), + column("ts", HIVE_LONG)); + } + + private static List hudiMultiPtMorPartitionColumns() + { + return ImmutableList.of( + column("part_str", HIVE_STRING), + column("part_int", HIVE_INT), + column("part_date", HIVE_DATE), + column("part_bigint", HIVE_LONG), + column("part_decimal", decimalHiveType(10, 2)), + column("part_timestamp", HIVE_TIMESTAMP), + column("part_bool", HIVE_BOOLEAN)); + } + + private static Map hudiMultiPtMorPartitions() + { + return ImmutableMap.of( + "part_str=apparel/part_int=2024/part_date=2024-01-05/part_bigint=20000000001/part_decimal=100.00/part_timestamp=2024-01-05 18%3A00%3A00/part_bool=false", "part_str=apparel/part_int=2024/part_date=2024-01-05/part_bigint=20000000001/part_decimal=100.00/part_timestamp=2024-01-05 18%3A00%3A00/part_bool=false", + "part_str=electronics/part_int=2023/part_date=2023-03-10/part_bigint=10000000002/part_decimal=50.00/part_timestamp=2023-03-10 12%3A30%3A00/part_bool=true", "part_str=electronics/part_int=2023/part_date=2023-03-10/part_bigint=10000000002/part_decimal=50.00/part_timestamp=2023-03-10 12%3A30%3A00/part_bool=true", + "part_str=electronics/part_int=2023/part_date=2023-03-10/part_bigint=10000000002/part_decimal=50.00/part_timestamp=2023-03-10 12%3A30%3A00/part_bool=false", "part_str=electronics/part_int=2023/part_date=2023-03-10/part_bigint=10000000002/part_decimal=50.00/part_timestamp=2023-03-10 12%3A30%3A00/part_bool=false", + "part_str=books/part_int=2023/part_date=2023-01-15/part_bigint=10000000001/part_decimal=123.00/part_timestamp=2023-01-15 10%3A00%3A00/part_bool=true", "part_str=books/part_int=2023/part_date=2023-01-15/part_bigint=10000000001/part_decimal=123.00/part_timestamp=2023-01-15 10%3A00%3A00/part_bool=true", + "part_str=books/part_int=2024/part_date=2024-02-20/part_bigint=10000000003/part_decimal=75.00/part_timestamp=2024-02-20 08%3A45%3A10/part_bool=true", "part_str=books/part_int=2024/part_date=2024-02-20/part_bigint=10000000003/part_decimal=75.00/part_timestamp=2024-02-20 08%3A45%3A10/part_bool=true"); + } + + private static List hudiTimestampKeygenColumns() + { + return ImmutableList.of( + column("id", HIVE_INT), + column("name", HIVE_STRING), + column("price", HIVE_DOUBLE), + column("ts", HIVE_LONG)); + } + + private static List hudiTimestampKeygenPartitionColumns() + { + // Data stored in files are long, but partition value that is synced to metastore is String + return ImmutableList.of(column("partition_field", HIVE_STRING)); + } + + private static Map hudiTimestampKeygenPartitions(String timestampType) + { + return switch (timestampType) { + case "EPOCHMILLISECONDS" -> ImmutableMap.of( + "partition_field=2025-05-13 02", "2025-05-13 02", + "partition_field=2025-06-05 05", "2025-06-05 05", + "partition_field=2025-06-06 09", "2025-06-06 09", + "partition_field=2025-06-06 10", "2025-06-06 10", + "partition_field=2025-06-07 08", "2025-06-07 08"); + case "SCALAR" -> ImmutableMap.of( + "partition_field=2024-10-08 12", "2024-10-08 12", + "partition_field=2024-10-07 12", "2024-10-07 12", + "partition_field=2024-10-06 12", "2024-10-06 12", + "partition_field=2024-10-05 12", "2024-10-05 12", + "partition_field=2024-10-04 12", "2024-10-04 12"); + default -> ImmutableMap.of(); + }; + } + + private static List hudiCustomKeyGenColumns() + { + return hudiMultiFgRegularColumns(); + } + + private static List hudiCustomKeyGenPartitionColumns() + { + return ImmutableList.of( + column("partition_field_country", HIVE_STRING), + column("partition_field_date", HIVE_STRING)); + } + + private static Map hudiCustomKeyGenPartitions() + { + return ImmutableMap.of( + "partition_field_country=US/partition_field_date=2025-06-06", "partition_field_country=US/partition_field_date=2025-06-06", + "partition_field_country=CN/partition_field_date=2025-06-05", "partition_field_country=CN/partition_field_date=2025-06-05", + "partition_field_country=MY/partition_field_date=2025-05-13", "partition_field_country=MY/partition_field_date=2025-05-13", + "partition_field_country=SG/partition_field_date=2025-06-06", "partition_field_country=SG/partition_field_date=2025-06-06", + "partition_field_country=SG/partition_field_date=2025-06-07", "partition_field_country=SG/partition_field_date=2025-06-07"); + } + } + + static class HashAndSizeResult + { + final byte[] hash; + final long size; + + HashAndSizeResult(byte[] hash, long size) + { + this.hash = hash; + this.size = size; + } } } diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TpchHudiTablesInitializer.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TpchHudiTablesInitializer.java index 4bcfc8019d0a5..10d1b9873ad35 100644 --- a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TpchHudiTablesInitializer.java +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TpchHudiTablesInitializer.java @@ -42,6 +42,7 @@ import org.apache.avro.Schema; import org.apache.avro.generic.GenericData; import org.apache.avro.generic.GenericRecord; +import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hudi.client.HoodieJavaWriteClient; import org.apache.hudi.client.common.HoodieJavaEngineContext; @@ -52,22 +53,23 @@ import org.apache.hudi.common.model.HoodieKey; import org.apache.hudi.common.model.HoodieRecord; import org.apache.hudi.common.table.HoodieTableMetaClient; -import org.apache.hudi.common.table.HoodieTableVersion; import org.apache.hudi.common.table.marker.MarkerType; +import org.apache.hudi.common.table.timeline.HoodieInstantTimeGenerator; import org.apache.hudi.common.util.Option; import org.apache.hudi.config.HoodieArchivalConfig; import org.apache.hudi.config.HoodieIndexConfig; import org.apache.hudi.config.HoodieWriteConfig; import org.apache.hudi.index.HoodieIndex; -import org.apache.hudi.storage.StorageConfiguration; import org.apache.hudi.storage.hadoop.HadoopStorageConfiguration; import org.intellij.lang.annotations.Language; import java.io.IOException; +import java.time.Instant; import java.time.LocalDate; import java.time.temporal.ChronoField; import java.util.ArrayList; import java.util.Collection; +import java.util.Date; import java.util.List; import java.util.Map; import java.util.Optional; @@ -166,7 +168,8 @@ public void load(TpchTable tpchTables, QueryRunner queryRunner, java.nio.file .map(MaterializedRow::getFields) .map(recordConverter::toRecord) .collect(Collectors.toList()); - String timestamp = writeClient.startCommit(); + String timestamp = HoodieInstantTimeGenerator.formatDate(Date.from(Instant.now())); + writeClient.startCommitWithTime(timestamp); writeClient.insert(records, timestamp); } } @@ -211,17 +214,17 @@ private static Table createTableDefinition(String schemaName, TpchTable table private static HoodieJavaWriteClient createWriteClient(TpchTable table, HdfsEnvironment hdfsEnvironment, Path tablePath) { Schema schema = createAvroSchema(table); - StorageConfiguration conf = new HadoopStorageConfiguration(hdfsEnvironment.getConfiguration(CONTEXT, tablePath)); + Configuration conf = hdfsEnvironment.getConfiguration(CONTEXT, tablePath); try { HoodieTableMetaClient.newTableBuilder() .setTableType(COPY_ON_WRITE) .setTableName(table.getTableName()) - .setTableVersion(HoodieTableVersion.SIX) + .setTimelineLayoutVersion(1) .setBootstrapIndexClass(NoOpBootstrapIndex.class.getName()) .setPayloadClassName(HoodieAvroPayload.class.getName()) .setRecordKeyFields(FIELD_UUID) - .initTable(conf, tablePath.toString()); + .initTable(new HadoopStorageConfiguration(conf), tablePath.toString()); } catch (IOException e) { throw new RuntimeException("Could not init table " + table.getTableName(), e); @@ -241,9 +244,10 @@ private static HoodieJavaWriteClient createWriteClient(TpchTa .withMarkersType(MarkerType.DIRECT.name()) // Disabling Hudi metadata table (MDT) in tests as the support of // reading MDT is broken after removal of Hudi dependencies from compile time + // IMPORTANT: Writing to MDT requires hbase dependencies, which is not available in Trino runtime .withMetadataConfig(HoodieMetadataConfig.newBuilder().enable(false).build()) .build(); - return new HoodieJavaWriteClient<>(new HoodieJavaEngineContext(conf), cfg); + return new HoodieJavaWriteClient<>(new HoodieJavaEngineContext(new HadoopStorageConfiguration(conf)), cfg); } private static RecordConverter createRecordConverter(TpchTable table) diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TypeInfoHelper.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TypeInfoHelper.java new file mode 100644 index 0000000000000..9e21009fe6ba3 --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/testing/TypeInfoHelper.java @@ -0,0 +1,129 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.testing; + +import io.trino.metastore.HiveType; +import io.trino.metastore.type.TypeInfo; + +import java.util.ArrayList; +import java.util.List; + +import static io.trino.metastore.type.TypeConstants.BIGINT_TYPE_NAME; +import static io.trino.metastore.type.TypeConstants.BOOLEAN_TYPE_NAME; +import static io.trino.metastore.type.TypeConstants.DATE_TYPE_NAME; +import static io.trino.metastore.type.TypeConstants.DOUBLE_TYPE_NAME; +import static io.trino.metastore.type.TypeConstants.INT_TYPE_NAME; +import static io.trino.metastore.type.TypeConstants.STRING_TYPE_NAME; +import static io.trino.metastore.type.TypeConstants.TIMESTAMP_TYPE_NAME; +import static io.trino.metastore.type.TypeInfoFactory.getCharTypeInfo; +import static io.trino.metastore.type.TypeInfoFactory.getDecimalTypeInfo; +import static io.trino.metastore.type.TypeInfoFactory.getListTypeInfo; +import static io.trino.metastore.type.TypeInfoFactory.getMapTypeInfo; +import static io.trino.metastore.type.TypeInfoFactory.getPrimitiveTypeInfo; +import static io.trino.metastore.type.TypeInfoFactory.getStructTypeInfo; +import static io.trino.metastore.type.TypeInfoFactory.getVarcharTypeInfo; + +public class TypeInfoHelper +{ + public static final TypeInfo BOOLEAN_TYPE_INFO = getPrimitiveTypeInfo(BOOLEAN_TYPE_NAME); + public static final TypeInfo INT_TYPE_INFO = getPrimitiveTypeInfo(INT_TYPE_NAME); + public static final TypeInfo LONG_TYPE_INFO = getPrimitiveTypeInfo(BIGINT_TYPE_NAME); + public static final TypeInfo DOUBLE_TYPE_INFO = getPrimitiveTypeInfo(DOUBLE_TYPE_NAME); + public static final TypeInfo STRING_TYPE_INFO = getPrimitiveTypeInfo(STRING_TYPE_NAME); + public static final TypeInfo TIMESTAMP_TYPE_INFO = getPrimitiveTypeInfo(TIMESTAMP_TYPE_NAME); + public static final TypeInfo DATE_TYPE_INFO = getPrimitiveTypeInfo(DATE_TYPE_NAME); + + public static final TypeInfo ARRAY_STRING_TYPE_INFO = getListTypeInfo(STRING_TYPE_INFO); + public static final TypeInfo ARRAY_INT_TYPE_INFO = getListTypeInfo(INT_TYPE_INFO); + public static final TypeInfo ARRAY_BOOLEAN_TYPE_INFO = getListTypeInfo(BOOLEAN_TYPE_INFO); + public static final TypeInfo ARRAY_DOUBLE_TYPE_INFO = getListTypeInfo(DOUBLE_TYPE_INFO); + + public static final TypeInfo MAP_STRING_INT_TYPE_INFO = getMapTypeInfo(STRING_TYPE_INFO, INT_TYPE_INFO); + public static final TypeInfo MAP_STRING_LONG_TYPE_INFO = getMapTypeInfo(STRING_TYPE_INFO, LONG_TYPE_INFO); + public static final TypeInfo MAP_STRING_DATE_TYPE_INFO = getMapTypeInfo(STRING_TYPE_INFO, DATE_TYPE_INFO); + + private TypeInfoHelper() + { + } + + /** + * Creates a HiveType for a list type. + * + * @param elementTypeInfo The TypeInfo of the list elements. + * @return A HiveType instance for the list. + */ + public static HiveType listHiveType(TypeInfo elementTypeInfo) + { + return HiveType.fromTypeInfo(getListTypeInfo(elementTypeInfo)); + } + + /** + * Creates a HiveType for a map type. + * + * @param keyTypeInfo The TypeInfo of the map keys. + * @param valueTypeInfo The TypeInfo of the map values. + * @return A HiveType instance for the map. + */ + public static HiveType mapHiveType(TypeInfo keyTypeInfo, TypeInfo valueTypeInfo) + { + return HiveType.fromTypeInfo(getMapTypeInfo(keyTypeInfo, valueTypeInfo)); + } + + /** + * Creates a HiveType for a struct type. + * + * @param fieldNames List of field names. + * @param fieldTypeInfos List of corresponding field TypeInfos. + * @return A HiveType instance for the struct. + */ + public static HiveType structHiveType(List fieldNames, List fieldTypeInfos) + { + // ArrayList to preserve ordering + return HiveType.fromTypeInfo(getStructTypeInfo(new ArrayList<>(fieldNames), new ArrayList<>(fieldTypeInfos))); + } + + /** + * Creates a HiveType for a decimal type. + * + * @param precision The precision. + * @param scale The scale. + * @return A HiveType instance for the decimal. + */ + public static HiveType decimalHiveType(int precision, int scale) + { + return HiveType.fromTypeInfo(getDecimalTypeInfo(precision, scale)); + } + + /** + * Creates a HiveType for a varchar type. + * + * @param length The maximum length. + * @return A HiveType instance for the varchar. + */ + public static HiveType varcharHiveType(int length) + { + return HiveType.fromTypeInfo(getVarcharTypeInfo(length)); + } + + /** + * Creates a HiveType for a char type. + * + * @param length The fixed length. + * @return A HiveType instance for the char. + */ + public static HiveType charHiveType(int length) + { + return HiveType.fromTypeInfo(getCharTypeInfo(length)); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/util/TestTupleDomainUtilsExtendedNullFilterTest.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/util/TestTupleDomainUtilsExtendedNullFilterTest.java new file mode 100644 index 0000000000000..c20e7f075f3ca --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/util/TestTupleDomainUtilsExtendedNullFilterTest.java @@ -0,0 +1,194 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.util; + +import io.airlift.slice.Slices; +import io.trino.spi.predicate.Domain; +import io.trino.spi.predicate.Range; +import io.trino.spi.predicate.TupleDomain; +import io.trino.spi.predicate.ValueSet; +import org.junit.jupiter.api.Test; + +import java.util.Map; + +import static io.trino.spi.type.VarcharType.VARCHAR; +import static org.assertj.core.api.Assertions.assertThat; + +class TestTupleDomainUtilsExtendedNullFilterTest +{ + @Test + void testHasSimpleNullCheck_withOnlyNullConstraint() + { + // Create a Domain that represents exactly "IS NULL" for a column. + // Domain.onlyNull(Type) creates a domain where null is allowed and the value set is 'none'. + Domain isNullDomain = Domain.onlyNull(VARCHAR); + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of("col_a", isNullDomain)); + + boolean result = TupleDomainUtils.hasSimpleNullCheck(tupleDomain); + + assertThat(result) + .as("Check failed: TupleDomain with only an 'IS NULL' constraint should return true.") + .isTrue(); + } + + @Test + void testHasSimpleNullCheck_withOnlyNotNullConstraint() + { + // Create a Domain that represents exactly "IS NOT NULL" for a column. + // Domain.notNull(Type) creates a domain where null is *NOT* allowed and the value set is 'all'. + Domain isNotNullDomain = Domain.notNull(VARCHAR); + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of("col_a", isNotNullDomain)); + + boolean result = TupleDomainUtils.hasSimpleNullCheck(tupleDomain); + + assertThat(result) + .as("Check failed: TupleDomain with only an 'IS NOT NULL' constraint should return true.") + .isTrue(); + } + + @Test + void testHasSimpleNullCheck_withMixedConstraintsIncludingNull() + { + // Create a TupleDomain with multiple columns, where one column has an "IS NULL" constraint and others have different constraints. + Domain isNullDomain = Domain.onlyNull(VARCHAR); + // Example of another constraint: col_b > 'abc', null allowed + Domain rangeDomain = Domain.create( + ValueSet.ofRanges(Range.greaterThan(VARCHAR, Slices.utf8Slice("abc"))), + true); + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "col_a", isNullDomain, + "col_b", rangeDomain)); + + boolean result = TupleDomainUtils.hasSimpleNullCheck(tupleDomain); + + assertThat(result) + .as("Check failed: TupleDomain with mixed constraints including 'IS NULL' should return true.") + .isTrue(); + } + + @Test + void testHasSimpleNullCheck_withMixedConstraintsIncludingNotNull() + { + // Create a TupleDomain with multiple columns, where one column has an "IS NOT NULL" constraint. + Domain isNotNullDomain = Domain.notNull(VARCHAR); + // Add another constraint: col_b < 'xyz', null not allowed + Domain rangeDomain = Domain.create( + ValueSet.ofRanges(Range.lessThan(VARCHAR, Slices.utf8Slice("xyz"))), + false); + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "col_a", isNotNullDomain, + "col_b", rangeDomain)); + + boolean result = TupleDomainUtils.hasSimpleNullCheck(tupleDomain); + + assertThat(result) + .as("Check failed: TupleDomain with mixed constraints including 'IS NOT NULL' should return true.") + .isTrue(); + } + + @Test + void testHasSimpleNullCheck_withNonNullAndNotNullConstraint() + { + // Create a domain that allows specific non-null values AND disallows null. + // This is *NOT* exclusively an "IS NOT NULL" constraint because ValueSet is not 'all'. + Domain specificValuesNotNullDomain = Domain.create( + // Only allows 'value1' + ValueSet.of(VARCHAR, Slices.utf8Slice("value1")), + false); + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "col_a", specificValuesNotNullDomain)); + + boolean result = TupleDomainUtils.hasSimpleNullCheck(tupleDomain); + + assertThat(result).isFalse(); + } + + @Test + void testHasSimpleNullCheck_withNonNullAndNullConstraint() + { + // Create a domain that allows specific non-null values AND allows null. + // This is *NOT* exclusively an "IS NULL" constraint because ValueSet is not 'none'. + Domain specificValuesNullDomain = Domain.create( + // Only allows 'value1' + ValueSet.of(VARCHAR, Slices.utf8Slice("value1")), + true); + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "col_a", specificValuesNullDomain)); + + boolean result = TupleDomainUtils.hasSimpleNullCheck(tupleDomain); + + assertThat(result).isFalse(); + } + + @Test + void testHasSimpleNullCheck_withNoSimpleNullChecks() + { + // Create a TupleDomain where columns have constraints, but none are *only* IS NULL or IS NOT NULL. + // col_a > 'abc', null allowed + Domain rangeDomain1 = Domain.create( + ValueSet.ofRanges(Range.greaterThan(VARCHAR, Slices.utf8Slice("abc"))), + true); + // col_b < 'xyz', null not allowed + Domain rangeDomain2 = Domain.create( + ValueSet.ofRanges(Range.lessThan(VARCHAR, Slices.utf8Slice("xyz"))), + false); + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "col_a", rangeDomain1, + "col_b", rangeDomain2)); + + boolean result = TupleDomainUtils.hasSimpleNullCheck(tupleDomain); + + assertThat(result).isFalse(); + } + + @Test + void testHasSimpleNullCheck_withAllTupleDomain() + { + // Create an 'All' TupleDomain, which represents no constraints. + TupleDomain tupleDomain = TupleDomain.all(); + + boolean result = TupleDomainUtils.hasSimpleNullCheck(tupleDomain); + + assertThat(result) + .as("Check failed: TupleDomain.all() should return false as it has no constraints.") + .isFalse(); + } + + @Test + void testHasSimpleNullCheck_withNoneTupleDomain() + { + // Create a 'None' TupleDomain, which represents a contradiction (always false). + TupleDomain tupleDomain = TupleDomain.none(); + + boolean result = TupleDomainUtils.hasSimpleNullCheck(tupleDomain); + + assertThat(result) + .as("Check failed: TupleDomain.none() should return false.") + .isFalse(); + } + + @Test + void testHasSimpleNullCheck_withEmptyTupleDomain() + { + // Create a TupleDomain using an empty map of column domains. + // This usually results in an 'All' TupleDomain. + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of()); + + boolean result = TupleDomainUtils.hasSimpleNullCheck(tupleDomain); + + assertThat(result) + .as("Check failed: TupleDomain created with an empty map (effectively All) should return false.") + .isFalse(); + } +} diff --git a/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/util/TestTupleDomainUtilsTest.java b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/util/TestTupleDomainUtilsTest.java new file mode 100644 index 0000000000000..64becba2ce60b --- /dev/null +++ b/hudi-trino-plugin/src/test/java/io/trino/plugin/hudi/util/TestTupleDomainUtilsTest.java @@ -0,0 +1,269 @@ +/* + * Licensed 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. + */ +package io.trino.plugin.hudi.util; + +import io.airlift.slice.Slices; +import io.trino.spi.predicate.Domain; +import io.trino.spi.predicate.Range; +import io.trino.spi.predicate.TupleDomain; +import io.trino.spi.predicate.ValueSet; +import org.junit.jupiter.api.Test; + +import java.util.List; +import java.util.Map; + +import static io.trino.spi.type.BigintType.BIGINT; +import static io.trino.spi.type.VarcharType.VARCHAR; +import static org.assertj.core.api.Assertions.assertThat; + +class TestTupleDomainUtilsTest +{ + @Test + void testGetReferencedColumnsEmpty() + { + // Test with an empty TupleDomain + TupleDomain emptyTupleDomain = TupleDomain.none(); + assertThat(TupleDomainUtils.getReferencedColumns(emptyTupleDomain)).isEmpty(); + + // Test with a TupleDomain that effectively has no column domains + TupleDomain effectivelyEmptyTupleDomain = TupleDomain.all(); + assertThat(TupleDomainUtils.getReferencedColumns(effectivelyEmptyTupleDomain)).isEmpty(); + } + + @Test + void testGetReferencedColumnsNonEmpty() + { + // Test with a TupleDomain containing domains for specific columns + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "col_a", Domain.singleValue(BIGINT, 1L), + "col_b", Domain.onlyNull(VARCHAR))); + assertThat(TupleDomainUtils.getReferencedColumns(tupleDomain)) + .containsExactlyInAnyOrder("col_a", "col_b"); + } + + @Test + void testAreAllFieldsReferencedAllMatch() + { + // Test when all source fields are present in the TupleDomain + // 'all' counts as referenced and when passed into the builder, it will be ignored + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "id", Domain.singleValue(BIGINT, 100L), + "name", Domain.singleValue(VARCHAR, Slices.utf8Slice("test")), + "value", Domain.all(BIGINT))); + List sourceFields = List.of("id", "name"); + assertThat(TupleDomainUtils.areAllFieldsReferenced(tupleDomain, sourceFields)).isTrue(); + + // The constructed TupleDomain will hence not have any constraint on the domain with 'all' + List sourceFieldsIncludingAll = List.of("id", "name", "value"); + assertThat(TupleDomainUtils.areAllFieldsReferenced(tupleDomain, sourceFieldsIncludingAll)).isFalse(); + } + + @Test + void testAreAllFieldsReferencedSomeMatch() + { + // Test when only some source fields are present + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "id", Domain.singleValue(BIGINT, 100L), + "value", Domain.all(BIGINT))); + // "name" is missing + List sourceFields = List.of("id", "name"); + assertThat(TupleDomainUtils.areAllFieldsReferenced(tupleDomain, sourceFields)).isFalse(); + } + + @Test + void testAreAllFieldsReferencedNoneMatch() + { + // Test when none of the source fields are present + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "id", Domain.singleValue(BIGINT, 100L), + "value", Domain.all(BIGINT))); + // All provided sourceFields are absent + List sourceFields = List.of("field_x", "field_y"); + assertThat(TupleDomainUtils.areAllFieldsReferenced(tupleDomain, sourceFields)).isFalse(); + } + + @Test + void testAreAllFieldsReferencedEmptySourceFields() + { + // Test with an empty list of source fields (should technically be true) + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "id", Domain.singleValue(BIGINT, 100L))); + List sourceFields = List.of(); + // An empty set is a subset of any set + assertThat(TupleDomainUtils.areAllFieldsReferenced(tupleDomain, sourceFields)).isTrue(); + } + + @Test + void testAreAllFieldsReferencedEmptyTupleDomain() + { + // Test with an empty TupleDomain + TupleDomain emptyTupleDomain = TupleDomain.none(); + List sourceFields = List.of("id", "name"); + assertThat(TupleDomainUtils.areAllFieldsReferenced(emptyTupleDomain, sourceFields)).isFalse(); + + // Test with an empty source list and empty tuple domain + List emptySourceFields = List.of(); + assertThat(TupleDomainUtils.areAllFieldsReferenced(emptyTupleDomain, emptySourceFields)).isTrue(); + } + + @Test + void testAreSomeFieldsReferencedSomeMatch() + { + // Test when at least one source field is present + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "id", Domain.singleValue(BIGINT, 100L), + "value", Domain.all(BIGINT))); + // Only "id" is present + List sourceFields = List.of("id", "name"); + assertThat(TupleDomainUtils.areSomeFieldsReferenced(tupleDomain, sourceFields)).isTrue(); + } + + @Test + void testAreSomeFieldsReferencedAllMatch() + { + // Test when all source fields are present + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "id", Domain.singleValue(BIGINT, 100L), + "name", Domain.singleValue(VARCHAR, Slices.utf8Slice("test")))); + List sourceFields = List.of("id", "name"); + assertThat(TupleDomainUtils.areSomeFieldsReferenced(tupleDomain, sourceFields)).isTrue(); + } + + @Test + void testAreSomeFieldsReferencedNoneMatch() + { + // Test when none of the source fields are present + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "id", Domain.singleValue(BIGINT, 100L))); + List sourceFields = List.of("name", "value"); // None are present + assertThat(TupleDomainUtils.areSomeFieldsReferenced(tupleDomain, sourceFields)).isFalse(); + } + + @Test + void testAreSomeFieldsReferencedEmptySourceFields() + { + // Test with an empty list of source fields + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "id", Domain.singleValue(BIGINT, 100L))); + List sourceFields = List.of(); + assertThat(TupleDomainUtils.areSomeFieldsReferenced(tupleDomain, sourceFields)).isFalse(); + } + + @Test + void testAreSomeFieldsReferencedEmptyTupleDomain() + { + // Test with an empty TupleDomain + TupleDomain emptyTupleDomain = TupleDomain.none(); + List sourceFields = List.of("id", "name"); + assertThat(TupleDomainUtils.areSomeFieldsReferenced(emptyTupleDomain, sourceFields)).isFalse(); + } + + @Test + void testAreDomainsInOrEqualOnlyAllMatch() + { + // Test when all referenced source fields have IN or EQUALS domains + // "other_col" is an irrelevant column + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "key1", Domain.singleValue(BIGINT, 1L), // EQUALS + "key2", Domain.multipleValues(VARCHAR, List.of("a", "b")), // IN + "other_col", Domain.create(ValueSet.ofRanges(Range.greaterThan(BIGINT, 10L)), false))); + List sourceFields = List.of("key1", "key2"); + assertThat(TupleDomainUtils.areDomainsInOrEqualOnly(tupleDomain, sourceFields)).isTrue(); + } + + @Test + void testAreDomainsInOrEqualOnlySomeMatch() + { + // Test when one source field has a non-IN/EQUALS domain (e.g. RANGE) + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "key1", Domain.singleValue(BIGINT, 1L), // EQUALS + "key2", Domain.create(ValueSet.ofRanges(Range.greaterThan(BIGINT, 10L)), false))); + List sourceFields = List.of("key1", "key2"); + assertThat(TupleDomainUtils.areDomainsInOrEqualOnly(tupleDomain, sourceFields)).isFalse(); + } + + @Test + void testAreDomainsInOrEqualOnlySomeMatchWithAll() + { + // Test when one source field has Domain.all() + // After creation, `key2` wil not be in the TupleDomain + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "key1", Domain.singleValue(BIGINT, 1L), // EQUALS + // ALL type (neither single value nor discrete set) + "key2", Domain.all(VARCHAR))); + List sourceFields = List.of("key1", "key2"); + assertThat(TupleDomainUtils.areDomainsInOrEqualOnly(tupleDomain, sourceFields)).isFalse(); + } + + @Test + void testAreDomainsInOrEqualOnlySomeMatchWithNull() + { + // Test when one source field has Domain.onlyNull() + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "key1", Domain.singleValue(BIGINT, 1L), // EQUALS + // onlyNull (neither single value nor discrete set) + "key2", Domain.onlyNull(VARCHAR))); + List sourceFields = List.of("key1", "key2"); + assertThat(TupleDomainUtils.areDomainsInOrEqualOnly(tupleDomain, sourceFields)).isFalse(); + } + + @Test + void testAreDomainsInOrEqualOnlySourceFieldMissing() + { + // Test when one of the source fields is not present in the TupleDomain + // key2 is missing + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "key1", Domain.singleValue(BIGINT, 1L))); + List sourceFields = List.of("key1", "key2"); + assertThat(TupleDomainUtils.areDomainsInOrEqualOnly(tupleDomain, sourceFields)).isFalse(); + } + + @Test + void testAreDomainsInOrEqualOnlyEmptySourceFields() + { + // Test with an empty list of source fields + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "key1", Domain.singleValue(BIGINT, 1L))); + List sourceFields = List.of(); + assertThat(TupleDomainUtils.areDomainsInOrEqualOnly(tupleDomain, sourceFields)).isFalse(); // As per implementation check + } + + @Test + void testAreDomainsInOrEqualOnlyNullSourceFields() + { + // Test with null source fields list + TupleDomain tupleDomain = TupleDomain.withColumnDomains(Map.of( + "key1", Domain.singleValue(BIGINT, 1L))); + List sourceFields = null; + assertThat(TupleDomainUtils.areDomainsInOrEqualOnly(tupleDomain, sourceFields)).isFalse(); // As per implementation check + } + + @Test + void testAreDomainsInOrEqualOnlyTupleDomainAll() + { + // Test with TupleDomain.all() + TupleDomain tupleDomain = TupleDomain.all(); + List sourceFields = List.of("key1", "key2"); + assertThat(TupleDomainUtils.areDomainsInOrEqualOnly(tupleDomain, sourceFields)).isFalse(); // As per implementation check + } + + @Test + void testAreDomainsInOrEqualOnlyTupleDomainNone() + { + // Test with TupleDomain.none() + TupleDomain tupleDomain = TupleDomain.none(); + List sourceFields = List.of("key1", "key2"); + assertThat(TupleDomainUtils.areDomainsInOrEqualOnly(tupleDomain, sourceFields)).isFalse(); + } +} diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_comprehensive_types_v6_mor.md b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_comprehensive_types_v6_mor.md new file mode 100644 index 0000000000000..9883fe6db2a77 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_comprehensive_types_v6_mor.md @@ -0,0 +1,164 @@ +## Create script + +Structure of table: +- MOR table with MDT enabled +- Revision: tag release-0.15.0 + +```scala +test("Create MOR table with comprehensive types") { + withTempDir { tmp => + val tableName = "hudi_type_test_mor" + spark.sql( + s""" + |CREATE TABLE $tableName ( + | uuid STRING, + | precombine_field LONG, + | + | -- Numeric Types + | col_boolean BOOLEAN, + | col_tinyint TINYINT, + | col_smallint SMALLINT, + | col_int INT, + | col_bigint BIGINT, + | col_float FLOAT, + | col_double DOUBLE, + | col_decimal DECIMAL(10, 2), + | + | -- String Types + | col_string STRING, + | col_varchar VARCHAR(50), + | col_char CHAR(10), + | + | -- Binary Type + | col_binary BINARY, + | + | -- Datetime Types + | col_date DATE, + | col_timestamp TIMESTAMP, + | -- col_timestamp_ntz TIMESTAMP_NTZ, (No support on Hudi for now) + | + | -- Complex types + | col_array_int ARRAY, + | col_array_string ARRAY, + | col_map_string_int MAP, + | col_struct STRUCT, + | col_array_struct ARRAY>>, + | col_map_string_struct MAP>, + | col_array_struct_with_map ARRAY>>, + | col_map_struct_with_array MAP, f_map_struct_ts: TIMESTAMP>>, + | col_struct_nested_struct STRUCT>, + | col_array_array_int ARRAY>, + | col_map_string_array_double MAP>, + | col_map_string_map_string_date MAP>, + | + | -- Array of structs with single (inner) fields do not work with parquet.version 1.13.1 + | col_struct_array_struct STRUCT>>, + | col_struct_map STRUCT>, + | + | part_col STRING + |) USING hudi + | LOCATION '${tmp.getCanonicalPath}' + | TBLPROPERTIES ( + | primaryKey = 'uuid', + | type = 'mor', + | preCombineField = 'precombine_field' + | ) + | PARTITIONED BY (part_col) + """.stripMargin) + + // To not trigger compaction scheduling, and compaction + spark.sql(s"set hoodie.compact.inline.max.delta.commits=9999") + spark.sql(s"set hoodie.compact.inline=false") + + // Directly write to new parquet file + spark.sql(s"set hoodie.parquet.small.file.limit=0") + spark.sql(s"set hoodie.metadata.compact.max.delta.commits=1") + // Partition stats index is enabled together with column stats index + spark.sql(s"set hoodie.metadata.index.column.stats.enable=true") + spark.sql(s"set hoodie.metadata.record.index.enable=true") + + // Insert row 1 into partition 'A' + spark.sql( + s""" + | INSERT INTO $tableName VALUES ( + | 'uuid1', 1000L, + | true, cast(1 as tinyint), cast(100 as smallint), 1000, 100000L, 1.1, 10.123, cast(123.45 as decimal(10,2)), + | 'string val 1', cast('varchar val 1' as varchar(50)), cast('charval1' as char(10)), + | cast('binary1' as binary), + | cast('2025-01-15' as date), cast('2025-01-15 11:30:00' as timestamp), + | -- cast('2025-01-15 11:30:00' as timestamp_ntz), + | array(1, 2, 3), array('a', 'b', 'c'), map('key1', 10, 'key2', 20), + | struct('struct_str1', 55, false), + | array(struct(1.1, array('n1','n2')), struct(2.2, array('n3'))), + | map('mapkey1', struct(cast('2024-11-01' as date), cast(9.8 as decimal(5,2)))), + | array(struct('arr_struct1', map('map_in_struct_k1', 1)), struct('arr_struct2', map('map_in_struct_k2', 2, 'map_in_struct_k3', 3))), + | map('map_struct1', struct(array(true, false), cast('2025-01-01 01:01:01' as timestamp)), 'map_struct2', struct(array(false), cast('2025-02-02 02:02:02' as timestamp))), + | struct(101, struct('inner_str_1', true)), + | array(array(1, 2), array(3, 4, 5)), + | map('arr_key1', array(1.1, 2.2), 'arr_key2', array(3.3)), + | map('map_key1', map('mapkey10', cast('2024-01-01' as date), 'mapkey20', cast('2024-02-02' as date))), + | struct('outer_str_1', array(struct(cast('2023-11-11 11:11:11' as timestamp), 'inner_str_1'))), + | struct(true, map('struct_map_k1', 1000L, 'struct_map_k2', 2000L)), + | 'A' + | ) + """.stripMargin) + + // Insert row 2 into partition 'A' + spark.sql( + s""" + | INSERT INTO $tableName VALUES ( + | 'uuid2', 1005L, + | false, cast(2 as tinyint), cast(200 as smallint), 2000, 200000L, 2.2, 20.456, cast(234.56 as decimal(10,2)), + | 'string val 2', cast('varchar val 2' as varchar(50)), cast('charval2' as char(10)), + | cast('binary2' as binary), + | cast('2025-02-20' as date), cast('2025-02-20 12:45:00' as timestamp), + | -- cast('2025-02-20 12:45:00' as timestamp_ntz), + | array(4, 5), array('d', 'e', 'f'), map('key3', 30), + | struct('struct_str2', 66, true), + | null, + | map('mapkey2', struct(cast('2024-12-10' as date), cast(7.6 as decimal(5,2)))), + | array(struct('arr_struct3', map('map_in_struct_k4', 4)), struct('arr_struct4', null)), + | map('map_struct3', struct(null, cast('2025-03-03 03:03:03' as timestamp)), 'map_struct4', struct(array(true), null)), + | -- Additional Nested Complex Types (with nulls) + | struct(102, null), + | array(array(6), array(7, 8)), + | map('arr_key3', null), + | map('map_key2', map(30, null), 'map_key3', null), + | struct('outer_str_2', array(struct(cast('2023-12-12 12:12:12' as timestamp), 'inner_str_2'))), + | struct(false, null), + | 'A' + | ) + """.stripMargin) + + // Insert row 3 into partition 'B' + spark.sql( + s""" + | INSERT INTO $tableName VALUES ( + | 'uuid3', 1100L, + | null, null, null, null, null, null, null, null, + | null, null, null, + | null, + | null, null, + | null, null, null, + | null, + | array(struct(3.3, array('n4'))), + | null, + | null, + | null, + | null, + | null, + | null, + | null, + | null, + | null, + | 'B' + | ) + """.stripMargin) + + // Generate log files through updates on partition 'A' + spark.sql(s"UPDATE $tableName SET col_double = col_double + 100, precombine_field = precombine_field + 1 WHERE part_col = 'A'") + // Generate log files through updates on partition 'B' + spark.sql(s"UPDATE $tableName SET col_string = 'updated string', precombine_field = precombine_field + 1 WHERE part_col = 'B'") + } +} +``` diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_comprehensive_types_v6_mor.zip b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_comprehensive_types_v6_mor.zip new file mode 100644 index 0000000000000000000000000000000000000000..db7388988b4c91c2e55e4634dd79a9e5ab7e6142 GIT binary patch literal 257256 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 ehky@as^t{=vPdjtqbu(uDjiQZ6N$3e#`Z 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⁡^K$$f;#=W44bt!_7_9sCFK5< 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 + val tableName = "hudi_type_test_mor" + spark.sql( + s""" + |CREATE TABLE $tableName ( + | uuid STRING, + | precombine_field LONG, + | + | -- Numeric Types + | col_boolean BOOLEAN, + | col_tinyint TINYINT, + | col_smallint SMALLINT, + | col_int INT, + | col_bigint BIGINT, + | col_float FLOAT, + | col_double DOUBLE, + | col_decimal DECIMAL(10, 2), + | + | -- String Types + | col_string STRING, + | col_varchar VARCHAR(50), + | col_char CHAR(10), + | + | -- Binary Type + | col_binary BINARY, + | + | -- Datetime Types + | col_date DATE, + | col_timestamp TIMESTAMP, + | -- col_timestamp_ntz TIMESTAMP_NTZ, (No support on Hudi for now) + | + | -- Complex types + | col_array_int ARRAY, + | col_array_string ARRAY, + | col_map_string_int MAP, + | col_struct STRUCT, + | col_array_struct ARRAY>>, + | col_map_string_struct MAP>, + | col_array_struct_with_map ARRAY>>, + | col_map_struct_with_array MAP, f_map_struct_ts: TIMESTAMP>>, + | col_struct_nested_struct STRUCT>, + | col_array_array_int ARRAY>, + | col_map_string_array_double MAP>, + | col_map_string_map_string_date MAP>, + | + | -- Array of structs with single (inner) fields do not work with parquet.version 1.13.1 + | col_struct_array_struct STRUCT>>, + | col_struct_map STRUCT>, + | + | part_col STRING + |) USING hudi + | LOCATION '${tmp.getCanonicalPath}' + | TBLPROPERTIES ( + | primaryKey = 'uuid', + | type = 'mor', + | preCombineField = 'precombine_field' + | ) + | PARTITIONED BY (part_col) + """.stripMargin) + + // To not trigger compaction scheduling, and compaction + spark.sql(s"set hoodie.compact.inline.max.delta.commits=9999") + spark.sql(s"set hoodie.compact.inline=false") + + // Directly write to new parquet file + spark.sql(s"set hoodie.parquet.small.file.limit=0") + spark.sql(s"set hoodie.metadata.compact.max.delta.commits=1") + // Partition stats index is enabled together with column stats index + spark.sql(s"set hoodie.metadata.index.column.stats.enable=true") + spark.sql(s"set hoodie.metadata.record.index.enable=true") + spark.sql(s"set hoodie.metadata.index.secondary.enable=true") + + // Insert row 1 into partition 'A' + spark.sql( + s""" + | INSERT INTO $tableName VALUES ( + | 'uuid1', 1000L, + | true, cast(1 as tinyint), cast(100 as smallint), 1000, 100000L, 1.1, 10.123, cast(123.45 as decimal(10,2)), + | 'string val 1', cast('varchar val 1' as varchar(50)), cast('charval1' as char(10)), + | cast('binary1' as binary), + | cast('2025-01-15' as date), cast('2025-01-15 11:30:00' as timestamp), + | -- cast('2025-01-15 11:30:00' as timestamp_ntz), + | array(1, 2, 3), array('a', 'b', 'c'), map('key1', 10, 'key2', 20), + | struct('struct_str1', 55, false), + | array(struct(1.1, array('n1','n2')), struct(2.2, array('n3'))), + | map('mapkey1', struct(cast('2024-11-01' as date), cast(9.8 as decimal(5,2)))), + | array(struct('arr_struct1', map('map_in_struct_k1', 1)), struct('arr_struct2', map('map_in_struct_k2', 2, 'map_in_struct_k3', 3))), + | map('map_struct1', struct(array(true, false), cast('2025-01-01 01:01:01' as timestamp)), 'map_struct2', struct(array(false), cast('2025-02-02 02:02:02' as timestamp))), + | struct(101, struct('inner_str_1', true)), + | array(array(1, 2), array(3, 4, 5)), + | map('arr_key1', array(1.1, 2.2), 'arr_key2', array(3.3)), + | map('map_key1', map('mapkey10', cast('2024-01-01' as date), 'mapkey20', cast('2024-02-02' as date))), + | struct('outer_str_1', array(struct(cast('2023-11-11 11:11:11' as timestamp), 'inner_str_1'))), + | struct(true, map('struct_map_k1', 1000L, 'struct_map_k2', 2000L)), + | 'A' + | ) + """.stripMargin) + + // Insert row 2 into partition 'A' + spark.sql( + s""" + | INSERT INTO $tableName VALUES ( + | 'uuid2', 1005L, + | false, cast(2 as tinyint), cast(200 as smallint), 2000, 200000L, 2.2, 20.456, cast(234.56 as decimal(10,2)), + | 'string val 2', cast('varchar val 2' as varchar(50)), cast('charval2' as char(10)), + | cast('binary2' as binary), + | cast('2025-02-20' as date), cast('2025-02-20 12:45:00' as timestamp), + | -- cast('2025-02-20 12:45:00' as timestamp_ntz), + | array(4, 5), array('d', 'e', 'f'), map('key3', 30), + | struct('struct_str2', 66, true), + | null, + | map('mapkey2', struct(cast('2024-12-10' as date), cast(7.6 as decimal(5,2)))), + | array(struct('arr_struct3', map('map_in_struct_k4', 4)), struct('arr_struct4', null)), + | map('map_struct3', struct(null, cast('2025-03-03 03:03:03' as timestamp)), 'map_struct4', struct(array(true), null)), + | -- Additional Nested Complex Types (with nulls) + | struct(102, null), + | array(array(6), array(7, 8)), + | map('arr_key3', null), + | map('map_key2', map(30, null), 'map_key3', null), + | struct('outer_str_2', array(struct(cast('2023-12-12 12:12:12' as timestamp), 'inner_str_2'))), + | struct(false, null), + | 'A' + | ) + """.stripMargin) + + // Insert row 3 into partition 'B' + spark.sql( + s""" + | INSERT INTO $tableName VALUES ( + | 'uuid3', 1100L, + | null, null, null, null, null, null, null, null, + | null, null, null, + | null, + | null, null, + | null, null, null, + | null, + | array(struct(3.3, array('n4'))), + | null, + | null, + | null, + | null, + | null, + | null, + | null, + | null, + | null, + | 'B' + | ) + """.stripMargin) + + // Create Secondary Index on col_double + spark.sql(s"CREATE INDEX idx_double ON $tableName (col_double)") + + // Generate log files through updates on partition 'A' + spark.sql(s"UPDATE $tableName SET col_double = col_double + 100, precombine_field = precombine_field + 1 WHERE part_col = 'A'") + // Generate log files through updates on partition 'B' + spark.sql(s"UPDATE $tableName SET col_string = 'updated string', precombine_field = precombine_field + 1 WHERE part_col = 'B'") + } +} +``` diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_comprehensive_types_v8_mor.zip b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_comprehensive_types_v8_mor.zip new file mode 100644 index 0000000000000000000000000000000000000000..0301e37cf33675df80bda9b278d26fdf03a96787 GIT binary patch literal 378428 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%0DIH3_P>HBQ6^$Os*sICSSC8=Ka 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Ν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

?S4OqndVogcxDh>J=p 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�cD!ZS(fu7> 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 Rn81epY>@x}4NCai{{Y}Rw~PP) literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.commit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.commit deleted file mode 100644 index f7993d9cbb863..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.commit +++ /dev/null @@ -1,73 +0,0 @@ -{ - "partitionToWriteStats" : { - "dt=2021-12-09/hh=10" : [ { - "fileId" : "719c3273-2805-4124-b1ac-e980dada85bf-0", - "path" : "dt=2021-12-09/hh=10/719c3273-2805-4124-b1ac-e980dada85bf-0_0-27-1215_20220906063435640.parquet", - "prevCommit" : "null", - "numWrites" : 1, - "numDeletes" : 0, - "numUpdateWrites" : 0, - "numInserts" : 1, - "totalWriteBytes" : 435204, - "totalWriteErrors" : 0, - "tempPath" : null, - "partitionPath" : "dt=2021-12-09/hh=10", - "totalLogRecords" : 0, - "totalLogFilesCompacted" : 0, - "totalLogSizeCompacted" : 0, - "totalUpdatedRecordsCompacted" : 0, - "totalLogBlocks" : 0, - "totalCorruptLogBlock" : 0, - "totalRollbackBlocks" : 0, - "fileSizeInBytes" : 435204, - "minEventTime" : null, - "maxEventTime" : null - } ] - }, - "compacted" : false, - "extraMetadata" : { - "schema" : "{\"type\":\"record\",\"name\":\"hudi_cow_pt_tbl_record\",\"namespace\":\"hoodie.hudi_cow_pt_tbl\",\"fields\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"dt\",\"type\":\"string\"},{\"name\":\"hh\",\"type\":\"string\"}]}" - }, - "operationType" : "UPSERT", - "writePartitionPaths" : [ "dt=2021-12-09/hh=10" ], - "fileIdAndRelativePaths" : { - "719c3273-2805-4124-b1ac-e980dada85bf-0" : "dt=2021-12-09/hh=10/719c3273-2805-4124-b1ac-e980dada85bf-0_0-27-1215_20220906063435640.parquet" - }, - "totalRecordsDeleted" : 0, - "totalLogRecordsCompacted" : 0, - "totalLogFilesCompacted" : 0, - "totalCompactedRecordsUpdated" : 0, - "totalLogFilesSize" : 0, - "totalScanTime" : 0, - "totalCreateTime" : 512, - "totalUpsertTime" : 0, - "minAndMaxEventTime" : { - "Optional.empty" : { - "val" : null, - "present" : false - } - }, - "writeStats" : [ { - "fileId" : "719c3273-2805-4124-b1ac-e980dada85bf-0", - "path" : "dt=2021-12-09/hh=10/719c3273-2805-4124-b1ac-e980dada85bf-0_0-27-1215_20220906063435640.parquet", - "prevCommit" : "null", - "numWrites" : 1, - "numDeletes" : 0, - "numUpdateWrites" : 0, - "numInserts" : 1, - "totalWriteBytes" : 435204, - "totalWriteErrors" : 0, - "tempPath" : null, - "partitionPath" : "dt=2021-12-09/hh=10", - "totalLogRecords" : 0, - "totalLogFilesCompacted" : 0, - "totalLogSizeCompacted" : 0, - "totalUpdatedRecordsCompacted" : 0, - "totalLogBlocks" : 0, - "totalCorruptLogBlock" : 0, - "totalRollbackBlocks" : 0, - "fileSizeInBytes" : 435204, - "minEventTime" : null, - "maxEventTime" : null - } ] -} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.commit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.commit.requested deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.inflight deleted file mode 100644 index 5bb738a80f743..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063435640.inflight +++ /dev/null @@ -1,71 +0,0 @@ -{ - "partitionToWriteStats" : { - "dt=2021-12-09/hh=10" : [ { - "fileId" : "", - "path" : null, - "prevCommit" : "null", - "numWrites" : 0, - "numDeletes" : 0, - "numUpdateWrites" : 0, - "numInserts" : 1, - "totalWriteBytes" : 0, - "totalWriteErrors" : 0, - "tempPath" : null, - "partitionPath" : null, - "totalLogRecords" : 0, - "totalLogFilesCompacted" : 0, - "totalLogSizeCompacted" : 0, - "totalUpdatedRecordsCompacted" : 0, - "totalLogBlocks" : 0, - "totalCorruptLogBlock" : 0, - "totalRollbackBlocks" : 0, - "fileSizeInBytes" : 0, - "minEventTime" : null, - "maxEventTime" : null - } ] - }, - "compacted" : false, - "extraMetadata" : { }, - "operationType" : "UPSERT", - "writePartitionPaths" : [ "dt=2021-12-09/hh=10" ], - "fileIdAndRelativePaths" : { - "" : null - }, - "totalRecordsDeleted" : 0, - "totalLogRecordsCompacted" : 0, - "totalLogFilesCompacted" : 0, - "totalCompactedRecordsUpdated" : 0, - "totalLogFilesSize" : 0, - "totalScanTime" : 0, - "totalCreateTime" : 0, - "totalUpsertTime" : 0, - "minAndMaxEventTime" : { - "Optional.empty" : { - "val" : null, - "present" : false - } - }, - "writeStats" : [ { - "fileId" : "", - "path" : null, - "prevCommit" : "null", - "numWrites" : 0, - "numDeletes" : 0, - "numUpdateWrites" : 0, - "numInserts" : 1, - "totalWriteBytes" : 0, - "totalWriteErrors" : 0, - "tempPath" : null, - "partitionPath" : null, - "totalLogRecords" : 0, - "totalLogFilesCompacted" : 0, - "totalLogSizeCompacted" : 0, - "totalUpdatedRecordsCompacted" : 0, - "totalLogBlocks" : 0, - "totalCorruptLogBlock" : 0, - "totalRollbackBlocks" : 0, - "fileSizeInBytes" : 0, - "minEventTime" : null, - "maxEventTime" : null - } ] -} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.commit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.commit deleted file mode 100644 index 0b2cacafaf52c..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.commit +++ /dev/null @@ -1,73 +0,0 @@ -{ - "partitionToWriteStats" : { - "dt=2021-12-09/hh=11" : [ { - "fileId" : "4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0", - "path" : "dt=2021-12-09/hh=11/4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0_0-70-2444_20220906063456550.parquet", - "prevCommit" : "null", - "numWrites" : 1, - "numDeletes" : 0, - "numUpdateWrites" : 0, - "numInserts" : 1, - "totalWriteBytes" : 435204, - "totalWriteErrors" : 0, - "tempPath" : null, - "partitionPath" : "dt=2021-12-09/hh=11", - "totalLogRecords" : 0, - "totalLogFilesCompacted" : 0, - "totalLogSizeCompacted" : 0, - "totalUpdatedRecordsCompacted" : 0, - "totalLogBlocks" : 0, - "totalCorruptLogBlock" : 0, - "totalRollbackBlocks" : 0, - "fileSizeInBytes" : 435204, - "minEventTime" : null, - "maxEventTime" : null - } ] - }, - "compacted" : false, - "extraMetadata" : { - "schema" : "{\"type\":\"record\",\"name\":\"hudi_cow_pt_tbl_record\",\"namespace\":\"hoodie.hudi_cow_pt_tbl\",\"fields\":[{\"name\":\"id\",\"type\":\"long\"},{\"name\":\"name\",\"type\":\"string\"},{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"dt\",\"type\":\"string\"},{\"name\":\"hh\",\"type\":\"string\"}]}" - }, - "operationType" : "UPSERT", - "writePartitionPaths" : [ "dt=2021-12-09/hh=11" ], - "fileIdAndRelativePaths" : { - "4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0" : "dt=2021-12-09/hh=11/4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0_0-70-2444_20220906063456550.parquet" - }, - "totalRecordsDeleted" : 0, - "totalLogRecordsCompacted" : 0, - "totalLogFilesCompacted" : 0, - "totalCompactedRecordsUpdated" : 0, - "totalLogFilesSize" : 0, - "totalScanTime" : 0, - "totalCreateTime" : 72, - "totalUpsertTime" : 0, - "minAndMaxEventTime" : { - "Optional.empty" : { - "val" : null, - "present" : false - } - }, - "writeStats" : [ { - "fileId" : "4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0", - "path" : "dt=2021-12-09/hh=11/4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0_0-70-2444_20220906063456550.parquet", - "prevCommit" : "null", - "numWrites" : 1, - "numDeletes" : 0, - "numUpdateWrites" : 0, - "numInserts" : 1, - "totalWriteBytes" : 435204, - "totalWriteErrors" : 0, - "tempPath" : null, - "partitionPath" : "dt=2021-12-09/hh=11", - "totalLogRecords" : 0, - "totalLogFilesCompacted" : 0, - "totalLogSizeCompacted" : 0, - "totalUpdatedRecordsCompacted" : 0, - "totalLogBlocks" : 0, - "totalCorruptLogBlock" : 0, - "totalRollbackBlocks" : 0, - "fileSizeInBytes" : 435204, - "minEventTime" : null, - "maxEventTime" : null - } ] -} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.commit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.commit.requested deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.inflight deleted file mode 100644 index 8ef87d4ed5f61..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/20220906063456550.inflight +++ /dev/null @@ -1,71 +0,0 @@ -{ - "partitionToWriteStats" : { - "dt=2021-12-09/hh=11" : [ { - "fileId" : "", - "path" : null, - "prevCommit" : "null", - "numWrites" : 0, - "numDeletes" : 0, - "numUpdateWrites" : 0, - "numInserts" : 1, - "totalWriteBytes" : 0, - "totalWriteErrors" : 0, - "tempPath" : null, - "partitionPath" : null, - "totalLogRecords" : 0, - "totalLogFilesCompacted" : 0, - "totalLogSizeCompacted" : 0, - "totalUpdatedRecordsCompacted" : 0, - "totalLogBlocks" : 0, - "totalCorruptLogBlock" : 0, - "totalRollbackBlocks" : 0, - "fileSizeInBytes" : 0, - "minEventTime" : null, - "maxEventTime" : null - } ] - }, - "compacted" : false, - "extraMetadata" : { }, - "operationType" : "UPSERT", - "writePartitionPaths" : [ "dt=2021-12-09/hh=11" ], - "fileIdAndRelativePaths" : { - "" : null - }, - "totalRecordsDeleted" : 0, - "totalLogRecordsCompacted" : 0, - "totalLogFilesCompacted" : 0, - "totalCompactedRecordsUpdated" : 0, - "totalLogFilesSize" : 0, - "totalScanTime" : 0, - "totalCreateTime" : 0, - "totalUpsertTime" : 0, - "minAndMaxEventTime" : { - "Optional.empty" : { - "val" : null, - "present" : false - } - }, - "writeStats" : [ { - "fileId" : "", - "path" : null, - "prevCommit" : "null", - "numWrites" : 0, - "numDeletes" : 0, - "numUpdateWrites" : 0, - "numInserts" : 1, - "totalWriteBytes" : 0, - "totalWriteErrors" : 0, - "tempPath" : null, - "partitionPath" : null, - "totalLogRecords" : 0, - "totalLogFilesCompacted" : 0, - "totalLogSizeCompacted" : 0, - "totalUpdatedRecordsCompacted" : 0, - "totalLogBlocks" : 0, - "totalCorruptLogBlock" : 0, - "totalRollbackBlocks" : 0, - "fileSizeInBytes" : 0, - "minEventTime" : null, - "maxEventTime" : null - } ] -} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/hoodie.properties b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/hoodie.properties deleted file mode 100644 index 4d3a2d67cfc69..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/.hoodie/hoodie.properties +++ /dev/null @@ -1,18 +0,0 @@ -#Updated at 2022-09-06T06:34:40.904Z -#Tue Sep 06 06:34:40 UTC 2022 -hoodie.table.precombine.field=ts -hoodie.datasource.write.drop.partition.columns=false -hoodie.table.partition.fields=dt,hh -hoodie.table.type=COPY_ON_WRITE -hoodie.archivelog.folder=archived -hoodie.timeline.layout.version=1 -hoodie.table.version=5 -hoodie.table.metadata.partitions=files -hoodie.table.recordkey.fields=id -hoodie.database.name=default -hoodie.datasource.write.partitionpath.urlencode=false -hoodie.table.keygenerator.class=org.apache.hudi.keygen.ComplexKeyGenerator -hoodie.table.name=hudi_cow_pt_tbl -hoodie.datasource.write.hive_style_partitioning=true -hoodie.table.checksum=1395413629 -hoodie.table.create.schema={"type"\:"record","name"\:"hudi_cow_pt_tbl_record","namespace"\:"hoodie.hudi_cow_pt_tbl","fields"\:[{"name"\:"_hoodie_commit_time","type"\:["string","null"]},{"name"\:"_hoodie_commit_seqno","type"\:["string","null"]},{"name"\:"_hoodie_record_key","type"\:["string","null"]},{"name"\:"_hoodie_partition_path","type"\:["string","null"]},{"name"\:"_hoodie_file_name","type"\:["string","null"]},{"name"\:"id","type"\:["long","null"]},{"name"\:"name","type"\:["string","null"]},{"name"\:"ts","type"\:["long","null"]},{"name"\:"dt","type"\:["string","null"]},{"name"\:"hh","type"\:["string","null"]}]} diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=10/.hoodie_partition_metadata b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=10/.hoodie_partition_metadata deleted file mode 100644 index 92ce82c886b71..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=10/.hoodie_partition_metadata +++ /dev/null @@ -1,4 +0,0 @@ -#partition metadata -#Tue Sep 06 06:34:49 UTC 2022 -commitTime=20220906063435640 -partitionDepth=2 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=10/719c3273-2805-4124-b1ac-e980dada85bf-0_0-27-1215_20220906063435640.parquet b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=10/719c3273-2805-4124-b1ac-e980dada85bf-0_0-27-1215_20220906063435640.parquet deleted file mode 100644 index 4785e8c09095c889eb64fd80556196fc9cba2d96..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 435204 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 Ee_l0t@Bjb+ diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=11/.hoodie_partition_metadata b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=11/.hoodie_partition_metadata deleted file mode 100644 index ed8c619a1362d..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=11/.hoodie_partition_metadata +++ /dev/null @@ -1,4 +0,0 @@ -#partition metadata -#Tue Sep 06 06:35:03 UTC 2022 -commitTime=20220906063456550 -partitionDepth=2 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=11/4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0_0-70-2444_20220906063456550.parquet b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_cow_pt_tbl/dt=2021-12-09/hh=11/4a3fcb9b-65eb-4f6e-acf9-7b0764bb4dd1-0_0-70-2444_20220906063456550.parquet deleted file mode 100644 index f2918fae851c808da3548709452599d8008e40c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 435204 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 s-=0qorU!=#1L^Uh+>W6g>0BX~@4LC + val tableName = "hudi_custom_keygen_pt_v8_mor" + + spark.sql( + s""" + |CREATE TABLE $tableName ( + | id INT, + | name STRING, + | price DOUBLE, + | ts LONG, + | -- Partition Source Fields -- + | partition_field_country STRING, + | partition_field_date BIGINT + |) USING hudi + | LOCATION '${tmp.getCanonicalPath}' + | TBLPROPERTIES ( + | primaryKey = 'id', + | type = 'mor', + | preCombineField = 'ts', + | -- Timestamp Keygen and Partition Configs -- + | hoodie.table.keygenerator.class = 'org.apache.hudi.keygen.CustomKeyGenerator', + | hoodie.datasource.write.partitionpath.field = 'partition_field_country:SIMPLE,partition_field_date:TIMESTAMP', + | hoodie.keygen.timebased.timestamp.type = 'EPOCHMILLISECONDS', + | hoodie.keygen.timebased.output.dateformat = 'yyyy-MM-dd', + | hoodie.keygen.timebased.timezone = 'UTC' + | ) PARTITIONED BY (partition_field_country, partition_field_date) + """.stripMargin) + + // To not trigger compaction scheduling, and compaction + spark.sql(s"set hoodie.compact.inline.max.delta.commits=9999") + spark.sql(s"set hoodie.compact.inline=false") + + // Configure Hudi properties + spark.sql(s"SET hoodie.metadata.enable=true") + spark.sql(s"SET hoodie.metadata.index.column.stats.enable=true") + + // Insert data with new partition values + spark.sql(s"INSERT INTO $tableName VALUES(1, 'a1', 100.0, 1000, 'SG', 1749284360000)") + spark.sql(s"INSERT INTO $tableName VALUES(2, 'a2', 200.0, 1000, 'SG', 1749204000000)") + spark.sql(s"INSERT INTO $tableName VALUES(3, 'a3', 101.0, 1001, 'US', 1749202000000)") + spark.sql(s"INSERT INTO $tableName VALUES(4, 'a4', 201.0, 1001, 'CN', 1749102000000)") + spark.sql(s"INSERT INTO $tableName VALUES(5, 'a5', 300.0, 1002, 'MY', 1747102000000)") + spark.sql(s"INSERT INTO $tableName VALUES(6, 'a6', 301.0, 1000, 'SG', 1749284360000)") + spark.sql(s"INSERT INTO $tableName VALUES(7, 'a7', 401.0, 1000, 'SG', 1749204000000)") + + // Generate logs through updates + // NOTE: The query below will throw an error + // spark.sql(s"UPDATE $tableName SET price = ROUND(price * 1.02, 2)") + + // NOTE: The query below will throw an error + // spark.sql(s"SELECT * FROM $tableName").show(false) + } +} +``` diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_custom_keygen_pt_v8_mor.zip b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_custom_keygen_pt_v8_mor.zip new file mode 100644 index 0000000000000000000000000000000000000000..79d54bd11353ce2d26e1fe1672a5b0b01a231b8a GIT binary patch literal 226852 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%0A->2lg6{z+`R}*m|FNLYKY5>je=+`N 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⩔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 + val tableName = "hudi_multi_fg_pt_mor" + spark.sql( + s""" + |create table $tableName ( + | id int, + | name string, + | price double, + | ts long, + | country string + |) using hudi + | location '${tmp.getCanonicalPath}' + | tblproperties ( + | primaryKey ='id,name', + | type = 'mor', + | preCombineField = 'ts' + | ) partitioned by (country) + """.stripMargin) + // directly write to new parquet file + spark.sql(s"set hoodie.parquet.small.file.limit=0") + spark.sql(s"set hoodie.metadata.compact.max.delta.commits=1") + // partition stats index is enabled together with column stats index + spark.sql(s"set hoodie.metadata.index.column.stats.enable=true") + spark.sql(s"set hoodie.metadata.record.index.enable=true") + spark.sql(s"set hoodie.metadata.index.column.stats.column.list=_hoodie_commit_time,_hoodie_partition_path,_hoodie_record_key,id,name,price,ts,country") + // 2 filegroups per partition + spark.sql(s"insert into $tableName values(1, 'a1', 100, 1000, 'SG'),(2, 'a2', 200, 1000, 'US')") + spark.sql(s"insert into $tableName values(3, 'a3', 101, 1001, 'SG'),(4, 'a3', 201, 1001, 'US')") + // generate logs through updates + spark.sql(s"update $tableName set price=price+1") + } +} +``` + +# When to use this table? +- For test cases that require multiple filegroups in a partition +- For test cases that require filegroups that have a log file +- For test cases that require column stats index +- For test cases that require partition stats index +- For test cases that require record level index diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v6_mor.zip b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v6_mor.zip new file mode 100644 index 0000000000000000000000000000000000000000..35588f5614fd73c9fa01c556c8058a6bc769849e GIT binary patch literal 158908 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 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor.md b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor.md new file mode 100644 index 0000000000000..6d78d7eb6768f --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor.md @@ -0,0 +1,56 @@ +## Create script + +Structure of table: +- MOR table with MDT enabled +- Revision: eb212c9dca876824b6c570665951777a772bc463 +- Record Level Index is enabled with a recordKey of id,name +- Secondary index created on the column `price` +- 2 Partitions [US, SG] +- 2 Filegroups per partition + +```scala +test("Create table multi filegroup partitioned mor") { + withTempDir { tmp => + val tableName = "hudi_multi_fg_pt_mor" + spark.sql( + s""" + |create table $tableName ( + | id int, + | name string, + | price double, + | ts long, + | country string + |) using hudi + | location '${tmp.getCanonicalPath}' + | tblproperties ( + | primaryKey ='id,name', + | type = 'mor', + | preCombineField = 'ts' + | ) partitioned by (country) + """.stripMargin) + // directly write to new parquet file + spark.sql(s"set hoodie.parquet.small.file.limit=0") + spark.sql(s"set hoodie.metadata.compact.max.delta.commits=1") + // partition stats index is enabled together with column stats index + spark.sql(s"set hoodie.metadata.index.column.stats.enable=true") + spark.sql(s"set hoodie.metadata.record.index.enable=true") + spark.sql(s"set hoodie.metadata.index.secondary.enable=true") + spark.sql(s"set hoodie.metadata.index.column.stats.column.list=_hoodie_commit_time,_hoodie_partition_path,_hoodie_record_key,id,name,price,ts,country") + // 2 filegroups per partition + spark.sql(s"insert into $tableName values(1, 'a1', 100, 1000, 'SG'),(2, 'a2', 200, 1000, 'US')") + spark.sql(s"insert into $tableName values(3, 'a3', 101, 1001, 'SG'),(4, 'a3', 201, 1001, 'US')") + // create secondary index + spark.sql(s"create index idx_price on $tableName (price)") + // generate logs through updates + spark.sql(s"update $tableName set price=price+1") + } +} +``` + +# When to use this table? +- For test cases that require multiple filegroups in a partition +- For test cases that require filegroups that have a log file +- For test cases that require column stats index +- For test cases that require partition stats index +- For test cases that require record level index +- For test cases that require secondary index diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor.zip b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor.zip new file mode 100644 index 0000000000000000000000000000000000000000..41e046e9b31b00b9888e0e34adfa171e842579a8 GIT binary patch literal 260372 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

n#Bt!nQXmi?P~FVSy93TY42kpSFw#n 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 z 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 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/.index_defs/index.json b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/.index_defs/index.json deleted file mode 100644 index 8e341eec77ce6..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/.index_defs/index.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "indexDefinitions" : { - "column_stats" : { - "indexName" : "column_stats", - "indexType" : "column_stats", - "indexFunction" : "column_stats", - "sourceFields" : [ "_hoodie_commit_time", "_hoodie_partition_path", "_hoodie_record_key", "id", "name", "price", "ts", "country" ], - "indexOptions" : { } - }, - "secondary_index_idx_price" : { - "indexName" : "secondary_index_idx_price", - "indexType" : "secondary_index", - "indexFunction" : "identity", - "sourceFields" : [ "price" ], - "indexOptions" : { } - } - } -} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/hoodie.properties b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/hoodie.properties deleted file mode 100644 index 35731b7d2c240..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/hoodie.properties +++ /dev/null @@ -1,26 +0,0 @@ -#Updated at 2025-04-29T14:59:46.084Z -#Tue Apr 29 14:59:46 UTC 2025 -hoodie.table.precombine.field=ts -hoodie.table.version=8 -hoodie.table.index.defs.path=.hoodie/.index_defs/index.json -hoodie.database.name=default -hoodie.table.initial.version=8 -hoodie.datasource.write.hive_style_partitioning=true -hoodie.table.metadata.partitions.inflight= -hoodie.table.checksum=1231233022 -hoodie.table.keygenerator.type=COMPLEX -hoodie.table.create.schema={"type"\:"record","name"\:"hudi_multi_fg_pt_mor_record","namespace"\:"hoodie.hudi_multi_fg_pt_mor","fields"\:[{"name"\:"id","type"\:["int","null"]},{"name"\:"name","type"\:["string","null"]},{"name"\:"price","type"\:["double","null"]},{"name"\:"ts","type"\:["long","null"]},{"name"\:"country","type"\:["string","null"]}]} -hoodie.archivelog.folder=archived -hoodie.table.name=hudi_multi_fg_pt_mor -hoodie.record.merge.strategy.id=eeb8d96f-b1e4-49fd-bbf8-28ac514178e5 -hoodie.timeline.history.path=history -hoodie.compaction.payload.class=org.apache.hudi.common.model.DefaultHoodieRecordPayload -hoodie.table.type=MERGE_ON_READ -hoodie.datasource.write.partitionpath.urlencode=false -hoodie.datasource.write.drop.partition.columns=false -hoodie.table.metadata.partitions=column_stats,files,partition_stats,record_index,secondary_index_idx_price -hoodie.timeline.layout.version=2 -hoodie.record.merge.mode=EVENT_TIME_ORDERING -hoodie.table.partition.fields=country -hoodie.table.recordkey.fields=id,name -hoodie.timeline.path=timeline diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/hoodie.properties b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/hoodie.properties deleted file mode 100644 index 4d7e13b050ae9..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/hoodie.properties +++ /dev/null @@ -1,19 +0,0 @@ -#Properties saved on 2025-04-29T14:59:38.498Z -#Tue Apr 29 14:59:38 UTC 2025 -hoodie.table.initial.version=8 -hoodie.datasource.write.drop.partition.columns=false -hoodie.table.type=MERGE_ON_READ -hoodie.archivelog.folder=history -hoodie.populate.meta.fields=false -hoodie.compaction.payload.class=org.apache.hudi.metadata.HoodieMetadataPayload -hoodie.timeline.path=timeline -hoodie.timeline.layout.version=2 -hoodie.table.version=8 -hoodie.record.merge.strategy.id=00000000-0000-0000-0000-000000000000 -hoodie.record.merge.mode=CUSTOM -hoodie.table.base.file.format=HFILE -hoodie.table.recordkey.fields=key -hoodie.table.keygenerator.type=HOODIE_TABLE_METADATA -hoodie.table.name=hudi_multi_fg_pt_mor_metadata -hoodie.timeline.history.path=history -hoodie.table.checksum=2438145766 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000000.deltacommit.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000000.deltacommit.inflight deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000000.deltacommit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000000.deltacommit.requested deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000000_20250429145939812.deltacommit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000000_20250429145939812.deltacommit deleted file mode 100644 index 96f80150bd202634cd346a41beb360f1d4bc9ce4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11084 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 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002.deltacommit.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002.deltacommit.inflight deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002.deltacommit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002.deltacommit.requested deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002_20250429145941217.deltacommit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000002_20250429145941217.deltacommit deleted file mode 100644 index a1c0d25ce74a80d971c61fa25ea019b26afcab0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10946 zcmds7%W~Vu6`g3E^{l(FNm30V@#senaMKk-YX{)>16e7S;&}<7<)gE_`;jPhxUi$S1F7Wnc}rc(tn;bUp7 ze8LwXkTpMFEq`FNQlha=)sS>vBSPt{&hPO(Yxa|Tl!NM{ljz!i_k4F4C2B0Esf$iX zgJ)<^nXr&NrE|n3u}$tL5C3Q-|sU9Sk6mxf5o}GgP1jecSwX?uX|r5l?(_;Ac9lvtm@dw%Z9;4TNn>r3Lum{iHU3zF3*XJw-SU(>3t>6ZIJ-}?4;3uJn1)f_4| zm?x;MZ^G&8MvH6;WhKu9G=(ffO+fZOYBX7JBYyY%)qno+hyUt7CN__bkB5Yg&)a%>bw*hdf1EuTF8-^IuQneQph}EMrAV$Xso7w zt6_08jwXXuoU)ru-fi0kDOk}feh!Xa;Sn*SKfwt~Lxq&^uOg2;YM?i1i4?1!8EsKnrURog7txD8{M0r)VUIz?c~cxXkI&>3DVcQFeYuTd6uSS~B#BkYGG`Rtds!Hq&gPAyM)6As`jfPT?-G zAlob*4b}S)kB9Y6`QD{Q_AuX=j_pH2Cfsepb2CLaZ8l=U=k_6_r`#n1o zGWxpI>FaA=Rd1Hjqv#%l3@O|Pr#n?a^U@|NXIhWgF4(scZ;cFozV_@6NaAq zgL@P<*xm=qVN}`W#y|TcUI0KZHcPSQt>MX=7i>6l9c2lh)BJ}NkA_E5{KQW@H> z_d3_vG@}-mCNSTYTAAOgfuPN1B1|s0O--nK)=rwr9p--(j2hPfwbG%g)rUQ zOr5u&v|8vVcIk|j_e#*7g5oyOeji6N}V!c17Y2y|Krmfiam_e(tgY!_V zpF!tCvMz7*{luNZZyj5fj}wJu7bZ?@yfBI!A^U{q0ar_Sod!)oNle5rQh=Jk@R}Qn zn-BtHnU)H07lNi9OXmY{MQT1uzH|uo;|34dHMdqwgyOn9oA_T(T=BaslUTdq3Jany zI742kF_y8Ev1Iqa!4H-6krx*e8`Tjy*fcgTPv?%N>3f)b1OJ@r&Zk-4Ow3tNa6|n5 zw_=1_e$j@3n`x21>A8@R{`PiwPOie%Y#{!WzZLv}|9XC$0v_kFw|OH9tzyLsjjPL{ z`1PWEhZT=YGb3@s(v6+)8{+VeWT;t^D4&Vr^Q+HHi1sPZgN^2>$hQJw3ESq@NX_i$ zY78=2+YnUtL%RAkl~sg#02kUGkhM|$X?^8aFz^KL3=p+ey+Vb@urQ5XD;~}V;w`OZ zVqP{>+r6JrXthikK&H?16ij|q8{2QUhe$TR>&Gu7{DK;$vn!xrAOPCFD^sXB2{{YC zd0l1JIsKKC%&hS6_nN*#`9l3)QIW1?YmuYFalsOlLp|u=NQj3`BG}R^06xCrN ziU`b5P4OEwe-_IMA59g)(WX}>3I7}=RFjnecTwpY1Y3A4XO2JkAkr4 q{AgMZhPD9u0@+Hq(6sFaL*mKy;Na`i+skkNGW_oP;_7Dk0r!6&@}(63 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003.deltacommit.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003.deltacommit.inflight deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003.deltacommit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003.deltacommit.requested deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003_20250429145941430.deltacommit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/00000000000000003_20250429145941430.deltacommit deleted file mode 100644 index ead35a4e7a580d86b0a1c8c0b66de52b84de229e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10946 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 MS#LDz2a~DtAClD0>i_@% diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145938324.deltacommit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145938324.deltacommit.requested deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145938324_20250429145943593.deltacommit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145938324_20250429145943593.deltacommit deleted file mode 100644 index a986f620b9fdd6732c81c7cac7d5d774f7005d8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12376 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 YaUNfuou3RYUY`w4&dyGbXFsd?9~&^^_y7O^ diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472.compaction.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472.compaction.inflight deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472.compaction.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472.compaction.requested deleted file mode 100644 index 25108e73bad303645161555f44178889d4838dc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2517 zcmcIl!EVz)5DivO{eX%STKNQ0W2F*Ya)DA(h}4p*i9n)6(Z)N8x2(O^?mBI#@(uh! ze*ide;Xja&xNzVT_ylI{IC0ZD4K3u-dS`at&YL$gt^V;HXM>KE^t2y9NYC9f*NkIu z>#hP{D&}sw5e@D43n>|g9T~>dH(W*sf<{xT#v|(@)zG8(e*j*PFz%&+L&-p(5JirP>b%^B*E8zln0XRn}2(J`92feL z3a^dg(GcxvD#vt0z3EZiZD+PgcY@EIl7y)my2}L|P!rrBtySN+0P|~FWt7xxl_ZL!#Z(!dN(xE4W!Umphk*6+m((PrF@le%NC1`QGMV&+ zmBzBtm&5g?G)M%Eb2a?q#JZDZI)GDz-UmY&3ZfkOV#>4TTBU$Dy;YF4CDOpq4uTTRT{jQf^9Yv*k)I7Usdfa_`lX$Br9i82W7Cj6YN!(c@oh|E z=L0bTHH2#tD>>o}7zscD(Sb|^BUmzs7?}^)#wqxTZHxTvg!U~FzR6;45{yA@yfm&s ztQco98A4>|s#N5J3qh#RGDk#DK%i+{Vxw7FiIF7H;9=HfgC%!8po-!kE~V#xDk`T` zW1{vMU{Fgo=P{w=9gK;R0tk-?vzCxYIJ(J6!2N(^D~nk15T4e6d*G32;gMs4bO|{u z98fFP(T8CQj8Y?F!Yh6pEC|@8Nq+i7u{u@A1lzHMv$%R zD@FhgCIQ*%wyU<-as$)~6xuH2S|f*TT<9#ZJ8e3rm(;&(U!#7mU8I-O>P{-ZzJ31r z_5GLKAK%|T_z-{k=$x-Pj^oxAe~$CYvx`Yrt)*J)EjrXZtgpA#LtC|0aXJ^BtBupJr#33Ync9HnyJ? k4EGm;^xDlgjqFzEi95UX`mot)6t1C%Q>m<_e-;_~1KH9{yZ`_I diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472_20250429145941874.commit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145941472_20250429145941874.commit deleted file mode 100644 index 9a8c4ac789088d95670297f03a3d8f336c6aa68e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11138 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 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846.deltacommit.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846.deltacommit.inflight deleted file mode 100644 index 09610f35bd6be6cda555f1d21bbf3be65d390525..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4140 zcmcIn!EVz)5DgYW72=F~s8Hnt7n;aPQ=#VAHi$}8jgl4)Ra9;4N#b_BYpvH&OO*>p zK7b29!I=yH!x^a(aA0}lufk@1`i1TO`4A3XAX_s*2J zKA1IAfX#(t?wE{t>i=8L9TyI{=ehC(Byor&qtU=8wwl64uSD>@52b$SxFrqjaR(?) z?7Bdmz^q-|jS+n!q$^#{&iDu6N@z(U1DqKVxG-5r(J&_D5g!K!goc1H@n<3gxy1nl z@Fu^{<{vLKlTp{DaIAcuLm`mDWj!3%o?VdvDUCkW%vLluZ10#3bV*31SyLVi(Sy+z z`b75E2QFX`ozB{pV4^_Z)4Q9+_T0yCgS?ANE(z7f2e-Kx z{0FED!9@-q;#hC2GX^xzcf8lsxtoLL7~l;iLSFOeteg=C3`tZ33CXO=a_+}005L-p z7TS&-IiTFW&g;n`7b5f}Zm5P?K5{jSCa1JR?CZQ#lqj{_k8sR#Mla>P_aFik+N1|A zlWA#-rl;L*05WO0DC0XM02M|F%UHQrR8!$gX4RC?%vg8Ytgnm`;y?j)~_qJApRNy1QR4F9TZGv^fnub{VMKR!(oX5u>O9l&e+>tF4T#K13|1AU@89Sa=b) z+>xtjm*-%2Vwh|WZ)c?URJCk Js2@$I%0Htg*f9VA diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846.deltacommit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846.deltacommit.requested deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846_20250429145945066.deltacommit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145943846_20250429145945066.deltacommit deleted file mode 100644 index 903465b570d0509e3643068e98bcd8c323cd5c14..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12376 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 k?X0zWCw?m0PEs<63uJP2Sr+d`h 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 BpmP8K diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675.deltacommit.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675.deltacommit.inflight deleted file mode 100644 index 92781866d5bc30d5a72b3dc6a2d3a3c7298070fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4571 zcmcInO>Wvi6sA^HMO}2!R#g`LiM$3x2x%HtRT8R3Z4?AayND1P>;Wbj&sgIzf<|1S z>u$T~1+t8kL-Z;=LEntQr5KDc!EB6Y-uHgzdv8u#mk*2=s3&;dv%1(pw>#IS9Jtsl zn*v*0*k;yb$Wi}4a&8lR$Q_5s6D*O9BpR)HF0#}XE;@Mx?_Hel`ZmdHV29h7!p1hi z)b`Bs#q}7`MM4ruI6LEC1(CQek@R3^V8DgRd)NwR)I<5vr?OcO)`pF&Y2!BXsWi*VgCTe@3ZaW+ zcYWXj_k!%KO$GBE9lvOjOv)iHF|LE?5vEu|>ZYTcME2Z;a>HqrOD+-B!Uuy?7W@OK z2*E`PAHrI%uCoTTou7H9rq6B)GsgfQ;2@+G4{~LXY=DvkMvypqs*>dWn0Z*tAccjp zV@D1sx31E9a>#}7T?qlzFw0l2wxY%>f{?fW+|(e^3E45JRsVr2ZYJE zV+*3E?Y4(yRC3XYZy^t>GKxrs%)KI;f^Dmd-ORekd^X zrWF9rT}5)s05syJj4}1;!?6PWj&W)j*~+++v@{C*srYLZQ?TQ%wQ<6D611(vJ~oEK zxDy za~BJw?*!@=GEFrhvnO$5QiUGG8^g@q&zm=YdcR)XksqIKp8mcyzCSZIHZ4wlhc!KQ z|9E6%GRB75Z)Cu?ASTz#0%)ocip%;Bws<~>$}j+fG?O)b1A_K;j1c$Km67tLm- z=)nNZY$OIv!ff1c61(4Y1+nmxbTNA$0_HSe4ghl+P?=ncNiM`AiOEL1hN9M>Ds%EF w=^z;Qq9Lw8??=PCwfnHQ_B`yzXh;~P5fvFP&#U!H?W|d?RjSp>(KNID1#hY#jQ{`u diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675.deltacommit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675.deltacommit.requested deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675_20250429145948126.deltacommit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946675_20250429145948126.deltacommit deleted file mode 100644 index 772c3fe5e7c142a2fee6ba753f817edfa86b9471..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13743 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 p&>UVi`p diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946737.compaction.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946737.compaction.inflight deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946737.compaction.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/.hoodie/timeline/20250429145946737.compaction.requested deleted file mode 100644 index 50b5aff2de44a1a68747d381080bb29a1b043856..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8675 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� 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 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0001-0_20250429145946675.log.1_1-120-382 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.col-stats-0001-0_20250429145946675.log.1_1-120-382 deleted file mode 100644 index 1f406400096e938ca00e629c527a4f4d470210bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15007 zcmeHN30O?)|DQpWt*i-gnvkVc3$nFLY1d9jon}tWshK&`ETt0FRTo!eS6Rxnm22rn z3MI0IWM5LqmMkGl2>ssooSCVl<=!9v=l}ekdY+zY&U?P^_x*f7-}Oz?#)E0ANh7~Z zSArjO@ZAY~cOXBa(Rz*5A8V{{GjfCQ24$eo!91M|3M%+<9E(Tuk$1yHj#4w#5AydJJL+aqeB6vJp>?6j3 zV%k!DXEXQ`F5E{X7UKK>hPP}-xHaaFO1NT%DO?h%-JCoT7R)Dpia_d&K0#R6PZ1|T zg<@Qc6MP>5D(3tYk^VRr^C2z!-vHR~fO6tU4WP{+%^!${pt{nJOc`#JaUvTSfux&E z2?ov=LxYiAaR)?12!E0tJSp#_^kFm*0FNRH6NxdNj6zKilIzAp1>j)_%9UV%S@Mrt z=DIc5z?Sb1snL{^B0RjFgbXeLs3+6k4Lp+R50z}FG%jLdTuh8X2a`ISA3<<2lrMkX zT`0j293CGRA@F^KgNhJ84C5ofqsVt7y(3$MS?&au1YeBed=Y|!a|n4TBol)A5fU*X zCzl98`D}6{QA59k-Y&w#4VAax5(E#RBF2QRL*6pB4MfQg&ICJB2lj&-!C%2n;LzX* zToG8-)C!GABsXhYm?$$AsfcVVC=OwPz}4{7Fx-g5C=W7-GTFb{$d(U;@WqH+91_X_ zCMB&bXL%^FG)st~fFODj0Wbj|N(0K1xKIX=E5q;$69ZEJ@H~Dv9~Fina0P-2g=knq zVQrvdBXBUj7{~%XgtPUeL`3|#XaEDSQBF7+FA!Tk8=D8cprI`Rp9vv?a=8d(my~nT zJRlJPTZ^SRpt;CxNpK}RzMB{oi)1^=fskbaxpi7*U;|Nd@ah@JA~!;S$;7xwjI(}B zKj@uKFipys(L{%~P*DyZuq=ka;7r04%E4J2iXTn1K~RB!i&JKACdpCn{6y_2zgq^j1n zg9+_ds7EHs7WK2{5@;LX^M}iRg@&ZymLX&k5idg8v)G|S*EgK^-9*NhzLwQ zc&IiK3K|EL51I#l2qpxH2{vz_-T)PekPrxQ==Wsv0P6H+3N{`(@5coZqeeog%MXO?N^JqBILGg^djPBH3s)V?a1%`Zt2%d#y_sLv7$_L0*iusJ2K<2+;rx zfpZGTTQ)8V0&g})K2o{|A57Rlv=sraw|yr`gSSA#^pCb}Lk}u#J4io7n(smDr+c`_ z9S`7$Er8uxn6k{^U|{+PI!-Wx1g(f3@IHjv1DF~GR)>uy0-YEN11$xRhJfakPmqHu z83p`Nt_TC+PEHzGTUy@$OGVYUlK*WJO!Y-%gDu;w2`A*q_4_7@8t1x_V_Z^1vlA}) zfaoXokgk|NCL{wR#9h7v)l|ZdD0M-{2J;A9*aBx^_if9z0rs)L#n3TZ^yd1lIp7V% z#0c>NZ&8Cb&~THopuPQMk>10@mI+M-re?ax9KJb1en360Uk(WmG6R^~7$O23V_|UC zhPXP|A|o5?r!C#Xfe3}_%7<>G5k|ostf3CFEuktAaK}iU2vQK7r$p+u3WrpD+tJ_> zq5rF3K**W`0n@(RU8ymZ5Q9+<1Q$3xfM^37!toU~f&rEwX9gh82r(Uy;X$(?VTqgY zfvJm_!?6sD95zU&d;de!Y67J^$h4(+s&K1eP0EgOCzyS9a zK@veDEy=sb<_iQd2QUNBr@3nysb=8DjY=7SSGW)~sZv*wb}6tSftNMS7kF+YN5O3X z8S(yY-OyM{v!z2D%DP6kTvS>2qiZgC)R1W`t*cstjdDqN`Oy$L0JIPUdI9iO7#A91 z+X|50k<<owyIj-gK8) z$Ie%W`BmHP(^Qyz>}l}34z#;;+F_cyvCbdL60vi{7M*pUFJh9}f+6f=be`?(c)`5m zaU2`XeV;VOkHRwVKQF##udpJhBh4yoUe@_-!%8(3li~_ftJM0Ay=juNWRh;qhzwq` z%5^11-^xX-O~NvLhrrJZRm$EyeNOlY_G2Q&{5%JX@}nqBE&u?>qV#XdkDH zyr|@5*+oiKb`#S2+Wo}p@ry}aHFpXamh76n6{2ocz1;%(y1MD_a_eZB?Ayg| zh3!qGQ}QzH`!}phxudFjnrR)FQ>#6u!;G1xlWrgF$4hika0*m<>TWYOZiMX~#at81 z)0bwsW~LmYv(<<69HVMJWwfbVxY%|dwq?lbT2Zd^*RwtMjm{S5nJKHgP4~4;9o1u{ zndmIH%6w47ty86jIY#}>9`-trdUVgYnEdxxnNkUFYWlPV8_VAhEiTG79#gIwwKx6N z%fBbD2wtWk_y;)stU3 zdi2v-<}-FMEv|=pSb40=cZ{8*#6RkJ()-@HQK!q?$5o8KJ7)IIs+B%HYGzd?lo#E4 z<7{gF^u}yqLRjUI+Id=Pb~O(x7X}^z;%yA|`l~5uTs_i{wa0O9SjIaS6<+wbe$Q3+ zaSKkYRssJ-vNYtgEpw*p^y%(n0lhuJx9xY-r-|yR&+?6;@3?2uy|b>@+_~#KMs!}j zGB0aN^y9*Ev}DP;b)T}ltgOm++*Y&l(CF{c*<;6W+-t!nesoq=_xE)gQ3|x<@e*}g zu*VHT?MZ`e2S_~&{OC|C^*EYw{k9$D&sDX~-?X-Mu(EZs2Kshk(P+rP@AT~wRsUj{ zmk%+>N=4ZPMGCzlfsG{)@|F#&trDS~aBq%c`T7qxw)U>PYFNzQsx#ErdL#R5$n|Y?Gs4Y-3jfRv zJo7F4T&4bQ*Wn&Ro-G^WJ&$=Zf4`>9?Uk3t?xb0|u(o?8xN=7CxNs=S`gL{8X9Kqh z>(A#bQ0!b%Zg%0(wg<;5N^4@5lzzS!JtM8|Df=$IH|at^QqJmwks9-@3v54*^YF2gYs19DO(fgbPt=5HNnH{zT<^VrR){N8?B>pDH@%8iY{10GshSh7?+$)KJor! z^og}A2A+?s?slegS1wh+w6CRf`=AmU+MBT|diqL!pA*>iqw0rW=v2kb*NrZ= z=>4oV&ReOXciyS4eG)d(-*zpIe*F-6!AZaFsJ6k)__yfgVfKhi(wL%6x8GS_uE<fT+Eyv=piZM#( zM3`ofj`hb5^G7JfzYMw2AyCVF?(nJ69NqGyWg$^v62&j}R!){97a6+EcX@4aM`LDm zg=tC8_kLOvZp6HwxVQ_RCYmO2*ZI&>`G8|~K+kiobv+}^*GCaie#x&djnoaz80Dv* zb!*zqv%C|wyK_p6|QN2WS!RjaJm2X9^-Rny`6PVY5Z>0E-|kA z55<+HeyjVtHu*w1{r&pa*ShjA-9G=khl5{wvU8~^tyuGQ{22Gcp$k>3Mj;(L)C^gp zwXIv^4TI2aGyRlPUXaMiJa7fwHoUR;!4KJZf9(Zpo$)ab~bOCMN`NE~wE=CZoHKm68s{pI~| ztJ8vK>H`Mx~0cVZq{r>^YnCt}Ga6%7_ZwjVPR-y;QW@)A-0qb)%e+0pV*(&EJ|H zng6u1bN=kDAJ(3Ul3eMTI4`^75xoq$T54r{=Wzz3e;cE~(G)yaioJNoFeT6LvFiQG z^Ot+*9nZ2G`1Mt|(v-wq8zz>Y>&y%~YPoqo-HGmd#_vF)LPVO8NB(A7WSoQL@!o?~ zaaVjU~9UXTqzz;gK`3F1!$@n;{1Gz8;`$+MJbq(y1u$(fa-Tp|@`K z2_80SQp(a&tzH4kiyjxcB+vJFM@;k*53~MAn1~H+KMvH{5XK7ZE%DiUYWI=#iMKp> z8iSX7eth}$si%<&9k=g@&Sy<6I9}yixPO6pu)#R{jVA~kow#dHCtWxf$r<2aOndrhnX9wrK34~|jT81J zZXGGqQ#zJdu3jo14Rm{QP1|GXL1LI8N8X{ z=oWTo>0@jMt!Uvx&Jml;#80=&I_q4E{jEo>$>Q-LGm|o+4`h}rg}LeOEY)3=lTc7L z*nOq*lVM(SYW|*gW%vN=q`tMEG!yB{+ZSt!W*VlC|2SR!)^F+7B?nb_CiHXh)zOfp!Gi5%~Xr0GP(t59Dd4>;D5X CkuB{2 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.hoodie_partition_metadata b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.hoodie_partition_metadata deleted file mode 100644 index 2412b36db19f8..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/.hoodie_partition_metadata +++ /dev/null @@ -1,4 +0,0 @@ -#partition metadata -#Tue Apr 29 14:59:43 UTC 2025 -commitTime=20250429145938324 -partitionDepth=1 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0000-0_10-62-159_20250429145943911.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0000-0_10-62-159_20250429145943911.hfile deleted file mode 100644 index 5a71b3d4acc31a6880f33068d5bfb1dd52e33f3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7407 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 PK;VGD|C0dmKL+?e_Ap!! diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0000-0_9-104-299_20250429145946737.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0000-0_9-104-299_20250429145946737.hfile deleted file mode 100644 index 0747b46b423d609ac56dc8771db6ce5af0ed1307..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9131 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 K2td!T;`|FiRSPfx diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0001-0_10-104-300_20250429145946737.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0001-0_10-104-300_20250429145946737.hfile deleted file mode 100644 index 6827fcb05de3b5032543cbb00d6792ee8bc7de1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9113 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 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0001-0_11-62-160_20250429145943911.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/column_stats/col-stats-0001-0_11-62-160_20250429145943911.hfile deleted file mode 100644 index 92200f361aafcc533cc481a90a17b942eb56fc91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8776 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 VfeQi`1TF|%5cq#4fdAbE{TGMNhHC%- diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_00000000000000000.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_00000000000000000.log.1_0-0-0 deleted file mode 100644 index 8eb3d43d1ccfcca044d51bbe239c6abf62347f1d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 ncmY%P2zBvPW`F=EAjOD;L85{N=l~=N1e`$348$M}aNq#||3?K( diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_20250429145938324.log.1_5-57-134 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_20250429145938324.log.1_5-57-134 deleted file mode 100644 index 129abeb0107ea780997db0fb8952f22851da5c40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14420 zcmeHN3piA1A9txpy6L8TTgOPLG!l|aHsdxzgrXFVnS;a3oN?xiOH#I4w3Tk#{Yq=2 zEw$0TWGkCZ_lxaI{=l+wNLeb1R0gIspMe9!lMk9i&sGxMJR`+tA`-~akD;7)aP zHBg~nR%_1=# zLGoF~EDDJdxVjTNYH4EkHp|qI4(k{a14=4Mtso_0R|oj#W4Y2!m5U}HehIx@f>FxKa|8q-1gKCL**fGcW2+=ead1blBXi&oxDosl>;w)C zjv$bLWlgQnfJ6$jwuOmuW6_Gpw}Rpj9td2@r-tE1LZL#)AjV|>Xd_n<5F(-wg*YT8 z9GH~0vV!F?z|uStLjgfdq+(zKKolj))3`7OP$Jl#`fbdfzpozhsQ{T(G;ac4EzGr0EjH2BD6bG1c;p=<^gD#KLOGB2u>j} zCV+YNpi~(yL8gj8U<4AIMi@G0D0F1WgEfr6%@WO3M76FY$aw9cAWWn!D(4PTRqNWp zgw`JF(TTD}{hS2^+6MSS;j;G7kQUrBgpPz1(5ZD0`SiN>P?C|{vX&f}7g|@6P9N=| zBa@d}v^7%}wyq-+McYA1g$uVOPPcdzkUHAH2)GIn5MekE6|}=~=rX!xH8CD8LFSk^5xJTI&ZWje50KN($+{+;8|548Uofe}F`)S_YB31GmsxeL7% zp`E53a=9#3D#|YpT!agyLRjL$4vZO3kfvC9Do~|MHU07NLO&$TX{g4)2*f}$90QEdrDkZ2f&z&Qov zEgzRef+w3JA1!^V2u#>Ow3Ps^w|yt6(o>*e`diz!p$C<<9kd@J&G(@7(>+|`i-(0% z9ALK=rYwHp7??hSjuVU^K`UYcyboda0H#KP)nTKFKqrR6KuZCnA)t8`5%i!+PJvKV zAi+SmQ;!Tvunz~Ppkub^&GlP{gC~%2=12&5 ziW#(lhMSfJ?HwYI^i!w0Izm%{sTmuYDY8fC516m(mqWsX%mC&#W{4Qaco>|uA>Qt; zh*3lRjAeVc6ERR-#n6p5!U(v7Gt@!8B~&FI?wBw-o)!e>DGBUW;gE@MI~oEa=KmE8 z2w77gVA@x>D>J4dF&OngaDmeUh&Hex9A7ab7+?u{W&rXGiH!ys9yAM59@T^oj%>sp zj%9fCut7H6`#+*q6DSoyrY+r*0&;IT*vxd>6@*o0)-M2sAw8f5(2-vV1#AQaZKf*2 zK+fSqV*%Tk$~?;vzLB{ja6uA{0q@|Qklcw|@EtHBhr?M|%QQJ=q)7B&1?GS!1XK2l}Ht5Z)zh#1+^Q*d5Ll>A(Po+DyOz_ZE>-aRV*s zyT|4W1S%Xb1JI|rYZ{qm;Kq$f8Gu(f37S-ytH`<(*pR@>n&t~UADW}!Hh_+J|Fmvs zD5crbp$%nSgIg}9tozb6mm+G&HI~&?t-;2)B)t4kMh*Z?f5M}JVW@8wj4vK*#sFZGDX z%6@!?3a--7PP*d0v=m9XXgX%>OZA7zrS|q~u>r61yR-XB*(&ZT!CKpU{dIm=)f3)P z(Vs`3j_7o#Z0r5!NYRUBp)q9#&J^w1pnmLZ`h3fKc5b?JZ9dctySPu}^?RY6XAQTU-O$U3KREly+i#zl^uOj3-~#@IpzPzp39gR*-kzSmW5Ka3 z!Oy71$M&s1HZM4FK{ct(si|3HWmVI8k(1$i!}V|D3TkS!Uwzh3?5uK3bj4^C5Yk7@ z zJ#{#RIz4kWzl#liuy+2B)>&G%j_HMyXGU1yzua)O&)8QS6M1Ll(NbQFN%kU^UAO8v zAweLTY&*qN~Hc%oD7g{{l7{|eQ~d1pV%)N|yCynq4bCqH}sRBL5}CcV3M z>1xH!)U4#8-b)Ad-J)Kssk7DcQO3%p+;_&EI6<=~UKyHda=CWpTmCtZ{LZGT1_Q&c zY+tbaw}h_dR0pL&E><= zvW6gkyn4o(yW!)o`_8)7dhZ7a_Vtc7otmV_?rgh0*uc2AZo>O#<4S($@-W}EuDV$G zW?shH+!cA&nK7lOq~9f%t~Sk*pyaOF@_s8E7N;6HxM&rrshc}_=Au)&qz&9ima+z& zsxa){=jU!C{dgZuH6NvJ7Tr$Zd%_YGOeqIjjv;G_k}(9A>1BpkId)0 zky*BDAE};qpYnE^5!NZt)O~bJ+vV{vp5bo!@J`L&+Vt@3=|&PKP{H*M_}JeSTBV zwsV2M+LjEKx%TKI-sdu6-ORfnyHywKTujqm#ihDiygQ(2ym!Nbi5IhVG=IE%OH9~( zSYCVc82?Cr4q1tw)Gxes1pk-VMEqvm<)lmFdmQfeUd`|D1ifn)tOUGwPBS<0>;fmu z9i4n(t=75$SDedcEQwO3hK*QK8Z}Ob9Bw}|W0{KiRCW|BWv04FEJ`tP zvwk?dli72Qlg&wEzm+`pjbrouxuaIwBzf=}oe}aDB#sz3g3L|K);FE(OIIllsj{ou0kjZBl?2dHmsiojzW_ ztks+ED?Z>{viOTf!l{5-A!fv&%WM})x&LDaglYQ^jwbK0pgxk*H8ZQ zA6-vfY$#0*jZemI9VLI;K9se_IMS_OKZ9aq^bae`U+{1H-adXSaP=Y8v+RKm7d1yG z4=*tE`F+3BHUr&s{;t?i&Qu4-JLia$P`$0*3#PCiS)Q#t?=9VKRN|ihVDGu1i{ru~ z^aq7i*hi^l1B$NR>+yEyt~;V5kNs0?2s>o68*#j0I&nd1r=Ps{v$`qe zW!ZSY{w3bv$9pl?2XZZ*Xd1siJfvjARPC1oh7O3&IXy!AV0CGV`oi0G>YFldBpBHy zR-ZOAV~>wmJ}h;DZNQ!@kIRnU^O(o8LZk;S2t2|b=$mVg(@T7EZIkaM#Kdgt*i5Uu z&FSGU5R1>5sxMmdj8`+UpuR({uMX68BLjV`qc8sOMPbsa(YKR z&NH!^AwKHhQ+$u(pH+SPtl!hu(Gih{qh?i|KWEwf1t;Qs@5R}Nk-o={5SMGV*>CZD zbv?(cOv-oKFfh6Qi70B$!kZ;;s;bon{N;e2%Ij`C*>;VSAhSdet5v35H1I%CFuOo} zqI{=+M1bp>%Ht(l1l=~Q=vmf>x)hnqosRh zX7AouxBiK+^k*|Cw=E04(KQr?{AzOGxs$*2ft4~zrs(7i)7~A+?{&0dV8~w4F2@@Ai%-yCrfPo@PqF_i8 z4F4CgvKDM0@5vBEK{1FlDXY>$69ina0YfstK#~cQ31tzNwE!+IwpHwk zt_l|P2^OrZ$S#Uv#{wweD*7zQihb30?@ST`NZEbzKmYR%IfnyD?tJ&Vzwh_eiy>#a zi-(~S{hH_uekp^WUf@TC{zyq_;DqrLtj1eTur;@|vbD6BXlc!Ssc(?Pq7p?I%Z^22 zT!Q4WOj$xy0N-;6f`?;17=`js3iVg~RxCofa0x+1vQhAN6vmE{@NhO7M-prS!Nd4K z43FS~C5{Lq7ZIaz7!QfZsVH2CP*E5nlZ*tS;d~4{5P@TSo|t7fD@mq8XcVnOD3=fj za4M9-fnugoeP^+R5XDbSSW4T{{}$C1ImdbHGnCLHh(l4hq9#~*|7o`<0LB> zfu@^G2^KD-puuRa1Og%=L z2?>SB$t6ZmA&=fjtmv1}+r=2AsJs)OAOrvv3L`s*ykl$?M9B~C0(N8$91b^ve}bLB zp}`UOVz8{O6GOYzh&+=wYu02#!X>~C%4Ap}B%6e1Ug z#76;>(pHwUJRVq@OJXP>h?ztLOaO?YKzSM$#sG3O*|5qva~1=uJjoQxNUhmeOQKrc|VCEznbA}F7aKz2zv zC(Q#AF|aiy%>nI2ZfAlo5eNe)loHE!k^>>j1aj+i%s>TEa`2iN$fY+zfXOIaOyS(m z(+_&*RG21Z%xI%SSEwil4_FpMU~r~kijTs%Q4BxYXoH|45g%vF-cFKZp80~>F@SwB z{RFu18yJt<$F8;goR~lvM1sR(q}*uo(jp#y0crq58c`A2ohbsuP7w0|w9KD?Xgma` zka#n|JV#Kfj20u)g&;5jiESecoipS*vSh&;M&Ndd<{_jyR}y5r?obdW(himL2C1rZ z?O;Od4)y3n*`a=Jd;;wPd=YS2cW6ip?ifNBLIUX2Ify)ZU3VzSNbXomCzuyHSCUR2 z-Jv6smpZgHQx`x??plE-pa% zokQ-zEbK;Q<=8VsF=a_{31s?E9-{yVy&{kZa4`(fb{6A7qX)19U8lKKa)&1k1ZA5K z&LxR1_yAlxPCzgIzc{e8TWEP+SQkolV0C^nx*+{4$D<$U{xbq2f=;MI!*~isS zLT{BmTc@g4NuhNBZfO>23}_A(pYtjB*=O0<#?H+^qX}OOXi&)gHJEAZIujCl;6R(i zPFA%u#}j^yxw{VFS@t47lF)og@lRfrjZXZQF$&RN8jXeu%W+gEmk1aB(0W z8AUk(yLB*S35vqN^bvHNU<3(T5i{U@2(t$;H43Z_8%+c{F%$+`3Lp&u&8v{02URi( zM4)^z2Ev`3G_tm|xdE1nYHlU}+a{Rli|7Vhwp$xc$dha9CW;y7`qN`vT12}OF8P4y z3-*xySOiAWff3>^-+^f=;YW2&XZh+1u+ln0rvbWd`~{bgV?(`^qBR+(8p9~6f4fEqwYekK&K5fHSQ zstf};hX;)XY-29W;t#Ni-h3gLgtQC+@&^z=#|UXJIYV=9I0f0#^|M$8umL zbaVmE=i_1!O+j{O!6F#UnENVbEf`iXY?4MeIO#=sJo+M_y`;!A$M~KBZ9DFgQ3m5@o$ap&Nn6nYzW_`i@3&uKy(B@*wEK^+522h#Z7&T!8`>cJ& zn*u2)59C@{AcGT2xKgJ8v5sWs{2-1?1D7mJ%EEffIN2ipjaQhAiwH4&Qzi$go#IFV zF4-gS7&4T32-j8{?Aj@O&qb!T!F!ffK-)Y{1Xh z)@KfEJ~KBgWq}!~<&|llB zRJ(tH#`g(f_p|2zWS6Vy;Ig%J>g;GMeD_Tc$L$9y;$!ZvI9AP#H_Kbhn$)*puJuWk z^H1(pRJPrZ)$?(1F2TTZ07HkEH)n)mMr?fiF+bIg6moH{vcnC0nDzCSnF+M}uOu3frX zw<|L@ZKVH?!v}9tt`DnK?ee11dqq1}L zk+UzKvF5G&FzR&a@?@Zvh7 zuLkYtJ0^(x!Cd2EdiI74j|<-6H6ka{m*K6&^9NsiMZ)tF;){C7<>i(%qe#m`0 z23>eBF7N3)Z9kvhOZwF9OxhP38g$flX>Io4R5H7dx_zL_K<|b9c;TFWY@eLxdyzQ~ zSr3&jcu#x#jWO0M#N2yaeBwc(?;f&v>G<-B8s)q?L(>J9!<=&J-LiXaJ-BR5AHfjU z+Ie-3bz^4!_{dFfc*)^G*9I23=&Z;$yqD5v*!_Rp=cX6z)LDcy82!svuz%++Ezgj$ z=N9JPH|lR&)Xd-2$5GR1)z+0(*}>tz?w>zkqI1<l4%TjCHQUCMX6TB>YBYTxIv@d3Bt>jQ&S-m@?VY+|af+-jCv^9RJy)7ap{kg2^ z)^Xm^p-yBydfK4$_EG#FA~VsOHJ4K_P3%|L_q|F`;n#ZC%5C}FcdoNHa3_U)J#SoE zd6wpyVOQMl%v=(yOpP*GQXOlpO^$Y)y?v>Y#X?3>5u2Xn@*vQPCtINRPds?zV`&~u(2Mx?FCt2t?~Lg4INc4TIW z;o6k__wC-T7V3H0m0zEEXg_<8D0mrvtb0ktcF!SmGH2v%^YWbKN1k|aP6-j-a$s;vitZ1mOy2AVB85}l`GO$@%8)&d+a%^M`z!{$l?O_gT*$M8Eo3x#`wr-4NcDN56!Zzj-atF}y%N>un>+ z2uSmMcAMksUSn;)WWbsFcj3CPEo#qd9N3#WU=Q2Gnr@@D(_+=f{qdx6 zTG-5*JDP{gRD0(H2ushDjM#88u(!*?2%F&!XG*p51{eKUwAY;zP!P#+zOc)zC_ii4 ztdRM0Ru}wv_m%csJM3Sg)2sTYTPLJBV9pyedh7|Alq9KZmzxm ztKCV4Ki!MJuFJ7{tYP}TP`}D#y4H(fBZnpBpE1!o+)$may0CJR>W1w%lZ_ox8qQc) zuqQ?@8oN*9^E;1&*wX?Eh0Ho&i9GDZ(ylqt(Wrn+J?YOh?&La2|2bWH*Ssk z1F`y)Q)7{-#@$e@7vLLo-N0tU(+eLC1WvMj8eDg?ukkd`GsVkdE)AX?;xsV&(MdDg znWAIP0TuV0f^!=x&jmew6&D>-7(3_5h4VIF{oxdSVPHmHAu{;*QQ~sr7ROD#FR$nO z-I4HI*XgDWJrzsMU3jbN&65U|VgGhUi%))KI@MvdD?g`-pP+e1t4#M$Ss1%SbgE`o zaP%yX)%7Q;Hu3weTdr1;{E-t`WN5VV=Fk{7EAXCjn9QE)%u@}t{PMx-!@qJhA zi!4Fxf-n`)&xhYw`0To+wtiwzN_^qE5v%m{V}^2bW6V9T|Nc#~^V+i06=?Oo*?D`{ zzh3)TP`$&#)oas&e`=oAFV>!)|FF_1b8hknGZT*Pr6zqPrHYk{UIhBX`i3>qM`Mxd zfF@;~vB)N_vGRDOiKam2Z8?=2!JVj^PpX6qQ`##89MYW diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_20250429145946675.log.1_3-120-384 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.files-0000-0_20250429145946675.log.1_3-120-384 deleted file mode 100644 index 8b1fe5425d255063bab45434ceb515c791f904ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14483 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 SMBsk{0Wf867__q{CjA?ss2-*O diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.hoodie_partition_metadata b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.hoodie_partition_metadata deleted file mode 100644 index dd262cf6908e3..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/.hoodie_partition_metadata +++ /dev/null @@ -1,4 +0,0 @@ -#partition metadata -#Tue Apr 29 14:59:39 UTC 2025 -commitTime=00000000000000000 -partitionDepth=1 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/files-0000-0_0-28-69_20250429145941472.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/files-0000-0_0-28-69_20250429145941472.hfile deleted file mode 100644 index 8c2fab87878dd853312eefa9f118e4f5de3313d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6993 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 Fe*k^cpD6$U diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/files-0000-0_12-104-302_20250429145946737.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/files/files-0000-0_12-104-302_20250429145946737.hfile deleted file mode 100644 index 8856fa4bbfcf37c262af94f3fc76ba645c101a8b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7419 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 Jz&|CZ{{{BMZIl22 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.hoodie_partition_metadata b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.hoodie_partition_metadata deleted file mode 100644 index 2412b36db19f8..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.hoodie_partition_metadata +++ /dev/null @@ -1,4 +0,0 @@ -#partition metadata -#Tue Apr 29 14:59:43 UTC 2025 -commitTime=20250429145938324 -partitionDepth=1 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_00000000000000003.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_00000000000000003.log.1_0-0-0 deleted file mode 100644 index 1206af68cd60adc1d9f89f7f76e9c360e5bda524..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXuudG3Iv=$%nZaJ4RGKA0RN!{PXGV_ diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_20250429145938324.log.1_4-57-133 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_20250429145938324.log.1_4-57-133 deleted file mode 100644 index b03743b5305d5225e1caca0f1c98ee02c5c6a13c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14691 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 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_20250429145946675.log.1_2-120-383 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/.partition-stats-0000-0_20250429145946675.log.1_2-120-383 deleted file mode 100644 index 0104ebf34e545f573abca3cc699155c465967d4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14753 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 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/partition-stats-0000-0_11-104-301_20250429145946737.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/partition_stats/partition-stats-0000-0_11-104-301_20250429145946737.hfile deleted file mode 100644 index a03f32fe54ed0c443de2e81cb140241ce02a0f09..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8858 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 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0005-0_00000000000000002.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0005-0_00000000000000002.log.1_0-0-0 deleted file mode 100644 index b6c72b73252e9bbefcb225811cfeb2b5e506a88d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut?03Iv=$%nZaJ4RGKA0RMvpP5=M^ diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0005-0_20250429145938324.log.1_0-57-129 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0005-0_20250429145938324.log.1_0-57-129 deleted file mode 100644 index c6f2e736ab6ac6aeb345db31034aa6816492f47d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14310 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 w2Z0_0dJyPApa+2-1bPtYL7)eL9t3(2=s}Vmj{ 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 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0008-0_00000000000000002.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0008-0_00000000000000002.log.1_0-0-0 deleted file mode 100644 index b6c72b73252e9bbefcb225811cfeb2b5e506a88d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut?03Iv=$%nZaJ4RGKA0RMvpP5=M^ diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0009-0_00000000000000002.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/.record-index-0009-0_00000000000000002.log.1_0-0-0 deleted file mode 100644 index b6c72b73252e9bbefcb225811cfeb2b5e506a88d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut?03Iv=$%nZaJ4RGKA0RMvpP5=M^ diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/record-index-0004-0_4-104-294_20250429145946737.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/record_index/record-index-0004-0_4-104-294_20250429145946737.hfile deleted file mode 100644 index 2727a2bf20bcd3bb2fcb56f520469f97756cea8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7040 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 JfcZCqiGnlxuDY(@CM+ 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 T0yF|N0yF~uM*`HJ6X1UVAWFxN diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.hoodie_partition_metadata b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.hoodie_partition_metadata deleted file mode 100644 index db3bc46b51ee2..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.hoodie_partition_metadata +++ /dev/null @@ -1,4 +0,0 @@ -#partition metadata -#Tue Apr 29 14:59:45 UTC 2025 -commitTime=00000000000000004 -partitionDepth=1 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0000-0_00000000000000004.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0000-0_00000000000000004.log.1_0-0-0 deleted file mode 100644 index 0c17a367d8e6cac128f20e82fa4cf415d57f135a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut#{3Iv=$%nZaJ4RGKA0RO)QPyhe` diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0001-0_00000000000000004.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0001-0_00000000000000004.log.1_0-0-0 deleted file mode 100644 index 0c17a367d8e6cac128f20e82fa4cf415d57f135a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut#{3Iv=$%nZaJ4RGKA0RO)QPyhe` diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0001-0_20250429145946675.log.1_6-120-387 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0001-0_20250429145946675.log.1_6-120-387 deleted file mode 100644 index 267f13f56a4b64e00bbcb7955398891aeaf40d93..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8107 zcmds6-EP}96z;OUz@DI-T3{RCI!>B&Xm*v_qE?jijQ)SER3gP2VR*s~KdC>}V;<8I zRa~?=K959uR3@^`FALSqR3cJ{NmPs_hs?=knqP{9O{5vgoSBhem1K6t2dTgdLn+ck zM+fh2Di!)8t3y9lStd>2NGR6w`o4?uGNpaADP(>Ty{~qpt;LX+sfi9~$+Wdho)&-Q z>Rtr8Gxk4->w6J5=7o_)s=PnuW^^wihcXp?>)FpSVEuprINkxR$h!Yee#zVZtAps& zIcHjPf`wb9L?m-V4zpM}0}z=ST6AO{cOE`bO#mH5Uuz?>3PKAO3c6){jE9#zEd`Jj zzHY|)D{RoqhXjp9OltY}41`gt0KH28Q#`8lCnf7jOWhTzFoFWi2i!oZRPa2!epZx% zNjkpNjNWG>uGv6{oFSs@yVLj6Ml**Xc%gE`Wv-dTIf{%Em>3_Z(y#z7&3K;JjdVRO zDcZF#b>)vzr7~E>h+?(Ln{8VY6%O9Tj_$w%+K4`4Cmb3_NHvx%dSMPk!L92cv2vDG zq}qzau^7ZvKQ+;fHasH)IhTFXM!g(Da>If+HW|UC*2@9q6L>l<1P4I2%Q0L4pwu95 z?cy8|l!*q{2B5z4JOi2Y;+oM4#*2bq*M+SC#W~}M+&~s$NG97Jh-{ehiwI~8fU9u9 zdU+zQC<^Mn1fEsFc$zXom&csX1Eq$qjn4tgnEQoF%Pc=N+~{hjV2COc1n)E>uqG-P zZ-&6wZp7d+Bejw7-SDI6{DsnFg^UFq)`4O$9y}`;k+U_^WF+H}!^eU)jE~2ubZ%dg zf{sx|*2KU|f!52-Y9*2JHlZLT(njTuk*Zc} zM+t2c>e)ousNbtp@iojhq-C4X&Tp@O0x*kUG{t1g&DJx{xtXH*g$VMmMV|Vwv%DwaL3~;Rclr zws$~jMcyuFt`AL|0-)Y85`ol2&<9UDX!Kw^be%i<)5epYp=^62<3gIT5 zOz*9hZb%y%ErepUQEhEh!7l`(IR)W1k@^GPTn0WX{XEBn4Q#7{_4RiuYj2@p`lxN! z=s|tkVdIc3??GqNJ*m&+#mF4NZw*tHwx*oIUG27jiI7}xH&Je!dt%49 zR>aZ?R~Qi8V-I;EhN7^w#QodO+5O4{3bmMlkS%of#m{6ygaoJeq|vHVb&@w%H+#Wnw#Q z@YB672wDrK3?#Eo_Y_QiQW@J#w|k&fH|tMP7}^0fOjq1N1#Je>c2$``&Pm8w@Xd~o ztS&l(h)yDV9>W@Vc;`%P&rY4GJr7mR=f>saF1 zX|rEv`eOb?TvwyEZp$sJuURl?9in)C&;x_AmhYk?1KVaSGYMpc-#|L zMUxe+&-3IQ|8;7U@v+kOrYsm~NpVy&SM>@VqjHM7mh`s}7lkUvHdzasM<_fG)Y3%E&Rc3P`NtYjW%fZkE zh<=P{C0?l8c7-9|PyG%0&-nW_exGh_J>Knf+MUNTIoNH{)c%0)ZtaGR`xX&>nOybJ O|Ha}PFTnnJ`0s!I2f*C` diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0002-0_00000000000000004.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0002-0_00000000000000004.log.1_0-0-0 deleted file mode 100644 index 0c17a367d8e6cac128f20e82fa4cf415d57f135a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut#{3Iv=$%nZaJ4RGKA0RO)QPyhe` diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0002-0_20250429145946675.log.1_5-120-386 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0002-0_20250429145946675.log.1_5-120-386 deleted file mode 100644 index 3e5ea3ab9d58897a6ed3cf6629b7521c830fa1e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 14281 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 N=IxCmcb47h{{XGu!yy0w diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0003-0_00000000000000004.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0003-0_00000000000000004.log.1_0-0-0 deleted file mode 100644 index 0c17a367d8e6cac128f20e82fa4cf415d57f135a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut#{3Iv=$%nZaJ4RGKA0RO)QPyhe` diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0004-0_00000000000000004.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0004-0_00000000000000004.log.1_0-0-0 deleted file mode 100644 index 0c17a367d8e6cac128f20e82fa4cf415d57f135a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut#{3Iv=$%nZaJ4RGKA0RO)QPyhe` diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0004-0_20250429145946675.log.1_4-120-385 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0004-0_20250429145946675.log.1_4-120-385 deleted file mode 100644 index 325a9b386df6cba2d393b07b665763b4018e33c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22389 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 E3sK6j3IG5A diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0009-0_00000000000000004.log.1_0-0-0 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0009-0_00000000000000004.log.1_0-0-0 deleted file mode 100644 index 0c17a367d8e6cac128f20e82fa4cf415d57f135a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80 ocmY%P2zBvPW`F=EAjOD;L85{NXut#{3Iv=$%nZaJ4RGKA0RO)QPyhe` diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0009-0_20250429145946675.log.1_9-120-390 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/.secondary-index-idx-price-0009-0_20250429145946675.log.1_9-120-390 deleted file mode 100644 index 67102c23a2c6e5d8bb4e9f2ae2f00329547711cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8107 zcmds6+in{-5KZ0wK))dDCO}(2k>y*8xKDAEAOf7W@TGZ31A*G5EH=AKb;-5t8vc|% z^+$V#i|8;aM68M=YDGEE=>OMBB~rW*h9}(clloIV<}oc% z#YLOr^GLKuWg^@BvQX_zB_f5GM8#P0oH@Bn^GlJii8LdbGcyvblFZKdAQgCFC`Fp+ z=p-e^JdiHY+SU+F@j(0#SvhM$rU-Gv9>M%NW z&bh5Q!NRRlB9gfwhgqzg0fG_}#=}dVmIBBM zUpHg@6*lPQLxRRUCbj%~3c@H=fL^8lDIQh&lah6%rS6JU7(oH%18$&HDtI1VKPyVX zBpqLBM(?u`*K8m}&Ja=d-P`xKjb;u(@IvK=%Um;wa}*gTFfl$*rC|YFn(;ib8|ivn zQnYJf>dGIbN@cK$5yfhgH`}%*Djd9v9o>Nkv=M#8PB=7+&~s$NG97Jh-{ehiwI~8fU9u9 zdU+zQC<^Mn1fEsFc$zXom&csX1Eq$qjn4tgnEQoF%Pc=N+~{hjV2COc1n)E>uqG-P zZ;HU!Zp7d+Bejw7V)#*X{z7T8LdKj9>p(FW51ti_$l01{GLrGg;bTr4#>eASI=3%L za_*gb)Xo{~-t^04{yXvUa@*bY-;pEAw*?L_ir}XBe9^f{sx|*2KU|f!52-Y9*2JHlZLT(njTuk*Zc} zM+t2c>e)ousNbtp@iojhq-C4X&Tp@O0x*kUG{t1g&DJx{xtXH*g$VMmMV|Vwv%DwaL3~;Rclr zws$~jMcyuFt`AL|0-)Y85`ol2(1&{+GAls`4QWH8g;0z(s;!MG_=R9Jry$%WQh&gk%fM%)pXZpcfo(OgzWz>S?JYD+AGPfo zJ*aOxY#g%XJ?M10C-s@U7?~sZtzpXYb|f%;M8}B{BwCSeL?3f|z||aHr$&=e5R)*p z6p+TyyynUdswxN!d8!5IE`X+LOQ#L67d34qKeq{XeUWXjtKH@>5t8fOCd!R-PwW`i zidZ_~3In2h>>*FYP!yIJ$?jnX*HqG1PF-|tlt*Y`17@lF?j^6`pCf4~FdL(Jy7dTe zu&4WMfVbSB4Gp)IMgAUCOn-jf>yoQ5HEXj!^5@Kc;T}(y6X1~~e z++#n?>eupn9IFYb8-{My2|v;fuSkb#OH$>AcD#LZV+GMX<+i=j9A5nT)=1UlOEm_W zY~B!*_CvV3F;yXm^*}B(Js@kthcv!&BN%wX&J2)e3h@LP9?e1-n>jpm+w3`wWnw#Q z@YB672wHQd3?#Eo_Y_QiQW@J#w|k&fH|tMP7}^0fOjj(Rf;IzbyQ)ke=OpAT_-4mP zR+s+q;fN3{_yqsaolq6T4Y7j}ISps2mYF-{ovPsFSkYJxD=E-3nWj>MO_3dDP()`XAO$YT$apRv$9Q_{id{*H289*3r4_#bu97h zwArsyeKG$cuB%a7x8;`A*UTBT@|#nW7;K?`IxR@y334qJ$T)Es`=9{V6>iQC9{0pm z(PTyIvphM&f1TQ7e5|y+DGNqgQXJLHRlP#TsGQ=iCH*bLMWM>EP1b^I3H^Btde?2% zgD>HCnk!mjprN)S4BT6MD91Be+PlZ)1%ep?8Gz5SYZ|W^ZrohT0Ip<#Ce??E?^38C zq05@(1>UK}C~gBR<9%w~Fe_zg>99swH*?G7%DP3@T!A$zjeT9U%4{wq>GGp)IT*SC z(T@?W#0z!Xt}x{LTYrQ8GyZ;!-@UD^$2*;!cIUB74)Xri%|{aT}lsVv<>k_kS(jqbgREC8Uzm;>3Omm%9DL)AaKmm$jPtNAG{lw?|CK3}f%r zG#S`8Z-COjGU{vvrZM(L0A?-2{7|7`X9!j3^o^8TjBQmHXjV0#-Y>(hWn3 z86t3M>w&@HVA)(58@=Pigt}6j1U=5>Ein=sVC|$oEXOFKI*m;DTiwG9mjFW?To&Y1w!J0w@RBN91JcBCEL44>s43aeM+JL%w#153_3GTmk@QES zb@$SvbkBbh@Bjlp3RQw zeb!?b5%79$<#_kCxi_zehKP3;iIXdV<5N!pHy#dLc;&Zuy#W+I7j-Y=t99e;k%Q|N z;FO1V?fR}?nlYo|YF~!0-47f&CXzo_9FBh)X@k$-j4x-`_bcBtovdz~{UGP78M$Uj zw)&}3Veg|^JyG1bWFD=qRi{Y_xxl{n%RB=G1*01q8_T~d)I|h5mhz@?z5l&HbF=b7 zt!#f=94NBaBl*gRG_LA|{_7V3=E$Xi=C+NtPqtd;w$6vy^^b)v7YgO7^q=Kx8QXep zLCuFLqaDkzYFjqszLPwH1^qH#S8PWwJ38IsPpe?(J}J7(@dL>q#%KEq2QxK0N4Z zo}@@e4Xw2D*W!_hze`Q%?LRBZK835|2@y*=GT^X#mC}%OTj$1}j_Rx4?I&`0r0tx` z^FD7GDR^rTgUx1#M9&<9d0Lm1w2`|WMsK9NNORFot&%A6Fa=R>NEubbDfBC+1s{-N z7Z#(}l`N0Fm~@Eqp&fUXoFZ6!`ZZ`F602Uj8nGbTk^)~Utn*R2j(ul3z(x5i$Y=Sb zIEN>>y$%HnOHhJ{dOE|26&z<}!o8~3RGrbY($T7v+ z*s^?qA^)_PulC>7C}`L65ydeQq{VoR`mtoxJZ=u>7j z9KD0%$zE$pF|l;T&vodHXtN;|VI42l2TJGZ*YaI8oHQ<=+q?LA5Z#$c6*U6mP?`y^ z(C}=@A!br9rm%xuk2! zHy(#4x^VQbW7+GHBRrq1L^>4FL=6=iUWY2(2<^q;t4$)#Aj7!XpT<-CusSV*U)cvI^j)JFfTH(|uB_eu)*$eSxZkii4U(*bx)L_6ZFfrN*A9HVr|@;{7;|;{ zUD)-3lrrDAreziflXjEJoZ4Flssg3Dd$oGigrP?yFEl6$7ssJgS>t>!s!nubRw&?= zV~9llT=(#Mw#u6us)^>Fb)iX@!`Dhrm4;G0bh_ap}L|oK;H`#~D@l>oHhWyWUYY672FD&jT}* zmsX$%7EVFb9ya6ONNFD*rif{x{gIz2?ge=(7`C-dd(f1MLz z^K`E13G3Hnn8vCMFh^UrF$P5YwYHOlT-O^ zFCk{X9Fl{&)Z&aH91P?_9D^1!;~EN9&*B{T^_7#*1?t&GffG0UkP!0iIpNTe@(eG_ zdY`N|6}hbJTn_I|Vg2X2d7YizQG4#2@pGxp4AaI3U9ive(hByRZoNu4HW`}MK^B>t z(&jVrFioEfQCO08jP@@vth}z7F1TPPIZhXObw!qIwUjl&tlyBGz(MRr!V#{}ScOTV zNEga4Fs4ugQc}IDjEg;cfH^MAR;;fx3buNXNyakLSC_RSAqrP z;3-MM2#_M^C`b!r0GI)1QFwwE(j~yf&D#U%9pa8fV)4kJU_8Oa%L8eE$Gc-a476Q> zJdABl;r#+!2ri5z3~2jlz!W9}Oa_c9St8Pr8Z{7vL<0#4sDNOWCdC5M5kA00 z1VoB}bPy3iL8Yw}DN;fWMG!@#e1YASUB9#E?9cB<=A8T9nYlA_pLy>6anE`6b*yxB zPa4Sp0C0^pyf^+34gk<**+9mD2%gQEC5KuR`JNsT&~F2oTT%d-6DU!#c~^MPZG?JM^d+l#xkM zU#3Pvr03HCZjX-^${$a-O_X@m5Z7Rx>FTKq4F&7fbbiXkTL^E~#+OSFbH)Z+IPn0$ z;RS$Wg}=keaeEu*On;$C{So1iwx6dg(v^;Mn}f;v!-8pvIK~ppki=u&yU;kA414*0 z$U$iG%-qGfGe!unv(59DeYN7Li`czOBi>j(@wn3aO0n@H^)*|q0~Bs~C{VBiul~FF zZ@##D=l>@f=Nsb5%AK!{)6iEC71l&XW&E4KR*EnxS|4s8blEKMx zNM>bjPTz#CoFKqDY(O>ow~TMj?-Xz3B-gfUqBUj<{g!9>_$SxRbl?eM7yNI90qx|% zv)fsJYRj>|_x`87Ipe&Tti6|`5YR0zMe!e+RA=lq{A(VoUs>9pB(Dc5{+|9VVm|xt zt$thBR_HeflbaUZeK~ro4WP9a1_fFl{sCn>a!bR$>ld4Ui$5eB3kJM%NjVsOTMJWD zD<#(AG1id%?p6X;+qV*rqX+Jx?$Skr!9HM_M1(b3-8-y2+d2%rYiR>U=LXssMJlqa zBA4bX<^EDvj^z?z4VG~J#Db{3sbT(F7YN+5YuCw+vS{kUBCTJEcETb8=t@^k-ORd> zvC@pjoHW3gpjjXxRMz>seg_hAYr9y#ojF;|K!DF8IFg$`qe}9it=vIvYDzJ;#DbY) zBeEo^ICdt(>fWQbm!|t}SN4xwRJa)?<-c=o72(g@!W>AMbNWg;hBAB=O*?jc@l{J{ zQ4vic>Bn0e>xBzM#>o8{o4}6eZ5Url@9Zb_H>ooNJv}|%`3nY&S&xzNI*+eqT~`O( z_*beyp|k!4(W|Fwa{Hhw7T{au`F5SDK}@p>Qfa%-Qm#jznt1Z;uRi2we%9pV^`Hlk zpWPm;FTQk*t?aOQ>%a2I0Tye@Y_4~&Y=gW@!E;3_*Vue%Iw7v&7oTUMP8IATdjT;zj9Xejr_Vq)rk-ACJjQK zeT!>Sc}IyJ!VlfhxhCxrG(yd5@fkKZ2)WKXeE35CAT~Zkt$8S2IEk9h1JSxmmrCS; zzO;?Ljtw^(64jHbRZ!#zpVU|$D@G&vy}e1a9HmBw1lN%Q#PemLGl3oN1M7k>j>9&U{EM#$P=2KbiLZalfdYqKQl-lydF9SKi*2XsRXb zhssaLYlxJ)Y)j$EK{<;0_I;4ka%mM14f&~*cve8B(j{<$^aK^c-y3b2+xTESpV;$7 ziGxx8D5_*H{t74oql>RhDGBPuMB2PCl}s`!J3OL^JHsiyVIL&~3Z}S+E9?*{f(Gol z3~RmF+N?v(<-P+6g%A;CaMhf+U+X#D#O7Oc?84^?6()BKiKTa=1VkGc0uD-Ge6wN& z+FeZY;TSc>SYw}cx199j*oRK9?^%RCelFKYh-lxdo!3z>74^G*;<rqD-JHHvvwW7PJ^&+i!lhaAD^>lQ9t&k8?P5W4*MR>(YIhy(VRkKyBc; z$kV8&2!Lt(5mkg!h|S#5Ere@|Bud-vhFr%s`f+?AQfXldho(D=A+k;UgHf>DM}es0 z_ovGe<{a(mCMN3gPWN5B79t4UkWWii;=KI)SyKF%rbIlgM{_EY9KL-1#a+1C^Q%Sa zcQ8*&33V-EmeE;XcgUX^tbF+_Z`!CnD(kGKXpMO7gF5Z(9_{yqsSS0r?V*lq0mDx2 zajL;XW93i}x<`krc7fDIem;r!mzWcY0>x7qzu@^BlWksj&h>|7Ru+mzayi_qIb1|N zAPTnpLDI7=*~08cg^mOzRT@^=zp z&yA)dt?xBhFyf!0kve>;$STjSu&U*x_Tr$bI1r1oDMD{!&$cw!3e4$Lu8 zk2GrXy$I3~bU1Pa@n(b)M~o2Tn$eL=X-FmRb{;1=>4Dl9ZJrPMmTij?j5O=bMUCBm zJ0@HrM}odxdwK3%g?DQC0E#5TZ67M08!EX5tJ0;8;VTbDlJhpWb@ueSxJm**W?bJLHUn%1*bJ~4 XU^BpGfXx7#0X75w2Mn-&l5qYPmKnVJ diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0004-0_14-104-304_20250429145946737.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0004-0_14-104-304_20250429145946737.hfile deleted file mode 100644 index 7c97079db0971a96e70622fadb55e4c37a6a2b62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7029 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 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0004-0_4-100-274_00000000000000004.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0004-0_4-100-274_00000000000000004.hfile deleted file mode 100644 index 1d1169f256a9f746ab4f69a2928c630805ec1ed1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7016 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 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0009-0_22-104-312_20250429145946737.hfile b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/metadata/secondary_index_idx_price/secondary-index-idx-price-0009-0_22-104-312_20250429145946737.hfile deleted file mode 100644 index 5586af8ae964dfa78015209e9c1b1b728c9614e9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7029 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 L?jCfG7gOpV;yh=4 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846.deltacommit.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846.deltacommit.inflight deleted file mode 100644 index c52713f594381cd9e40315a1f10f6e7c291b9c25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3496 zcmcInv5wO~5DgYW6qJY$aD9q|=prGZga9XTx>KA$aY`|-t*hq|x-D0s zFIC{4xB^1+{zl4xVMm4`(`Tq501eC4I0D~nk!sQedY)o)ngpzA6^AlFP8-Jzc@Vp; z%iBz21WGf_r0C1{ifQyT=$Lk<04`mTa1zV`g%Hu=40wX1CjSgd!JHOILAd&TGydGr zMnq%A@znUd1wyP96BAmuo?XEVn#)fu*GtzH!xJ~aF(h2OE#tw0JXnS>0zEyRa)q<> zbdF|1B%zI8@sM0DDJ~_hljuw2sOjj|qgzFG5K+2eUE^A6;8wUjuZ7^Bg050h)$k$D z^^0TXfW`S%PI|U>YrxDDyrM#=E1sTJu*5(qNsOSeSXEWd{Zz!LHju(j+02nPm;QBK zPdZYmB+?X6t7iYqwJ3U$^AY&hb)gti^4JGF6*aS$%gH-bF%fOi115A?*^=n_cpRfH zO75!o5yWWHs34g$_knCm*fytWZeUw$sA71X#Y?!&5B$AaSDL(KO=J(_5z&78*r5)Y z=+02+KBG}!Z~hM9<^XAx2u)^pM0j(z@BJ@Z96@Y>dOnDHo>}pZLh4NiC>TVBa)dh0R3iqdI*65cUG51i9Zd09RdZz=%|g8#*?&dRrYbXSd>+8*#Y_6TjEGc zjv&e?8E>?Ll>vOqsJdlZu10;^$J;%aX;$btrrFT{gc<8s>GbK!h%6&iVE+lsU&uPu z6+3hs4 in;y(FEv0uOyOyuCoNE|(H8rHVokxQUuiNXd!~6@|s*bS$ diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846.deltacommit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846.deltacommit.requested deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846_20250429145945109.deltacommit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145943846_20250429145945109.deltacommit deleted file mode 100644 index 44a94eba5fbfc5e8863e98152f8f6f13868d2687..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4180 zcmcIn&2G~`5Kb+SIFuXW0enNkX>9Uai32SKDp7%w1`bseZR~Mku)SuzjwmP+2ZY3x zcR=FGl^YMhoj2emI54|TOcE!q<0z>VrMo*n-|oyeGtUOE_LSRX%xF0@N8phk_ui}g zG63~ZWnfZfsdrVMc;f#jlv)lPQ_pkw8E|3|PNutIKumFjvSFFv?-7(ok>!-7Vvkzj z;z8R1*9z6ci}y2)0b$(X4)xFJOXhIsaKb}889Q*H`jLx*i9;R|^U%?4uloh~`#QO7H#(?zmDIK!L`GDPvK<@j|7V%_CQO(Wb6DAm;0$t_V`z&JF|e*Q(;0BQed*H`U1{>d18e(qo^urYsoN@D2*b23jW&074U+c7EWwW z;H0i`YwKZ}y#EoWq|0bkRquIZNZQQ!LZb^~S_r)rKUHaJg+ zwtk*Y^|=@d__M$BOc_s@H6yLrrTyooLlsy`?n=En6Gtwr=SyyU~KWR#Cp~{g*n(C)2NJ zjizQ)^uAFsYL%+d(yO&r^`6Zn%FBEC^`8php{>h-&BOojf%{{kvb)4(P)4zRfb@ZW_cRPX>;rR#7t6@{qFP5 KN&9>`rTzh?vtHc* diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145945334.indexing.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145945334.indexing.inflight deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145945334.indexing.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145945334.indexing.requested deleted file mode 100644 index 638a4c955ebb06b700eb812ce3599b71eced691b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 828 zcmb_au};G<5G`KWk-B=WqBf+6W?^jyL?vJlrc&1k%2JzLwGT?c(!$(eY^8Vc@5ZWA+tPn(J4OQx z3=FsQLong-#K# zHQVuVVn{5QL6l$GR8SE7&Po zC$#dhCGQ0jiUQ$c2l`%dtfxJ(G(m$Lc5(65T+b;&+rt$opvfU`fyt zm}3SLNvylSXx6;ipoNey2<<+xm%Ki$Qo)fGYV6}>8&@!eq&n)d^JQ%D$yJ65)(RCt z@w%O!%Cy^FE?5h59~Oj#m$`1^m0>=E_E$eJqD}f1l{;$qK2W~B@b~JxqS_?VA49sQ z96@QIm7P8~&@DtbBMWQJ-@;OW@x4w#PH=q;@9FYQt39i1xY%gFR4W3ZmP;bMXW~rT z82whpX0;i9fq>$%rns~ihFz~$rPO!0Xnec9`F(fa+WXqe{yzMBJc>*sYDD2_JO6`F m9PE5l-X94*8yPE7j99zXK5TW`C;Oellg`0$=O}8tK>80ISc_2r diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145946675.deltacommit.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/.hoodie/timeline/20250429145946675.deltacommit.inflight deleted file mode 100644 index c220106896c9b55922ce0500c23e6b28da729eeb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3920 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 Nf#G5mxLqXOF#bg*G^g}$C5*H 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 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/.06b93bb0-c6c1-4cfa-baf6-2b6716b29514-0_20250429145946675.log.1_2-110-337 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/.06b93bb0-c6c1-4cfa-baf6-2b6716b29514-0_20250429145946675.log.1_2-110-337 deleted file mode 100644 index d00ab2b1ec93c01c597edd513c47c5213a57eee2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1004 zcmb_bPfvp|6rW}H#l(Y0)7=ahsK5e=i3bmwcw2T_mZr32YXpi=4$I=j58!9>6L|82 zSUNOWaP#0uO7kA?_j^CypYi?d?qNJIkM*Ii6MZawfN>25r^rQt>!Zl?gUAoVNwEEB zjW$rNOAcdLaVjeYZCH@JwO0)jIBzl~aJs~$!nv&QPEcJEY9gg%f?xdx&~&Nb8LMGD z-+VLUl>uNX^IRybgwAJoGUl*ovP_$`szkAb3mY;?wH)nYJSAEWjN6bGdmmrTp9^^u z!tLMUC%!%kT}dh>l#m53iCP_nG8GxereXgnplI8^9fP0xi$a;=@2UBpIrreoO6ZyC zWn;2QGJYtbs{5!+b`!EE8I?_;s>99Ofi7OUeReN}PnGp@Wie;)Mx{0?&6`Fa$%5G%_y4EqEV+ M;cRM5^Rhm_0AqnJng9R* diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/.a9d27485-57a8-4561-b21c-ef8ed6221782-0_20250429145946675.log.1_3-110-338 b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_fg_pt_v8_mor/country=US/.a9d27485-57a8-4561-b21c-ef8ed6221782-0_20250429145946675.log.1_3-110-338 deleted file mode 100644 index 7f9f6b8582c17dd08d7889153bef93ea65ade510..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1004 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 Zfz0`>Ppt@oS^fks{kkc*y#I>S{{et7#1#Ml diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_pt_v8_mor.md b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_pt_v8_mor.md new file mode 100644 index 0000000000000..119c8ffdd8e7c --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_pt_v8_mor.md @@ -0,0 +1,56 @@ +## Create script +Revision: 6f65998117a2d1228fc96d36053bd0d394499afe + +```scala +test("Create MOR table with multiple partition fields with multiple types") { + withTempDir { tmp => + val tableName = "hudi_multi_pt_v8_mor" + // Save current session timezone and set to UTC for consistency in test + val originalTimeZone = spark.conf.get("spark.sql.session.timeZone") + spark.conf.set("spark.sql.session.timeZone", "UTC") + + spark.sql( + s""" + |CREATE TABLE $tableName ( + | id INT, + | name STRING, + | price DOUBLE, + | ts LONG, + | -- Partition Fields -- + | part_str STRING, + | part_int INT, + | part_date DATE, + | part_bigint BIGINT, + | part_decimal DECIMAL(10,2), + | part_timestamp TIMESTAMP, + | part_bool BOOLEAN + |) USING hudi + | LOCATION '${tmp.getCanonicalPath}' + | TBLPROPERTIES ( + | primaryKey = 'id,name', + | type = 'mor', + | preCombineField = 'ts' + | ) + | PARTITIONED BY (part_str, part_int, part_date, part_bigint, part_decimal, part_timestamp, part_bool) + """.stripMargin) + + // Configure Hudi properties + spark.sql(s"SET hoodie.parquet.small.file.limit=0") // Write to a new parquet file for each commit + spark.sql(s"SET hoodie.metadata.compact.max.delta.commits=1") + spark.sql(s"SET hoodie.metadata.enable=true") + spark.sql(s"SET hoodie.metadata.index.column.stats.enable=true") + spark.sql(s"SET hoodie.compact.inline.max.delta.commits=9999") // Disable compaction plan trigger + + // Insert data with new partition values + spark.sql(s"INSERT INTO $tableName VALUES(1, 'a1', 100.0, 1000, 'books', 2023, date'2023-01-15', 10000000001L, decimal('123.45'), timestamp'2023-01-15 10:00:00.123', true)") + spark.sql(s"INSERT INTO $tableName VALUES(2, 'a2', 200.0, 1000, 'electronics', 2023, date'2023-03-10', 10000000002L, decimal('50.20'), timestamp'2023-03-10 12:30:00.000', false)") + spark.sql(s"INSERT INTO $tableName VALUES(3, 'a3', 101.0, 1001, 'books', 2024, date'2024-02-20', 10000000003L, decimal('75.00'), timestamp'2024-02-20 08:45:10.456', true)") + spark.sql(s"INSERT INTO $tableName VALUES(4, 'a4', 201.0, 1001, 'electronics', 2023, date'2023-03-10', 10000000002L, decimal('50.20'), timestamp'2023-03-10 12:30:00.000', true)") // Same as record 2 part except boolean + spark.sql(s"INSERT INTO $tableName VALUES(5, 'a5', 300.0, 1002, 'apparel', 2024, date'2024-01-05', 20000000001L, decimal('99.99'), timestamp'2024-01-05 18:00:00.789', false)") + + // Generate logs through updates + spark.sql(s"UPDATE $tableName SET price = price + 2.0 WHERE part_bool = true AND part_str = 'books'") + spark.sql(s"UPDATE $tableName SET price = ROUND(price * 1.02, 2) WHERE part_bigint = 10000000002L") + } +} +``` diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_pt_v8_mor.zip b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_multi_pt_v8_mor.zip new file mode 100644 index 0000000000000000000000000000000000000000..c19c703f6fd0f54314e341a467b5e12a21150a2e GIT binary patch literal 493901 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%0A*8)d_E4j)+4*uKsaEn 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

$sXBEK8t0bsD(H*Nra6Ne#uipnLV`WhX$04wU) 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%0Do*&C_@M3ec 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�o-Ad7RDA9#lKWL%(( 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.m~;<})O&IYlj`;Uj_LZCzYJ`b$&i0J#R~H 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∋9-s#(*#E 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

    &z4e;2cJt~m5g-> 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 SjO}3AVZt{FiQb3dAO9aRj) literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/README.md b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow.md similarity index 100% rename from hudi-trino-plugin/src/test/resources/README.md rename to hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow.md diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow.zip b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow.zip new file mode 100644 index 0000000000000000000000000000000000000000..019860e88cff39513a039345405a54b53806b879 GIT binary patch literal 5980 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 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.commit b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.commit deleted file mode 100644 index 9fc9470ff41a2..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.commit +++ /dev/null @@ -1,37 +0,0 @@ -{ - "partitionToWriteStats" : { - "" : [ { - "fileId" : "05b0f4ec-00fb-49f2-a1e2-7f510f3da93b-0", - "path" : "05b0f4ec-00fb-49f2-a1e2-7f510f3da93b-0_0-27-28_20231127051653361.parquet", - "prevCommit" : "null", - "numWrites" : 2, - "numDeletes" : 0, - "numUpdateWrites" : 0, - "numInserts" : 2, - "totalWriteBytes" : 435338, - "totalWriteErrors" : 0, - "tempPath" : null, - "partitionPath" : "", - "totalLogRecords" : 0, - "totalLogFilesCompacted" : 0, - "totalLogSizeCompacted" : 0, - "totalUpdatedRecordsCompacted" : 0, - "totalLogBlocks" : 0, - "totalCorruptLogBlock" : 0, - "totalRollbackBlocks" : 0, - "fileSizeInBytes" : 435338, - "minEventTime" : null, - "maxEventTime" : null, - "runtimeStats" : { - "totalScanTime" : 0, - "totalUpsertTime" : 0, - "totalCreateTime" : 856 - } - } ] - }, - "compacted" : false, - "extraMetadata" : { - "schema" : "{\"type\":\"record\",\"name\":\"hudi_non_part_cow_record\",\"namespace\":\"hoodie.hudi_non_part_cow\",\"fields\":[{\"name\":\"id\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"name\",\"type\":[\"null\",\"string\"],\"default\":null},{\"name\":\"ts\",\"type\":[\"null\",\"long\"],\"default\":null},{\"name\":\"dt\",\"type\":[\"null\",\"string\"],\"default\":null},{\"name\":\"hh\",\"type\":[\"null\",\"string\"],\"default\":null}]}" - }, - "operationType" : "UPSERT" -} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.commit.requested b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.commit.requested deleted file mode 100644 index e69de29bb2d1d..0000000000000 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.inflight b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.inflight deleted file mode 100644 index dad745d91bd72..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/20231127051653361.inflight +++ /dev/null @@ -1,31 +0,0 @@ -{ - "partitionToWriteStats" : { - "" : [ { - "fileId" : "", - "path" : null, - "prevCommit" : "null", - "numWrites" : 0, - "numDeletes" : 0, - "numUpdateWrites" : 0, - "numInserts" : 2, - "totalWriteBytes" : 0, - "totalWriteErrors" : 0, - "tempPath" : null, - "partitionPath" : null, - "totalLogRecords" : 0, - "totalLogFilesCompacted" : 0, - "totalLogSizeCompacted" : 0, - "totalUpdatedRecordsCompacted" : 0, - "totalLogBlocks" : 0, - "totalCorruptLogBlock" : 0, - "totalRollbackBlocks" : 0, - "fileSizeInBytes" : 0, - "minEventTime" : null, - "maxEventTime" : null, - "runtimeStats" : null - } ] - }, - "compacted" : false, - "extraMetadata" : { }, - "operationType" : "UPSERT" -} \ No newline at end of file diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/hoodie.properties b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/hoodie.properties deleted file mode 100644 index aa323696b299e..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie/hoodie.properties +++ /dev/null @@ -1,17 +0,0 @@ -#Updated at 2023-11-27T05:16:58.380652Z -#Mon Nov 27 05:16:58 UTC 2023 -hoodie.table.type=COPY_ON_WRITE -hoodie.table.metadata.partitions=files -hoodie.table.precombine.field=ts -hoodie.archivelog.folder=archived -hoodie.table.create.schema={"type"\:"record","name"\:"hudi_non_part_cow_record","namespace"\:"hoodie.hudi_non_part_cow","fields"\:[{"name"\:"_hoodie_commit_time","type"\:["string","null"]},{"name"\:"_hoodie_commit_seqno","type"\:["string","null"]},{"name"\:"_hoodie_record_key","type"\:["string","null"]},{"name"\:"_hoodie_partition_path","type"\:["string","null"]},{"name"\:"_hoodie_file_name","type"\:["string","null"]},{"name"\:"id","type"\:["long","null"]},{"name"\:"name","type"\:["string","null"]},{"name"\:"ts","type"\:["long","null"]},{"name"\:"dt","type"\:["string","null"]},{"name"\:"hh","type"\:["string","null"]}]} -hoodie.timeline.layout.version=1 -hoodie.table.checksum=2968816715 -hoodie.datasource.write.drop.partition.columns=false -hoodie.table.recordkey.fields=id -hoodie.table.name=hudi_non_part_cow -hoodie.datasource.write.hive_style_partitioning=true -hoodie.table.keygenerator.class=org.apache.hudi.keygen.NonpartitionedKeyGenerator -hoodie.database.name=default -hoodie.datasource.write.partitionpath.urlencode=false -hoodie.table.version=5 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie_partition_metadata b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie_partition_metadata deleted file mode 100644 index e9de1b96c3ff3..0000000000000 --- a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/.hoodie_partition_metadata +++ /dev/null @@ -1,4 +0,0 @@ -#partition metadata -#Mon Nov 27 05:16:59 UTC 2023 -commitTime=20231127051653361 -partitionDepth=0 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/05b0f4ec-00fb-49f2-a1e2-7f510f3da93b-0_0-27-28_20231127051653361.parquet b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_non_part_cow/05b0f4ec-00fb-49f2-a1e2-7f510f3da93b-0_0-27-28_20231127051653361.parquet deleted file mode 100644 index c8368bd7c33cdbd5bedde73daab1af052e537fb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 435338 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 Ry2PL8-Ct^pZX3Bh|NkKDp;Q0> diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_stock_ticks_cow.zip b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_stock_ticks_cow.zip new file mode 100644 index 0000000000000000000000000000000000000000..55381fd8ce6e9274d44259219f05407a2b5da0e0 GIT binary patch literal 45382 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⪙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 VW(5v;gNFI_7&;{x7?w{5@c^9)h8+L^ literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_stock_ticks_mor.zip b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_stock_ticks_mor.zip new file mode 100644 index 0000000000000000000000000000000000000000..af79a583ccf6ed8637fdac9433081251c7247c50 GIT binary patch literal 62909 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 h{LirWWc|nG{qM98zz yyyy-mm-dd) +- Hive style partitioning disabled +- Revision: 444cac26cb1077fd2b7deefc7b3713bacb270f9c + +```scala +test("Create MOR table with timestamp keygen partition field (EPOCHMILLISECONDS -> yyyy-mm-dd hh)") { +withTempDir { tmp => +val tableName = "hudi_timestamp_keygen_pt_epoch_to_yyyy_mm_dd_hh_v8_mor" + + spark.sql( + s""" + |CREATE TABLE $tableName ( + | id INT, + | name STRING, + | price DOUBLE, + | ts LONG, + | -- Partition Source Fields -- + | partition_field bigint + |) USING hudi + | LOCATION '${tmp.getCanonicalPath}' + | TBLPROPERTIES ( + | primaryKey = 'id', + | type = 'mor', + | preCombineField = 'ts', + | -- Hive style partitioning needs to be disabled for timestamp keygen to work -- + | hoodie.datasource.write.hive_style_partitioning = 'false', + | -- Timestamp Keygen and Partition Configs -- + | hoodie.table.keygenerator.class = 'org.apache.hudi.keygen.TimestampBasedKeyGenerator', + | hoodie.datasource.write.partitionpath.field = 'partition_field', + | hoodie.keygen.timebased.timestamp.type = 'EPOCHMILLISECONDS', + | hoodie.keygen.timebased.output.dateformat = 'yyyy-MM-dd hh', + | hoodie.keygen.timebased.timezone = 'UTC' + | ) PARTITIONED BY (partition_field) + """.stripMargin) + + // To not trigger compaction scheduling, and compaction + spark.sql(s"set hoodie.compact.inline.max.delta.commits=9999") + spark.sql(s"set hoodie.compact.inline=false") + + // Configure Hudi properties + spark.sql(s"SET hoodie.parquet.small.file.limit=0") // Write to a new parquet file for each commit + spark.sql(s"SET hoodie.metadata.compact.max.delta.commits=1") + spark.sql(s"SET hoodie.metadata.enable=true") + spark.sql(s"SET hoodie.metadata.index.column.stats.enable=true") + + // Insert data with new partition values + spark.sql(s"INSERT INTO $tableName VALUES(1, 'a1', 100.0, 1000, 1749284360000L)") + spark.sql(s"INSERT INTO $tableName VALUES(2, 'a2', 200.0, 1000, 1749204000000L)") + spark.sql(s"INSERT INTO $tableName VALUES(3, 'a3', 101.0, 1001, 1749202000000L)") + spark.sql(s"INSERT INTO $tableName VALUES(4, 'a4', 201.0, 1001, 1749102000000L)") + spark.sql(s"INSERT INTO $tableName VALUES(5, 'a5', 300.0, 1002, 1747102000000L)") + + // Generate logs through updates + spark.sql(s"UPDATE $tableName SET price = ROUND(price * 1.02, 2)") + + spark.sql(s"SELECT * FROM $tableName").show(false) + } +} +``` diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_timestamp_keygen_pt_epoch_to_yyyy_mm_dd_hh_v8_mor.zip b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_timestamp_keygen_pt_epoch_to_yyyy_mm_dd_hh_v8_mor.zip new file mode 100644 index 0000000000000000000000000000000000000000..9726c3b40270dc703f71dbb1b6ae052594034c12 GIT binary patch literal 327289 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

    #zrT^tWQ^3qL}-7BF#5qV2sy!0qzlv? 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

    ;2xFj{R+iOpLjnH53 zBF3-0Sr9BPHFFSSpt~}js4h^+|dYhd@+VbVn#|~bF8}6^P ztd7|;Q6FRCW7B661EaTPn3Kd*1Y0$sA~M_1s0i8aZNKlo_t9%D>l7-dFEaqKKGOii z)y|y1B31lRij4Uce~1&-UVLZ(Bub2=X=4ah9yX1Di$EoU!7C{%tg*NM_b&txM_A(m zm_KCt_^JQ|Wl}t5ew2v>aH)0O=NM;bZNUGglmKMHdgOc42sD|hri?>hBW(R+&GSFt zk#B6VWwkSP=@~VBT6W*TfG7hx>(QyMzH~v&!-oie4i2vV2~M#eL%{g?%TD=vemEA4 z#Zn4_`DF{_F_%pD4!nb>ni@D9?lA{W`+R=E-IR1EKkh~z^ZvbC&(FC0olJqI&YA|m z{SB*cI4aC=rQ#(+R{t~=W|Bd5QRKm*RMg@=r|)tBAvltO3YiQ@W}`_4h}m@i)pi2I zfURD{T`q*y`SXnBoRSOV5Q2lwKnO%%8?pY+qN~WJ*a!d$r{--4HDO9K$BBrswp4@$2&xYe20*!W7cQL%$%Mt z?-{MTVg%$T1Hnij7%mBhJ?{`XFud>h%pAZ5Mq_H8G;|aVd(n7qQre@h?Hx^TFI@!2 zCI6DUSJaz2q#X%`Tbj$`fk-5V`fM;B4K&3uo3*?t)*Ok3Lbe?$SKrmS7K`0zvfS=L zi@P2uEu$uaORgn$i3UTMJVHWBYU3F#qL3UBYB9+SD^ldzj;w<6qS#wn=MJi}BpCIi z*u;3dKA1e6S+UQWI*LZIH3LIPv3q05F`C@$UL!jGw4wW2-W0Z*B3QkP<)L^j4OKRR z&xTr>1C4el-V%+pY>e3(b0~Hwwe-(ZU5qY%?HdbQuZLn^fMWAusU@2YVe$wm7^sK^ z!YtKJ6%CwfomEU;)cWG~xkD1Wltnp6Gh~l=_^Op1M{dFGp2zL-nZY|=GISJ=Tb=Rk z4Jz3&g^`G;=)B&n;ZVNS5hlKlTe^3dO4si;gh^wnnnRMQ@(tR~81%@irVi=x=2=GM fh(V5h+IU>Z7=wzj#1O;5@%ypOvfk^&ng;8Cz#^M9 literal 0 HcmV?d00001 diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_timestamp_keygen_pt_scalar_to_yyyy_mm_dd_hh_v8_mor.md b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_timestamp_keygen_pt_scalar_to_yyyy_mm_dd_hh_v8_mor.md new file mode 100644 index 0000000000000..f547b378067f3 --- /dev/null +++ b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_timestamp_keygen_pt_scalar_to_yyyy_mm_dd_hh_v8_mor.md @@ -0,0 +1,64 @@ +## Create script + +Structure of table: +- MOR table with MDT enabled +- Timestamp key generator used (SCALAR -> yyyy-mm-dd) +- Hive style partitioning disabled +- Revision: 444cac26cb1077fd2b7deefc7b3713bacb270f9c + +```scala +test("Create MOR table with timestamp keygen partition field (SCALAR -> yyyy-mm-dd hh)") { + withTempDir { tmp => + val tableName = "hudi_timestamp_keygen_pt_scalar_to_yyyy_mm_dd_hh_v8_mor" + + spark.sql( + s""" + |CREATE TABLE $tableName ( + | id INT, + | name STRING, + | price DOUBLE, + | ts LONG, + | -- Partition Source Fields -- + | partition_field bigint + |) USING hudi + | LOCATION '${tmp.getCanonicalPath}' + | TBLPROPERTIES ( + | primaryKey = 'id', + | type = 'mor', + | preCombineField = 'ts', + | -- Hive style partitioning needs to be disabled for timestamp keygen to work -- + | hoodie.datasource.write.hive_style_partitioning = 'false', + | -- Timestamp Keygen and Partition Configs -- + | hoodie.table.keygenerator.class = 'org.apache.hudi.keygen.TimestampBasedKeyGenerator', + | hoodie.datasource.write.partitionpath.field = 'part_source', + | hoodie.keygen.timebased.timestamp.type = 'SCALAR', + | hoodie.keygen.timebased.output.dateformat = 'yyyy-MM-dd hh', + | hoodie.keygen.timebased.timezone = 'UTC', + | hoodie.keygen.timebased.timestamp.scalar.time.unit = 'DAYS' + | ) PARTITIONED BY (partition_field) + """.stripMargin) + + // To not trigger compaction scheduling, and compaction + spark.sql(s"set hoodie.compact.inline.max.delta.commits=9999") + spark.sql(s"set hoodie.compact.inline=false") + + // Configure Hudi properties + spark.sql(s"SET hoodie.parquet.small.file.limit=0") // Write to a new parquet file for each commit + spark.sql(s"SET hoodie.metadata.compact.max.delta.commits=1") + spark.sql(s"SET hoodie.metadata.enable=true") + spark.sql(s"SET hoodie.metadata.index.column.stats.enable=true") + + // Insert data with new partition values + spark.sql(s"INSERT INTO $tableName VALUES(1, 'a1', 100.0, 1000, 20000L)") + spark.sql(s"INSERT INTO $tableName VALUES(2, 'a2', 200.0, 1000, 20001L)") + spark.sql(s"INSERT INTO $tableName VALUES(3, 'a3', 101.0, 1001, 20002L)") + spark.sql(s"INSERT INTO $tableName VALUES(4, 'a4', 201.0, 1001, 20003L)") + spark.sql(s"INSERT INTO $tableName VALUES(5, 'a5', 300.0, 1002, 20004L)") + + // Generate logs through updates + spark.sql(s"UPDATE $tableName SET price = ROUND(price * 1.02, 2)") + + spark.sql(s"SELECT * FROM $tableName").show(false) + } +} +``` diff --git a/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_timestamp_keygen_pt_scalar_to_yyyy_mm_dd_hh_v8_mor.zip b/hudi-trino-plugin/src/test/resources/hudi-testing-data/hudi_timestamp_keygen_pt_scalar_to_yyyy_mm_dd_hh_v8_mor.zip new file mode 100644 index 0000000000000000000000000000000000000000..9475e50e67c9cd73d4507193964a4d6a1f9d5eb5 GIT binary patch literal 327962 zcmce;1y~%}vpx)g;10nhxVyUscL?t8?he7--3cDt0t8QR3GNcy-Sr!imF(_M?)SgD zcb=!2o|*2hI;T&`TW>Y85+I;ZK;K`vLux;Ee*9$v!Ui&NG%(e6Fts$achI%8(Ka`9 zH8!-;wsFw5*VnbswbOR6)^-KFv@I>Q4GgqROthWYv@NaeXx}PA0)cp=N}4=xjxNwZ zz@QhvKtP}j43DlQX2Y zN=BEd3izb+efxhO@gL>Wm{?mIm>O!^=-N4$I+$8pX zAfTwfZOUorb#<8;4D}eP^_f}psF~Q9^{91?^!2Fq4e4~5nHUUp4Gq|->9hfAGt;rq zGtx8AGc(h%vN6+GSR2#OYXj~cGdndS8`Jk0at6#!z+Y#mERJ8Iiw>p7xc=Qfffl!z z6M{iPt$95=0+);I@vdpONa}m@O3Nk|#>9BcJ#Z#1A;Sh@_FTT{eNXC~gw6$35T&KWUlf!}@D(emOhnZz!ajE=NZDPIl z$}V=d1*kNT3a=SWquVYoe5~GjP{^G>kRnmG`%zFqPoZ31!K^{lX>%cW!0t;MA`~~Q z-c8(Bl(Z6+Bhh**mm5fL?IV+_)Yh#@CYnM!-{Wqo+_MOTYd*x&(GczvoFumQ&bw~g zONQZY4BKq!P9Qx;eN}7d*BCGe$Y_7ZYX{MHn z(P))74fpl8kL6g6!9F37JO~p+7p`WaEXP;oy8O zKepW9dba6nSl2u~UFQAXN@vSAW6zmq429RFlKkUMSr<5MaDfoNa-iq8sLQ8|Ue%h7 zWKQOuc}MH%ms@p5j{|QuxK3=Ot``(|xoS-kxpw9jr8;IQ4<8qE?Ia~W(%;YHJzWg? zsp@G_mo3&h8!s+3y@Pfxhu1pN;BwPqe{5#{wv>AO#Tnky{;?KgcwUljJom-COl#aj&ocZcg_?UsU4G-# z25d+|PisZ8%Ugm3GwqZe^~r_hrP1kysmZ13bjK{fMGMSY|l@zl-0t;^po$sFn zI$c4gq>8QWGUgfm~Oa^Yw#Eim=EVq)EA(mYuiLrz80ysG?|_1W*W*Y!Rf?$canC9O$Q zg;903>4*hs$zJaq)z%~e=uced$tdY=cQ2bDN`8~U;wveY4u5jf|jW$ny|wS+hO z)VLG8XaQJx1ZJdR$+sPpWlwfe_d`WKbBDKk(oTi@7Um&v$5WOmoyCK%aBeZwR5!$) z98cc2RkC@|p)%p5VsQ)ijJP=nCP~{{d%WH~qOrc;nBH!uSb9t1o_9^}c7Uua@%7wp zasAZ?Znx2?o(5sU#V@47C!GCEOC^KVYw2VI4-%aP*{0s-5(xoos{L4E>M4(pdbgeuos{niNb?>FoK}6H_1793gdY~;;0ybd=&vT0`WK?m?D5Dq zymUGY4)q(F#{{N@ST{hRn@I8OrWvMqlQE>SLOB_l1u(6P6(Y;|oA@+0|%uRl_dZ+l?Y>WW8Q(*L3IlG|7PGlBl z^04I|R{tQX3VIqQb3Es;-cgH)3{%IDGuVZM^@uTaipPKrO$LS;`DSSa^^zC=L%>>L zt2J2?7LAsViCT3s>+O9$;{|lZ<2@{QR-=>UX-ygb!^_6|#6(30QrN_!>_mB4_JYUx zsEnuL+0iyF>3WYfRCwJ>yJIS+@iFxvwpS%(uezM67?Z2P+d_;SS?z6_y z>{rY`PH5k$%b$Ds>&fjs!Mqh9KtOn^Ezhd3QFE>R{~yP%7Xt!X37=L!c=6lkYq}5L z=cPTx^w+6+{%wV+vHn*TNITmQe$l4=srdJS8m&|~f4|V=nlst6N-O$Zysf|L)_ynk zvz*@qKJOSc{C07`@J}p?0e7abJ@CIy*x-kTxtAWGH!=&~rTB~+YSuyfkWVQ!|Kak# ze~_-A{?E6M#FL{49^Agsfh7)mIFjfrZ)2^NvpEieO%>Fmbrhpb9E(fSjV09M%dKv2&6`SV>UcBy zi8zo_>Zi&bnrIzoPkWR>JE*ifnB8~%u-sWl9>Jf{*$=4j0)Wn3JSUT)00RSk4Ftsh zzsT}vgcP(D9IWjOzo%u-& zP>fnWv^$s)?mI{p8b*Ot#AJ*a7vT5eFR}2VDLE54ZFg=ct}52;Q!8**0qbOnTZ+(! z0_gfRqY5w~4;(DK0u$pBd~_!yHf&VhlCF^#t>0@1Ko~(M>7rG+g7j0-`TT(YIh@`; z1!jwTFm?=CCoq}bh$c=qBS^LLoE~Hlfw6nga8)Yo+vdA(2^fd6Dn1x`-S(aaekx?2 zms(z^)A@w+#y{Md+_SeewG}IeR}<~P*YISW;APe?vlK)%7nDrom~qLL*FREaPG`e$ zdN5^!A$q@E%j-A-N1QNT=x;!FuiL$GbL8a*F&E)5?g{sP8G4^4{8ZeccF_h{`%I4B z4R9h)iK9=8T4lFw8Y-4*O>OEydEWEu-VGKNN)ID6Wh|D9%Vk}oZTjc5^QCW}?C%<8 zM;{hB9K6+@AXniliSj5epWMG}J%RGy>#LCO5NlrZAWR^bTlV&JD1*$vzeqj}!hb+` z9lYH0eI@*;4E!TFo#lUy)2{(|c)SM z(}_=M6}Hz) zAKEp}Yp7OVYrVN)-wF27hiHMv^}E>n^CPWAEe&V&w+@l##u8EWxJAQtmsEP}pP4Pk z8E}Hq;nLlzxHEN`rPy&-!|xdMKL#OVCY@F4yoe8WEjLN;49hCzibH z!v@y<8s?iVP}Sf{7^zILcHesgzpVSwVng2*#DNnVrn^sg6Vk_q*wAlPFIsQu3DZ&J z-WN9Z3o&%8;TnxiM@!S=ekG81QL#$7Qo6BwjP8wq*z=2zS`4PiPeBqF)nqN{j35I+ zv@NoGs)C&Q{3e&e>1Flh;46(($S17mzRs{~ne6^FMWSi!dMcL-wVT|#OteK6 zrw#0H!nC<-!cbInh}EOMT02-I^ug{XYTMmJpY2i(Fz&-sgtIsXvyDCVTn0C^=#H_6 zE#GBZPUNt-dCz$_dbDtgST~#W5MWwT=jnU=gw&rcX92k_7X^USF9AsXZz=bDUq=7K zRYXV4PESqG&iF^5&dNs5{s*A`Y-rEhUxB(sx*-6lH#C&*HAT?RxI4+O$qT-NENiKw zJdlT2)UgUSkQ7)?>ZxBCu#23POJmGXDZEJt(8r*X#ak2iiwlR`;_PGo8+X&vni9Iv)y4ds~ zJ35!s5tg=^Qlu$#LlAtc=QKC;HOzo}@vr8}S&5wAm_gUL)udX=kmoXZTGcww|&LW|+JltoM`@_oN zn!Aj(z3&SL&^W#}ad*(twrz(7+KKAVU_Bluw0Sz_1kYr;!-GxpK8fqOvKNpyF|@gC zehUoH^GkKFr-BS@y5e={c96BcZg0KQ)@bCLz-jZQDS}=)aN~Z9cwV85$I11?P6e*% zXz*GECB1pA#aHiZ>f0*jh|;OL3iaisgl*9e5+9B}Wpj=)Y6E~eauyWC77WRJ+(FN7 z1;mFPvd7|W6~s3V^(1rZ^UYHvQ$t?b^e3xA?srY)4kF&>1*91!2a;tn4Fzr-^Xhlw znkkPRhmRL2k|O4{YUVPz%%kHm>6-l~g+)|_PI4#f3EpoVdgO8PlS0c+XWOn*!zfb| zx+-WWv@=4DHf+vbi3Amt{MmLx8H;iicE9&>Lhd0J%CFhR~owF@*f>%J<9*-0t(PtKjcPpRbrYYZ_-gRrl*4syY;|LfNGA@6!mSI7 z)C9&BmV8U z0$2@U%DReKfsYCk=0L%~xEZAgW^Uw{wVQoD5(x9K8YtwA?*0@sg@K1Zcvbgvyz z!`{71yfZU`O1;8PqQDH{i5Q(&(zgKb*^U&y%i2^<{OJC62K~uhFd1I$@{5sp`W8hJ z)F&by?4i8~r`&B)wTAO%hUM0`qxeszsx#QN`&vwKN9cHA^22*;&Qn5h?#2f?HA})_ z)NER+pVz*;yWOg`aaR;NkVLfSb;-YgpZu&H232%mx#0GR(@;j;!J|Ra2#S>Mt;0&8 zfo1~f{mm*Q??5P+YBbtoWh?9<@wuVnTN!oc`B`(S-`x~nw+xd*0 z_1PP;i-VJ;+-@DAc%6cdEnf=XoXEtRmb^{b;Qd17t`tbkKQKP3y@y#)9nTsgpGtj_ zmYcJbVmu&8Db6lqZFtLV{AMRh1w#v^7CZPdb#4cQMl#+`8+C&R!ID}8Pm-}r@365Y zq0w7$@Ii_EYAK(w(b(Ei1Z}Rl)_D_=b)15RsiDCxXBh?Ub~a^H-~>cswJP!UT3td} zgi#oCB(tg4vRM7Bu|CB2+n`CwiOu4{Pyo(a$|mg4hGovp{pRYMkR`n3E>nt;&n{-! z@%tZfh*#l&nM2muf}mRak!`%MR{*HEENV<{aI z>!LZXg0}s`XHf|iwePZ`{Tc5LAjPg84=(-Rb2Yi*D%V@MS-CiUkPYP)?gcM*4gWZX z!^=vSk+zT5M}?x2oQ%aBd*}0I$vetx29$Ll22*)4aRim&rhZg|gK$o&ws3ne&tPFWIDKnSTYLf048D(Nl7H2<$K4|N2F` zM{6R4Puy@9_^;pm^v;&T@@J&Uc5prI4mgDGm1Wt#DlfF}9QFTsNI*a~3@~s13|V~? z27Vo&v}#(3W;%%g zvuc2%z+>CY&*%GyC;fT6ze)$ZvpxLb8Y>PB#lKbzemja-y;KwMfsgs-QTVqn|HBTO z7GUH*|1OJz1{U$nh9+s)C^m1l%7BM4dY~|l)!2z?%0Uq(zm>;*yZS`&F|kiF$C0V+ za!S&RAPq}B%|ybXmUt?2nl}YUtU~I_nWTvm>41CZ;sMRU!3b>X%AvNfnbrhPw2&dB zT&SR?g)`$&#?xzvP>R2@UB;%bwMj>P`SPA#ft z+8O_?hyh|e{uW)aKf7d02Y-*^V_fsZK?+1*?pv8;^fv>Odsj}uCgNS2uJ=4+)paOQ z`lseIG$e@vwwfh|FaKE8fy;&qDR{2xpaTJk{T-9`m+H>H0L=$URpKD@*xgUXq_|G( zHap3Ea@#9jiS~A}JU&`!Q&45pwE<9YtTzO$0k7E_Z(sNUAfZl>Un-OK-WQ3w3^gXa z_q-pUocpG+lQe>Z6K-=wQ4nHeQkO_nH}VYQL7=PYCq>TQtCZKPbQCr)+up@QVco0(K^G^9$v0rKDr!ix~^I>HMkufm?O`K$;O1;HW}n_976fP zGoLc-pzVsQH<)5oClR0O_vfEE;0D6dT_bP;k`ZTouz^UZw?a26Sk>5gv>U{pNxNh7_?v*gMWl3gRTtbuWH<51#d@YpaNLUB2n zAT1Nzz`Y#^l1vyL>|a4V>44bL{X$4ksRM})Wa3ob}E>VWq`T6$oN^!J5w39v3+ z`5}saKs~h+5S`@yhK2IO$3+x$r%Ltw1$uYnk;3tvn z3|zpVOMEBW9{aH?-?T!H1sc6%cnf@e>u~PKWd1df1~glMpQ`5N2rw}=XqRvUFnl&s z5<6~vl$G9u zUC_I269nN=Tdb94m{81O5ACh3@xBWWrWQ4Qd7YrBTEjsyuYC@St1YoeN>!kfOT5k;U1e=wcLi_^QI_gr?%SfkbhkwZRVj`Xig>*RP8WOC7VRClA(2 zgbv5JcvtEN?ANLj1sskt-Drz$?_Nn`8G@gZ)XH*M>84OwjxT-2e841IXX!VpfA7_C zncQ4hhD9i$5Z`SIi&V^DR%tFzmjM>;I93~yN8z-KY!`w=j!t&((K&}yWcb)2#w6+0 zuheN~`o-YGp^hs4FkQP|ZzO!24x#{xP!A+DYM24~c@Ps1MBcFp#L-<)1DN(3PapAS z4;QXmuf@-*)|E|mQgx*YkYX62FDEf2>Vzh=^0iFil2v6%Fd&#N!yXzplP52iThK}`iA0N}=oH9PgS;vL3+dc}=7_as1 z->+H>wJIClm3=Xn_$qt{sss(2Y7O@uSLn=o3-9;9`P_c3I63c1cU)U}$Oc zBV;~z&HTrXtMfm}fAcpOHI1&L%MbAu|4sZerSS9cW&bYmG46?Fg2w>rcmk0|IulKC0#pDc^A*hp z$x41s=p|}_#V3rY&%wbbIpQINqs1>DWvY4lc&czzPha{-W`@%102x3?Um_Cg@5DH~ zIGycbK9pO@`Gh00=1I;etg?W-P)n)oG<{T(I&I!)o#L9XRa2dMQ{R=e)sS~JUE@-I zEmz*U7r}1E$V^l9SwHP0zmtHY+1J21vZt`L3Vi$v*iNs`r7A1AbH;~R1M6$^(sXobauhi7U@c8WSUVPK{iEQ&^>(6#qR)+4-o=G{UfW$$kf8n)ZqVBCDFfQqU`le3@vs4herNqw&?H3 zFrQmcEljNp|0^>1L0CN_gP;A3&EGHyzp3zZ10xd)Gd&B9fuV(iuD-RUrKtmrogtw6 z%-+G!;6Gu8-~G^YK)?!DQxXF7V)DHL0&@AMH2vOc`G+bzGd&wS53el^iN#?1Kv240PPA0DSg;6*rQ`}p zbBwZ(M9OcH1w?eXU^1T~$#8SVCKj8*=H&fW+gr1|pkfdqQc1wKWTf!V z?Owr%ed}k+)<;wY?Jm87sT$*WD!o+$zQ%e6Vk-&h;RL|x$f5YJ(0ULeWRp{}z`At^ zXdpmNR&Oruw<4z)c7qVLVuw%|hC2;jm!mPd!|KZ#7Y=V&xzZhE^nu>dg?{wN>?$;d zM&9gN!!Tx}QQk74iIvmXZfFv<6ME^ydCo4Zg619i%c}-J&XH37glpGjxm(XcUEJzQg<{-cHxdOWH_kM{JTZdXjsNaOI5saDVir zeP5$If9MssfNABsVFstV6*N{8R-gB{4Ga==C^uH{AgrdD>$v*a%J~o|tUb6pSFOoF zeSIwpgs@vT=6Dq7g(B4HXQ+9n*zV(|n#LVQ_#Wbf{sw8N*MW>GChd6B)XEZ`;C+&7 z38`^tX*IFi1k&0-qbL|C?ta+zGaH9eGFD5P54Twtbypp%CwJaYu1VtFJTW{sonK)j zMw#E#WNrr%wE$sh%#UJ!d0n5c5_r888(6_6G<{3MVyOofO7h^<1bQ!C7I+5QKZU(G z0lQdV7ieCZ8(-X1NZz!lD5)H`o`4@qlo8z4#*3^Cf1Q~wdSy+|M*;U1|aRO3WR|iaBc^h8Uw5*ZLnNZ88eLx z7Z(nia6(6hUCakpVcS{0vL>`Ud3>?6)b{mSp#(P5Q3rbwyIE}&!LURD5L9c#Ro36c z?DTow_u3-3;eMq{W&m8j&9k;@auCna)io`}Hdx^Zl@vtsQ@pz>5F%Zaf;EAb7Ph;; zOIHr7Q%f>~b>HwJVXf|HLkY8G`GIX0vuAgtrS?hPi`2I>Woa>VDj-A->tTz1^C4uJ!!0V>4KtR_2R3u^gi>9VlMi!>VCO>+vo&NQd)+skzA@id+*5~pGFrg@# znD>OjzO)N^hnR>&d~ggeMxktGBjMiDrCjCDoAz%3Z+Km6=2P$XEeQ(e9fI! zr#ZN{;J!JWVc%o?ZUAHpee)PH0 za=!3TMm4%XnW_ZqMK7ATyZhNr#fa$#{i76Vv60?;ZBNl!ZJ~lhhmsMvD0{>U>5BM5 zUG&Gd2MiFF_+sFL`DTXu3KtC-biF2)Jojg52T*HgBiLmIOhhQ^k8V&ovHnr#9@RAx z!8r_ACCwSN^an|rctHqq8&j|zYFaaum}tftdg+4IW3Q?4VkH8)tpZ!$gx1e! zWsk#JW>Dt%kgRkQ75Wy$3#h5|+C6;g#TIqR43^{U^PG<`135Z>QyEZbyfMPI9X}D8 zeW$dww2I&VD!1}X7*o+jx&B%o-w>s!5krE~l79#26Qw$Za6HF4nEC>Pdoj8vAI9#w zdN)#eJ>N)R7eW%VVd*rmzsXopr9t7|n1i|L%$F0-HmqQm)&}JralwYZJKW)jeb!Jo zX2MSxgvy$oi5V6{pkUMNUl~@#K^lZy9P6x~qBLo)`(7Tnv>$xTr@)un(}V+QX%AlD z0lRHR@m;rDk6v!pd(n#ToGKU?;kA+DM@3d^V5yEY{*uecq;~&E&qn~fn9nk%loikyx{Dk^O9+O^VP#W z$nOUIf9HC>H#z)!*JJ;$?c{fZeohV3$639V00c_}!ar!xKc2$*S<^ol^uKu&r!J|( zYF-#2@NI5T?wbm3P;L}Zw=*aWvql0>humB+B%$d2O9b>U(VVp@(HeS!c+U>@_hBx$JZ=ImaHtZn6GvYe9ebU3Pffp^ z>#6S)rO?HjWjC0-7?BSJ#T%fKIA@%A&DS+#qROYpO)$BEFnIF{t^$<+V=9o5oQ@g3 z8?qp`HcI%~Vn>A2g>{(FhyZcz#{5q-dJ2$*Rj>`73iU z=peJ356w5zk%vT~aVRoh9w73S#Jo(q_flH?iD9g*aOTf84IFI^pu=@z%*CIA;*i0UYFjM&EKZ69B}!UBFc)9prl&%bXPtVg#s*{#>w=>#pbr07cUDk z!mEWET*Hqg+Mcp>lyGxw(-r8PBPV)wySr3Pya+k*sl1!FKAZp8`tTvBtZ>Em$TkRB*(IEA8ry>&4iar5#1n># zJ~WuI(qe7Mo()GX$t@g=r!+#P`3A$o|H7?3R|LeS(VVSOMr8#IR6sZc3kWBmYD55h zzH%Y&6Cu?Rumn!eh8_wM3@9-S7yoM=ILMbGU6^jcc`W-gh5RBaZQxYKqilLr-_BuP zVcAQ2bmxV7u0sHc<6CusrAKjgM&1dbw%gNV$Mmk@>$ajH1?NQzZTs|SfTHkYP2ojd z4a{y%+&+46WDO2`r45se@2vL~x}Wg=?x_CHGLOHS{~s~zb3lLI{)7mBcT~@4dnHb9 zgcIPXCgA@;49i5%&c^fy49mpA$inn<*7ToHcb&47^*9~+A;HN|NEckXERmIz*j&M$ z+XA}YSb@|*H=M$&mWV}`G#ukd1*HPM0iiVtmuFs?3Xa=Rg(R6xEy zUY6)SrKxmF{l52BYZ{yaS~M(@7@a~a7H-MevK8rCn(8n<&@wKAyn3Vy$RA1g{HqNG zRur!Y34B2WP+q9c0wd{~8p*<>3o0v#f;fEi;Ck}Ss|ruW?PxY(2#~cIvF^M5Xl(q| zSEH>ccRDsoi@TI?!9N(HC3mG|UpDBCyJI)|AyG{Y1Dco6+6h($Q3hQ|2ApREq;wcJ zoWaL$wZkuw`SgyJoW(#m(-|{6J6})1D`SArk8n?wbXR57=Z&>vH6o04#x)9f!Z8r# z6ZAeQp0(};B}X9!G;&tINp{afZ5v{XdSPoxlAl09_#XJsRgFSC-fRi{(_Ue?R;St# z9lYUjgdVr{pbsun8b0o1e2Nwpg5E1(N@ynra!KQYKv(SLOU{7cu!R75Wd?`wPqZr< zeUDQmL8)$!(%^Tiy?J@kM#3)w28h3Mod$poqklV@ZFNKDOg&zEsb=3H(?cx>8JWLC zt-Hb|OVAMPd&?#ES_@mE_vp#sg=oyYwm@Kl7q#Haah?1S`^qoL%~2Oxv}KIWr+iH4 zgy{FC`o6R;gK}W6^_n+s-XBTF7c<7%D^~ZB2nE?rAq2ln7W5#IO>WLObfY~xeQ3Fe zTju3?YJB=|Lw91-m1EDIH!$kv8oIj4Ktoj$ZQ#5xEfCkZgC1pf%K|-BPA{Kc=wuC9h%cJk@AzH)XP0gXC2 zXg##p;m&PiS7rmX{~@+r`RoPkTu=72LUmWh#HTki07M5g~^*$q1&*fh}Lq#!9l- zL~b`WYQ`vVR^sNGJCu)D8&x8C0k{P{;>Dm@zjTElglwUlZl5%3{?71NWz^c8R|A5r z##Z)Ng1=ST6-c`ItTif*SyZKxzvN|bl4CU^GFS2@Us$x*%LT-57n7}Lye#U+YtVC! zJ}I^miUQeV&DdbKt*DKHFffw;neN+V1H42?=HrWyG(hHHp+Z*ZMW38uE{V#e2NgZQhdPrwB|!? z+x>zRsnnkBQ}z7r`QhEoPfyQ0hwpsqHAOB!P@MWlgW@wB|3gq@remgO{!38&H(|U^ zc?1v?Q4Z~ZA&H3KIBf*jS@TWDt@aGZbb`gwSn9AiCEuQ>eyX3{XJeDDWw_{$!CJT` zWwU>?+R59o+yVI<6(6OimCTTNy^lQWv)YXD8faK+rGnWh{iV^!@5z?8bJ4Q3#@RW- zo87dod`qsJ!y9p1jpE%_Azprbt)l}AVxx%G&G|BVM3c&aaGH`RlH5L~H_{S51Z%f0 zEKNNM*ybB#)J@@jy88>P7eZw21)wwzyaY&WL_+w{-RPqJV?&h~Y(be!qTmj-o(xaA z*&*R`xE&zQ9M3`VNYtI78i3B}OiFel&U2Or_h{?3WPILx8H zi7=(KoxB-?jGLML$|_1nc}W$$6R7$Qn#6}_rDZ7;?vmY@>s^p;dDaI;aHPzj4+=7N zynB54?;7j~4FU?yH{jTM5w)&F=Es7&o&{j^4!PY$D7fJl#C8L0CN%P(u|rjU_m8wBD-?Djl)aT>6>p1P!%nHO z1&M?Q^vvvE)qvR-$Owhe`>l+mLVrTV7KU3H$VfzsYXz4paQU!Vq!%X>61h5vhyWce zXh$lW9He<@#Cvsf_4dj2lk4Nb$l-{wo3rxWxzM;)d?@h%U6`=#UB2pAZCA;L1-sHb z(+8+TSo2af=K8V{{gp^{nkJwENXxt;&*hIG9(Cx0G?)c%S^D#F)H^A^l&G>u7=4*5 zR%(DcO}@q#$l+GkjoAgwCzK1RrTT~wfr_0DOM{NS3YWy#Z%=`G!4 zz>tz222{4MXFvkJ|?h!sjTVD=3L!v><%CTrrly&lfJzj-N76pFL}sR1_Oazj6$O0ptdhjD93wA6K3d;dE{GcB%^P0=07%RtHJP5 zShPVBw$H`14jN$TE+y#!qJ2KX<}4OSYM#( zz`6i|LhM>-q=&OP5JM4F5Vj$SX|t<(Zw;NGWFgRZWPlP&X?!(YBAvKUAsHICip^_Q z(60FF%)wV@(NR=R2#2PeGJ9f_ujmV(228Vw^P^Ew$28i=7{K*1@xHvr+G;%zuJgUR zC79`qt2sr(b`Upv^VPG|-uet-15<9soluJ66PEgYN;Cu1#8`NKLV30W=u!mrD?)MZ zQ;hlNI$*L!E{x-;VU>R=&evfVY&|6aX@tWcOcDVl;nYMf<(wGkiOqZ291y(a4xUg> z1R#y@Ru+1_YPMw=JJlK2OJr20`i3QSY|=oe3Co#mMEn7i(c#mKMMo5^$q0zmbJ`uE zc4UW+4l2A3M^Cp<2=O_IFzB8K1^F1Z@eG^6;+zuxl>vWF0HdegeoN0c539YwdF|{LC#P=f8?haGJUye!V9MBf z7p7G@@4f${59f!GJZG^Y-#SM*0MU8!AC1n>S?nL8GvL3J(EWij{tj9H%>z(%$}-Q< z+1ef$*cdLoAXpzc_EG=9mhSU=skAv*0AOW5F;5$ce7B}ZsX%-DGJ2)k*Sb9f8T{~A z4q@2`+G#Ao>LIJVY=Xq=vE{1f;oki+$31ZxHy78~Xx-5__b6XN^IY)j9tU`o?FY1T zAi0ajSo-}gM&V*wIKJ26pqOfT2(Bg2YdFY#TQtdw=yyh|$qX<;P8N53Ht(lpXe+n^ zgQ2yrso0Dv8fml1qk|1b;@gXHKMTDO@h5}IuL=@{85=6Xu#LPOdyVt;<;wu*a9kM#p`R#rGbHQQP7~Sf~Iu={5vK7p0C36h;Eu4-~m;@VTYUP_S^ZTHB|`w zl5sa_8s8x+yeAxJwVsSXid8i8N1Ycjpr6LI$2(}Y!i|sV`Y-aNHu*a3vm7zS4vle& z9F7I7{68E!lpROElN2k4IOQI1I(mtCOrBeL&gTSiHe9osML)bItI^oEo!yv@PvBl7d|VYvi0g%lw_G`3jXtpZQW*^j`syr;k&sIikOyEvwa_!G*vJYAw3um zu?cW5l_)fKCWgXV1#F1#IMXuCcEOvuAwE~hkiMfD1P!H`;yYtQK>DZ?Sg3s0?YM8y zA;V%aF38VfRV;23?bZ1RNfdWo#0L9n9{sVs7Qy64t=t2i3!-sQo916a!2-M+G zMExE5da!pNIzG)Je`62^dU>|_f(BGXAN+VydSF0oxr|J~Iu{V06+}ZK*Y@cVpndb! zrL*Z8nitCW50BQ|@jhf_owe0}u-0C3Z>w{@Vm^=?rAUOGXZWz2s5w#VIbR+6R>Kaq zNOztr4~j*$%mRa^+;4u#i4usoYpiv%0yv8b+@31W2+OH#UDV-A$sBRBiE_V8!$B&! zOo+7}!kp$8w}Aij}2u5P(%4MYWV2M^~9eI zD5ddqfLJpGh}!U)hyhRo^fq7Xvf||4j$lR1IJbp>q`%hNV=XI__S_bZEo{!6-49ek z2;&Bi!f0Zol6r-L%da~=%+$yhU>U*EBm>3zI5$gh%xtBfz~F*4dR6xWSUucoCF;J1 z4*lMQl5Yj!RSe7NTBcEt|mWW{KiK*xvs znDmSqO760bU-tq~L){W#l)-6)-UAq4XRw-*1TI>;8nTY!IysPz|=bkKn-=EsXe~Y?HG()t#i|d`XbM$ zVUGs%SJZ$6H!MJG7sh5XsPK#${J*0Hayt=;XVhQ_Kn==jY~Ui{jXg8l7u8_)q%!_p z===}`Loc-;;RL~tzeo?9i7n@mDHy+hMhy}naBGA32+%R#QA3aBp|JJA{J~yCSwz~< zS<;4foAr~&C=c&=tyHPbE7%$x6mj)}eA6Hm21=a->O7MK=Wx9*CFm>P5`m@(79ljR`Zw!MQ}Xp14HC~z;h(*;siZDND95p;UrY(SD+Uyf*QM_VSH#H>k3A`kBQb(W3sU$>$uu-RL zrsQSGuiu(Is9&6|B44}Y=5@YmcOq!L3Fqm7s^c}P8DwiF@+QpoN|h`tYUKpmu9}G< zc1jhewx_L(qaS&8Oe4~}cXi`Izc{AflaMUAdewivl=hb{wLfI)|AvYDiLqA<_Jgtv zT34y}?al`<_Q6Ouz;D)9-LB>`4RA|mXWvS$M~kr-E&>XoO@&x2ij_(~Wym`pX;((FsqG zQylYmc(A~eK_0M|=Z%6apVhwof6O zqm_d6(Z*GXnU3)D>#uS2Um@yJEYRQk7iWG2n>oEUdrZko2p9I(o7a}XSByQb%9L?( zf}~g61mx;zEJp7DxjMv;T)kfcODV1kBMH5*(4G#BOHb_nG-zEurz$O{A|{u*9&g)0 zP<>0BEF1D8JGIG=T)kR@m)8J}h-*2-mh=Z_Z~ZH0&;A={zxfMipZcA%M}Fq)0|1;o z4*w3q56-@6ov^;q@KT=MD~e&FFRAA{XD^(GaF$vI+W+J5=wHB|Y$R zG$-}zF5$LNS$TG4@#PyxC4f=`il@CVxlKV zm`$%JcRI?4$Fm28qm#U>HXfPGr?=W|?AnpoTc#~)-mV&@xXRkxrIR>?igvi@J_>3c z<5_D44_~&NI4n8f@3t0|3Z17%zB6Gz?BuzW_AY9vhW#Her9F2G{V^=Ev(Pd8B`p4% zUYt7RAuB-bS(=I{+J_Qcx>p1xh)pUrTHhNXL9I?)ExL%n+(HJap;@a&O9b|<)hFQB zpVe&yS3jG#yZf+Jn-}6+K4y@_Ah{d2rC2)~x6N|bj#SSPZrdfoXTZr{x7rqmY5BNG zZEe#X?y@g}mn>;BY`T3MBD?qu3}wUL-i`^jQbZHpaP~TjGxAQl|B~jelq4YyNXaa)sRKF{GLJ-u93-+xU zDJ5e|{QKbUGuBp74qYTptfqIM<9aeLQmm3$0I9kt%+hYzwoa0Lw}K1$=Itnl{p-!f zk+}=Dt8q9*4i|h@0X3Iur9+=zQuWEEqZ|BF$lS_fzIq7z;qlc5j4ip>k$b&x4$CclxIX9ezmQ_Bid z_{kJ2-)xp8dt)Z>-Al5hP>5|FR;an@edd*#FFHycbVH$X3ry6Iv}i0tur(%$5|iTj z@ku?O8xWxmG6_DIstJ2Nd65k)V-Yd-$Ih(brgQ*8VlUj>+rsy2@7CR}P7W126wz2D zLJY}#z^2$Q=eE^-D+RzIY$WJPNqJH86Zh0IA}7n#;%)a*vr5BsNR^g7#IukS=F%$F zH?g%=+vvZ(mN80H97zFkP&F99MxCfe+Y@s7XB~#0_&6q02YoS)uK1b3=N8O$`KLk;~#G*PT^OiwgDVQ5r%a~ zlH!CrvtaG~8l*xWMjg2cVYhG6ksK5TBFu zu3VLJDocSlV3iBWh%Qq%V<+#lA$O9xP@og;V!yi1*5SbdTS*}nh@{M(NB$s5kfn&! zC3!7+(TT{v8)UV%Yo$vMR2)p;clDW648`eHk!*z|q(&oGE@m>K9>R7Xx{3dsBnymu zr{Z(z%GHDUX>e3rm=I99swjLeU8#(a0!mlt6lXbs^HNwf{IeIfponj+y4sC5@?lHG zY`clOcXm)V{Y0ojv>&52D43iW&#C2Wzg&W3Sefi;K)z%GW-SEAG!Y|z9}qw_O&d1o z>%Rp~e@N75-7IIhBB>3k?&7BOnEp;$tPG;b+VRj5H&+86iqrbNSb(#B81E~2VPCc6 zs@gHcc({({s(d}6VhJAoG<74|S8GvZf*BsJRNu^?&-Iv~=qt$8Tj218;)DZ;IW?0C z)FrxTBJpk)`97buw1_KXHc2gA*;pC0sX7#4d@Dn5+(k@uu4YC?U%>TAL{!H7NZeUk z>bd1@(Yiv4R=Wq>u$EZjFI46Xj=l{pynabfH$`%Hu0@pLTlh`Va-vR>|D z1^E&i{V(Sc%H%9^@ZBV|orhy~4d2_gT-nU&e|47d-u~5D`WM{r`Csm{{~dhA|4OI+ zm&WY#clZDQU}XO~k^dzrs*Sy#{&k*RymtQEq~iQQs)0r9xqod{4|nU18Tt!g4_I(65- z!f`F6)5@?y^Zyj}hh7DuG0!|N8!S-hC#W=zr{c%oy6LxeDLA_}#4rt)f4;(kn-wDA zYkPM^D7|k&Zoy#;^XkDBwdOFoj5()&PwW_|DBHzWu%}nEW>Hv?ar$Ewh6vs|NEy;P zoQ^XfXhw!tGIZp*35~B;{+9HjU-M$PL+h;5*QTuyc2z1HoqfD-)!kCMQKd>ql!mBK zrYF@Dtp4Oe+Hqb=oN;%K`S`wu`O0fMtbxwl5P)xty5jgz>FZE}ly729(+nG8kb>~& zWjBh)F^BfkHf~BgM#kme7AR(MGW8w5h_}@th|P}^@L7)E)`sv?y!N0RudVizmo&Ikl0siq!;)Nshdt(CuaZv*S#s7D1%>P=_zprWk ztwdUezt2CxX@3LKm}!|=nf}w4Bn!honOEljz+C^%+5B%#n9DU2Ih@%Rx*JR!0E(;Y z^FD*y+`cXa%5&e=)>hMyq&)_Od}k}%m2Oe%20`iZc4k)MH+d`lo0MvOV$*%6))*S5 z1g!+62`L&75FR=Z0l@py_iq5{;7-7CVU!5)hn`HNsLO<<@aQq~yu{BTTnt=cH2Ysq zEP|V|!*1?yuLr~+%jAW^1|nr3=^!wys@*b$Uwywu%12-=xOoLZ_GjT0ujar&GLFj< z`*a(gxt`?=X%v?+78|blu&e#Uf|VU!_f@Ex8{W`-NTO=XU+kW~-UR84KHl>?lPdFD zV{9tYWOqp4HflnAs5*QintxP-!PdBNwud}tIEtB>120-0XUkQCPqEw<+T9JA1Y@W} z^f6$$`3RCbo-?dp$->E!OSWj$SJ3>6D@=sLNl zog-`6mt1;KoScM1y4HvG~7+YF$YtqYusqJ zf=ttZztUntn|fl(a=ZFcIQ&3$I99_pXh=I*iQ`@8`tGoWr%U#XnAP{)Th7wSh1U^% zW@`=PqR*ciYrMgC*^hA)wVbAjx_Ax=h&0 zfbCpndFmq*V#owBDn9gueD6tBBb)Cz-$xE$n|7Ibsf2=KYh@s7CjXrG2}Cmed2^z_ zE=npKSFUwIDusRG#;zU=PKG0WUJ-OsoIMuVUUPptbH}O<)-~9?lLHo7lrC66QUMX)9X!XN5 zD&@i66LbvHmo^!UW+!>W?u6B2XUDyRYdm43L{A5WnQedu)22;Ad_+hX%GR zfs!3Czlx(MX#zv=DHUY9qeQ)OA`u2EIQ~cBh)O-mpdWI9 zysh`69)mH5LRuG)Z>Eit)Lrg(C|E^}Qh%#^2+!P?idMQ6i4Q<$xS??CQuALFU496K zIUnx+nZ?rCDHDDFHP`M?-0){1Vy3c=iM`d9TIT9dUVeFLw^UIZ{ZZao;J3iWC_&x1 z#itEV$l5)m>bJI$AW|Apvpn#ZKmE<3+=Whi26?kUE~ka2q}uKSrM zY~5Cox+CcFpI!KjzqVWbC+6AU7Znl^dz9WXk`=kEn%T5RU5SR#o3!f_ zP5wS_Re{jNd*0y&n3J<#$UG$(Z?mL>aU;5(uQa`?b<%Tv?Kf4`+WjkRnP(U)V@9QB za7|%l_&_-Ju|+-60UXF&mqtDVEj);~3H!+4FZB0%Sj#sL2~lUm$gw2G+)wP*<4_m#lt9b| zIK{b1XcH*X(@h@HgG>!Y2)P?hWyHrcQLdsRvcaDT*W`yEdxI|10i(7p>q)uYx02Oi zqgD%Rv0hfTkdK+H?H?kD4Q0_qeuiNUE=9f%FIG2w`62h#y^d!K^t`#mv1>w+-E*hl z?yZq9QEna^u6C4)O$s4KpEE}Yu)zqUEw5LUGf-9HK&?PoM#|n}5tF zC6{F;>AT{N} z;1hc*@nC@Ts;}jcFA~^J47*8kIl&0S=EhU>%tJtd;>d0G5Mpet$>>HeUURAZ0^6*6 zGhP5{I_RT4PzX#t6Zv$MR^t9Jwb^`#7_^RKx`Nf`9_9L$Uu|vLI<}*#hKBak#+#8}3MqGo$TX z!2X7TeUDy}WKZ>;>=VP*KY&hN@dZGpmf)vHhB#%ja^U-3Edz=q>PSv9Z2xhr8)i@| zk?n~N;RI<{7%+KPAD5$o^$z~WZIU$HZUgxs5V8k7eqs%ee7j?_3#woU1Y~t1{XIER zw8Y~iv-9^W6$u}&N|vF{l!p<#JU@Dkxl;g!|EovIdpGPJ6eysO=84J?7L@7(eT}oy z;M@nYokFBky%G6GPPXJGRn^CJYYgTxkR%<;>KGrEa_uu=v?@wLIQizd7nZnC6|zBk z174bNUW3|JaYNhF0L!|tk%Wpzg>JmqTwny=T$!N0%mXfV15nn!dc97 z_Qv0lQ40*hO;LB*GZgi9VypY%XBpSC12KciYH;TP+I);k37r<{C=x$_0&u!R=bm%p z*Y~Vtc$>UzI=};1_-5vkx7T?EP{SUJp_LKZz1@o}9>kD!Ky-(zsD8u^xhr~iN0Ezm z^I}c83bVEpT@GjKzZ3&>yffVylBvzYuOGX;v7bmsQl?c5WC~AxK4&ztcFqB0>AP7s z_cx3*=p!HqP9+L?9_OmXWx%0aW`8@pLb$xG4fSJEfZ%VY zJ40WTp4B|~Oo00{Z^mg%#65WVhJvNsgxZTwv#Rc%#+A5*gC)LGr+W-)FN{=iNFvFJ z-bzI+YP^Oa5lr86>@aQOE_8@!y)(&FyCo{kL@2194_^M0CPy0$qguB!cJFxsss!^f zOoCVktO3s$Ohxr0&nT*oXxH^Jt%k92@perrgC;RCKRCQlh9=S1 zt3f2iGx+#fuGpU>h+!O0aPc&M_U6O70J(Un*ai1FhNEb3E&;BFItxA}l z#+|^2cy^D|*p=p2Q^~LfXv-)Y3wY&oe0@~S2(7aTa>MaKtL^|CZb}cxW+C1(FH;{W zh72YBToSiH@~f}n@`maIR#Ip&gyPt%Z54)}O>5KJJATz!eRPQP*`*g3?y=96C~B8j zXW2OQ=bfl;tSTz-eVzJO-|^L>#GW<&tP8G0V=P4=y9%2v5Wzjm1X85h#-JxRdO&8C z#fOAzZu|T4=@K5X!GjynSh6<4nS{8bpAAtjNpb-lMg@}Z%UVmKEGB}RqI&mC~Lv=prTT8W(fAWIBZY zK8Ye@X*j5r*JR?0@AXTdh`41c`FXW=D@IEvc~^Mq-W&0iQY<-8S1%^W0bc=Ese*T{ z)rCQpS9_0i2K8vKO|e{R;y%XIdNsP4A&eR88r?PXbqXeZE_NH|euGJcbnFZCJhMbw z$EKN^(JjGMjL+!+Xq+cl7G;yAOATk@Zx|mFO|p8w1X~rXi}|>c{MY!?cSu8wmp+rm z%t`&0!pN4X;WRc)8dERSpenwo0`Wz*#k_>#KS6+6GwTBdHs?3k*BU?GqLe2NK zH1antjtcI+WQ!-9rfJjZ%=j+ZMI-Qvc2VUJJ%x*&Dq&i!^MOTYhHg0uDmZb5;+@E(VxYDM;(d z6leVEgXkH&Rn;F#m@ISs$hwK-g(2l+)^c&`8}5Z!-Sf)lRDv8+#KFY6-iRj$R^bG` zg02h0MVy(ALDLp0_d}bFK$XEwJ4_W&&zM)}qr@MNo_PI>nQ2Z2vpQ~&cngSk#K?mm z_mLjF2T#|0JK3&4B~rXA|+-YaC#gxa&nE9>`4OtpHBXMW~SaT!&Wyp zZwy0x{*)D15J@@vr)2osT(4*K3$US3Ddi=IhxHx71@~b{HR&k?j|t!xVVh4ZHXKy^ zOz3w0Asx6h%%*=S3w&b>vLDk$+*qzAc|WyeVimqgK<2UZ9`I#)-f@d>v-=>XEDk83 z7+UljhHG9)TxA)lO~1nu-Ybcvon1N*jJ%Sk3io86Yt66Wg8YjGQ_aBSo%l@*T5~wO`x0!ew4CyDTu2|_S0%t-#M!Teu*&&K5HC{SQOuQR7^e$ z@-!`%YcgO|>8)l$o5>kSqFw`)nBql}hGeckfSPKW3IGB{4QcS6?GaFYh60OdWnA~7-kI*d0Mbib1tF*=vZ}YNNHl=0ph*7lXwJw>`>0otp z1shoarPomxn|Z%T)zCN?VA$`KnSF}A>QdnA;@JY{fvuZG+Kfwk1m=+t&DY|F>!!*- zyB`jmV>GRBtwxf~AzNp3tAKd&g7EAD?EcdS?^rg2Uek2R6qBerZc@Lr(n|7%LlIW3ZCwjR7w!UW2;j^=*YaH2xX@bGz?)!Ow`B;@Ch)?dcfj^KEw zVzFyn$wCt{>ga6Y5}li?L)}w{(IJ?RqN<@F{G!;>4?MY*9~WjR$QcgXoBz;)cd)Ob*M0Jnu3aQV0WHESE*o+KOzbYE^@$Bt9tgnXfmKnV$?Z%3=H(lC%ZK*^X#M*hLEjV!v~kcxR1h_74JRT!c>F`r z(+HBUV(4{Z#u-0YX$gVfP!`nWqvPH;nCY9g;2TEeV<+FQCtqB=7rvC#T}}?)H|nr> zavtap{26}OSMwoCk_jsB=%%uol^=WKJ)r}E{LxcuBbsLOcD6VV= zF5FhiheV^K#BcS85k$;o$1$bp^n^U-?{Od!px+IOen~SQnViKu{**s2<|uQi??P3~ zA&s)R1x9c%n>eCIYvsTh()!0Tk%gOUbLe^L)_)9XIOc>hZezi--CB#R()-gCCrYh$ zHXI_N1Yw72@Jj!5e9P}L6Sx+9dt&tJPFpAm>xmCCRTRcONHWuWe|Wk5FkOWi14ybK zeKO-R7|$awLh7`RJui~NF|+Pfg_}n|@V?kxQTb)xY}ekC$Tz4*9+IPZbvXAF%G)bR7J4jiN+Km#w_CIDC`; zG?qMun&&jh(-9~ z!9`OHv?{Gms^b^!o}ss1IM_aMCDpdDRR%@xnH@}9;Agil*3q^q>dyu(dDkhV%rkQ1 z`7uA)c+6PRoL!jw6=Hc>^jCBY$^Y#c(5uTuhh&nJsZsLN9TLx`P}0ViMg1aR9J9xx zw;F@k$8*RaB~LtrqB!A64S{OUX1m4-r6`LcYdkz(cPZaS{xZIMc|Sa@^+NpqPi*BM zZDquM^r7-{6k1l(hHU~kfzu_}Lvwc$%e7{=Md`}QqkGb~fVdf}zC^555=2bV$#<;m z2a+3!dx5t()e1y_Q$HffSBN;MCRK@uDmFWXh1P^V`JP$Rxlfooc246&w*~!U%ONW^ z5d--PrIg@$28{#DCSQRA3&eLNbqS%pnev68Dv`l{Y5E&=^{!O;A>n}fnQSkHjz!mK zP}U;lmi!?L@iO~?d=O|Y(1 zIqfWmHC0bkwT{6*=>CSJDnrqq&n%VWD3r73#Tt;7hE%MkH&j!dtQKorSQjy#zg{)p zsOnyTE2C+gE9{L6;e0#)GHP-=hu~iZ5xHHJi~h_76&))N;T+SIOBAC0YYto~-)~;~ zLydu+;T~O%NlU{=q}f|{acO_CDN;mmknFhoaE1?Td}K=tap+>ZMnjZU;0uLuqaNlJ z#pvGNpMc{kz79<6w?|vv-}yZmZq>gYR3^kP;@)F}6Pba377Qj#IjR$W=0un$WB$VH zBUoh|qw}e& zi)=_r$n%xmz{S$AI?Fyt0dfb~K6Hz`wC8dug~NbI>1-`XfmvyE*}e z;KLp3f?D*Z`x*V?*}wv4rAw6uFn+XWmNV_vQciEYf$am4l7IZClk=qf}|U9MY{Pc5%Vs>@GNmmZ@Ti{5;{-4Jy#>=+tS ztb69U{z9ZmRP(GhwvlrlO*gQu>AT!Sh%P;CrshkD6bo(62nv3BMnZu2b;@-JC!?XE zA7|jV;;lR`6QwwU+1XwZjcE~X8^8vw4Rguu#hW{f*<2d+Q%Mx13$@(%9*G>S5@q>y zqw|2z4Iz&Wbc&n!LEN!Ks=7Suu-i_BM4HA2*Xtr{Ysx=`Y>sZQQIn ztR>9178uf++!~xa@AjK0X&2obl=}X~{wwOlX`jpb&_e4oaDmu!s`wU>285&x4>K&OI zcB}06t?e9bX_^{#qg)*68|tG{>Ft^nr{Y{3elj}J-_6o~&3?XLugAIn`RAMX=KDXS zWdGyDc5Rk#hC~DcDrWzG+(-Op63)M-ME{pY;(wTw{PW*v=zmR0W}@ZzJN%ZB`Tqot zTxvpVOP{{y=0}^v7s<3`k)bdp(*VbPCHGfGa(TkqFFeGZ@L7h zs07t77R)A00Ls- z2So=#VhcNjj<-W0@-I-3j4(tX6(N8%6Nij6hEzugA!33Wa|A@pg&`1`7(*f+IB-Y? z%a>)97#+gy8%Sby!Al@gpiO7yuf=a;K?No=MH~w!4r(?J#tIWLeiSkoJHw<0m+=C) zz@+6Vg7-0AL?!qD6Aa2BK@2mzL7B|~&bHR*DDu)6!iVgaO z7%SkY1#ckx2QZvQSx)2!6eEGF0p&!L!ZrT#$k}Jci30!zOt6V0$Z}GLbM-0t?MVVEK+vK3(t_5)7I{+}!Tz$b zXxlm=2M+qE0K#=v_w(i@LzU82@=G&O14JGvU$6y!i@bm+t7T|d{s&$0MXR%#F4QhO zq`=nP`@z)Y>P+ll87TPnSkj+ zDgQ<)&#0^`Q4a; z6#zGOXUq4Bh7$y;SDV^uF&S;{0W=O%aUhLn8U@afT=+op6BS72M?MOQHCWs+I0_qi z{ul;i&{R8ng@2SYc~DF*Er6=GtT|ZtRQ=`_tO(hnvOgN4yu$kQBe z4=b6=Kl)6qt2G2Vx@1i)sN~;(8WUl#_C0p`EIe3-lhPGfM6*YZ!dhYvT(~V+7Q#*q zVzpHDKiIJS(nsRRT|@Vm}-i%?MB>^0x;hi@n|{{mbp^WZl&pwbo^_ObZP#2my@ zPzLOk_lyymw=3ovVRz&}|J;>}4u;axoOjEhyjDj6CYkyWL8ydM3JL>S>?Mv%`Wlo@ zPC9*DxmLOw5N}9H6iS|bQZ?# zd=O`GuF>ooT}gi&UJ)ipvFC2z~wJef;k4-^M(a`-1PgLptf!}>li zCh~y;g0;kMfa{J#dDEG9i+3nj+1q+wZ(%Z58LJ#27G3eCzq^(JHiZb#8D#TVkfG}C zL-{iho<9p4)*HgYWN-2hyTIORhyhA#?|yyE@J1hC8xM}RUMU7_Qp~UKC!`C#nSvoW zHJ!i{;%&muc!u`B<4|d;t+(JViW9B?MN~%4T9!)jYive zhNXKIUtN7Zt1I2j8TzfS7Ky4k*J^_Uz{#+H77(X`e(<7{)lvR%hzU9^h>MHX^p>N| z%y;S!Ti(Q8O0l7Zuba{^Xs}Je%E6%rlWpk&BJGOANgk6&5(h|c1Bo;yUA&W~prvJt zB$f<=*#wg!k=-}hxX?G%z(TL2RF~Jm;%5XUl1LiG)6x-Os4ry*g#P_Uot}OTWjuu@ zomB=o(6Z+MLEJozya)_@1IiUEI(xp^nA-ad-p(Vlo`gb{3TFE;UoJnNnYcCUXWh8u6_t6{stBb zIcP|VC=vhF#-CTz8@HdLw@^l!8C<5W1aw{?{Hb8^P+wv~1NJwP8)^w+2^O}kQJu5% zT8pl^>em&^N)HQmIbx&#VK3lEs~&KPxt--kGpx{bn2BEAbKSEOa(i1WK3mejo~Q#m zE<~paJj1DEkG&k`@6LudYfr`TH7IgzSR@axM12xPWmBzOCahB}e>jczH75KngLvHQ z2(Q2KQjLWNP%C-U?!rxL&@mGM;R%zr=w>^$lBpNo?-zocY&GehHj%6cIkgJd4__st=rhFOc@(B>{zT}N+&b^@XehH)&sblX zu2MLPZp+Jd=%XWqSnAGboOWAl1?P8Z)y~XH5r*;8jZTVz`o#z|JpA|LNlBv**y<#$ zZEk1#8M_6weY&Nu1l8`p|NwlJOds4k%8cEro2NZ~|X!sVpS z;`zJmrR_;v;$u?&)q5$-#C^&8%~op09qpWL_F>Ld!c|!5S0X+g)cD?88$^_gR`hU< zJ;$?XEW>rZg-Un0(Ca+@3OwyabIm|!qx^k-b{46T_)Nx)hO&Dksvbz zugCt}TF_XT3su5^WyCMJVVAB{H;d`Q48GV)x^%M^Jxev#O*`Se%DadF<%MhEXMk6< z&2jMzXT65lOLU~$-u+p`nXr?5_*oWQO}#edn+Gl4pz6R28+J^Cm&_)xb@G;)CD4{6K!kj~}U6J}pK zLFeG_kJP@z3mMu?msh2Ch(|nE)2_$mn&ZcuN66jc*4L_GE4fWtK29&2#k=gkuX<}7 zahTjn=*J9>>`-dXzEul+wwIWRCcAu3u9%{~%1F&lZButzpl^+%DB;Y6Os?7O-G$Fs zY!^@1$a2eLki%;0!efp12-X#2lh*0&iLgLuew#tKniy^*0Gg81LeatF;I!)O7kvrM z%SKlLyLp=ouvuZR8cuc&imy%_jyezGIs@a(16%B@UMPDv2YYK(;Mb*;N2M3;Rr>iV z@6%%$cb%DWM4B(HZ=Z6mfrQxp2mIHWF=cgAx4zqO%Ts5lzA+9SdBs#WyHo8zw?J3T z*j*xES(&URhaXS-pry1@LQg1gyg~0;$yE1Fo4i}oo$pZb8+GNm!l!J$?PJ$h)rLj< zyYC_W;Z^R`7AAM{iRQwzTpPpa8HHM%VAT8f0D=e`764cMf^RI#h~ zr@5gFz6Ply&^xnI4>Ve#Kj}LW5z#HsL{s-!6Sy_PCb$5cprO~y$m{1dm*-m-Vr&w2 z@ezak^y_kyJ+J((V?G6{Sdf*RQmk5n&1RU5I}&2UT9NQqTEhy1@v+Zl2&IH}QJbT; zy}5Q5&U>+1-_`+1qO-+pC)l@lU3F#f=kjsGwN#76tc%lTTV3qz#?f^5KdmbzT&XRu z`1Uv7Ll5fehBLu4fwota*=(C_u^ai+9?&x)?=EZJC!&i5bMqYV4c}|YEu-?7kNxZG z^mHqq1|~SqvC4^v@$uQNnp-EMjx&s>%X%b>uon(<@5?F;mqNPhHd|;ehZ9=lGha-@ zXY9V44=W&sy!5Ma9L|fE%-P&x_>XCAv0VP1l_wjU=v(-&g&g)B9Cc6!JTb1Pm98(d zTAy6SDsqoPplTDf4$u5X*$_jrU6s@$WJx?tf9-OluA<^L^6@(y2Nm)0@NdV-Yoc&Y zF5B&WYl~!F_jes?ovhQa>`6`O-$wN>OT&0<#vWkg?@KsM<%??Don7@0P7iy(Af7O5 zP`bOxqsetm=(KlxHdz`!1d9wyXG=&(I9iXgzGTnO>E=wgYIS_qLmN~ZEjNs&<+|w9 z+jXPF;ZCrb-)ASI=0C!-KaN6U19+hU^sDjrEje|6{RlXvfgqk6sA@ildB1!)*?N0z zO?n&hW+ZW7)r3X&4%Dtcw?Q1MvTl*avZS)mX;HOE(WiDFlcU0FGM-Kj z`!kcG!aK#D+ch6|H$FyETsP0n1uz@guBwd^-?l+^&)-!}!mhX;pf&tev&Jk}vUtk4 z&jp7y$Fr>92cNf?C9b3Aq!$z>YA+AJbY5nvi6g5xmEAvGj`>f|(OFEw35`rk74LPw z0=`-9`VKq~#eA5*y@_JHQE?peJ->Y%RVq?F3sn>jm%#WqKl5>T$X>4RMDE+(*^IYx zx%>tY-xgSqZS(Ywop8I7Vni#QXj_+YMy6}D@ux|q9}uIz0}+N^&t!>mX}P^mx^G%3 z@mjTkkr~nehoW}tV(;eomxbPqu}^cn|6y_aZNBI_$`O24O z{dGoj0s$rbzqE$`-$*+D%H8~5k`5y)3++!v*8ih7ToXbWd2IzgkAhVg3=uU%okEbm z2r?y^2unc#QY3^MJcrZX6p^lcyPz1qKOP+?>Fi->q3|hS5e82t-Q08mW z!^R8+T6|LDv*Y>|>MF}V*7<(bap-#8aScaY(!s?bHalvtfd8QYlxwqFD9%$@o}Qke zk)|1g%eHJ)6&zf?|jEeRCpo_TSVBZ=h*CY$zi%sgwjfMg(Th)sKKypgz;FcdjGzzY;~LwCrllZXyckb&+Dc3$@xPY*%z1eNyxuxM!C}=xr?ITG%}}dP|@-mNu)9--=01^HX$0H2lK%O7~k}$@}I!aGE)YRrFpN9-( zpbQ~YJ}*=p2w6X1mtUGFB%?1_=y#luP0+*$sR1w!;smtq$Or@Q?+6S;XPdhiYwD2- z4SR_GnWBFGL7H1sX^>)nfLEssedCWgHbRBw^6U@QL60z4q}0x3;r70v-vkdk)`KWN z$OIV|C*dM?2?fU|rYK^8a!ex;Fxc0Gk;eTc%v!>bR>v)wK7_*&v$jik{mT&0LsVaqd3Hg69N8sL)}D$6Qs?M&yfyg zq1Ym2+4()dnA6{`8hM5DpOA$Nz4VCW;Z(9BjFOoV?ou#DL@Ky!+z^YKwIoaTKoL$2 z6C=S1|0bJ4=@VMx2H@+7gY@O+dnGw|a+MS;dx@P=1bVZ*f|kt&j*jSE^Kk*PbBKDi z>8yXIq9G3cRdy2k(*S0S;11-%yOM9HK+z!ih7|pv1T$z9HK9URf^m==PWEopn3=>u zqrI1aag+!ybR<%TzGw6}c5yBg8#49^&eRz8S)U-cKLTs{UNK%UUx0gisCs-t!m(B( zL|g`_)hb6!4w9`{goORgx+Isuwj0zw!MM*jdBT}uIFTX;>0>5EiBky3SL>l)p=m&7 z&c_i5$^^{;@~o5JeBnM2LD2yHFEw#V#4mn>LOy!^BCWb2gi=tT86kfw3R#9GOf$e0 zr5`v#RMW{SA&tD*l;9fC1+}4H9t&FBKhlnrEp+uGYRl*>)S`Ml;7)6i82!Tyw}+^2 zX0Ufz51o#L67?q^ow}x_nsOL`+avU064bmnJGkHT=U&%*;$|#SC2V z46@y?7O!}k^@wtpxtHKvEf`oaA2uP7W8cj5F_}w7s5QHn$ypM&%pqd~LqA?t0ZDD+ zqOHIu4rIP>D5HQ9$16j__)M>re4(pW4CFq6UMpi}K}dUf?jq)^D?wH=puZvp-OF1x zi9=<#^G0oJpkysB2{&hJ;P}09z5sU}E`u$E6^}b4e|DH9Q@$WFg7-X+pP2qybO@wj z0A{NqkPSlXBP3&8C$Dx|EHSR0Ur#5_=Y$kPGO5JZ_XE#*b2&)^kn;~vBG7rrez*&M^_a1AxDTVygwz+fzV&(*_$oh|seJz55tfY# z-kfBiH?Da!z-=AOxC9lyhW)&Pn-@VW+k>-!xZQvbX4xrFL{^jNbYlK!6)dHS(ABqV+G2`>OMEuAH)wD;FCfD7e* z^su; z2Z7<&0$+)!AM_+J#9#CVIGWT-_=vG4>R}`gQbkRA z1Yz#Ie^co77Q{)R1qvws5qJtxxpY~|cRd{a*EW2?CuYyGKqXnH2fl#ztN9;l-7&FzOCzIn4Uua{)ZN)1B%i)}$de)rmgc_ju?| zhb?8Y8Ee`0inipaB(PTSZFBpe+c)M@!l)Gcm?M3R(Z*e^8d{nO6~MxTzT@8ZF-;U+ zFripfq)kck9O!Tac0c*trYVLg*_W=xl(NNP*dGhI+|6Y4WOx_{HG&hFp!YQ3ndu2u-FP!yVu2ggUX*OuDc+{~n05dg z?JOrYb-L0jcl#e5u?xTFa2$oXbz`^@8WTqv9z znoRZw{A!kBs@$UUb9At@yRiu+zieB^D#7kj$}{VXePGqftB)#F5P^5CqiRe z{j;e(A-=XAkJVizB^{2}skh+eI>#O87B!lzA~x;MSH`Kl^|yw5k3~-&9)+3gP}+3g z*%Ylzx8?}dYZDcxW1qz~IX-Wutb4o6vzk7$T>~!o)9Cx$7MGio&CB99mdH{{Ug(8M z6~#*z@ADEfzc>UMnRdap~G0o)oBz)3vqz_|7f% zFNCz_|GY}ZE=Qaa7#eNGtN5qm^bD8?bN{RMTU$>0~|ZuRh|< zR`hD{8|9pbE1aS~G#>Ku@+ulOnqj_GPF$b18tN;~uwfIg=_cVnZqCHzg?H>5y6{Y{ z)~)t+CmSwOUfyiUL5j~;*sc|SyLmnphU%XFZ1N5zf8wyZ=tB9&=|@=AwNR zF6{M*)zs149|(QdW3E_|b+}Z*Vea2Q!OqDTD)M4-yI>p@J?3+LHCrO3y1Es@+~UjN zxzT@&Y=6klr#VW^4aKfrwS#Q<(^E-@`NoydC^}Iaf9V1JM04!?yOLR+(-4vCDleQ>@1W`Py8b$x_H#_AlgkkJ{mNpDw~@-I>x@+FelP zk#06kj#nDx`qHhS@AaHOLmG$}lPYE8!#V-o(2dP2VX|XhOueNXV`d$;y4%Ge;CNTU zjUMtEm~mJMvs_D~%iT~b;L{%Qwm*KFX%kg&y=lnM=&_Wu1UN&N3cUXni+RnA6H=!H zucNFPce4NzdFzb{cfThPLOh{X<&|rH5oH+F!e$WmP_M%eJXfuB;Rf$ z>!TfT(vQs&>M*n9@(Wu^^s2G*_^6~xm&#IetA)f~Ln&8@E6}W+#$Lh~&%*Yk&Yp(b z#IB;|X@Vd$9$jsgnt6X1CpKgGvN)un+S$QowmT>Mp?{$AmT;*i9PrxLHbVb-cpiq8 z9kUW~t0rrT32`x40r9Z;lE?ki<$^r5#kCYIOl%Oo!vEfhdE$Q3^YCPqrjvCgr)4|e zP$LQ;rCwwYsYgQb=Ij`-bX3$K@fAGs<)HI1+@!t3C2*;>u3AFOMa05b6VSHYFo}7W z;~>dKOO|JO@lsMX7l;bMJ$kM;wU0e@HC8PV3m=iCV-lm8MU{dHa*vJ#PYd21-g>r~y9LLH7N9Y$H+2=64fZ-#fVK1t*$)!S$q- zYht6)f%(SckC5#tulG*={C?{QhZdi@^oj))J{%l1HnQXKI7$<>*mAaXm=3y&OFS)Q ztlH@cZ>EpillJ;6Gpqrmjv=i6rpI4Mi=-26h!gR5%mvV~lVYA22C`>oIV++VwHbDM z5&}=%7bjJYAqJAzV(@ica|>>5V~5=~YV{@HQ5Zd$4P5op(=*$^*j9%(Y6XsO!P3z! zTHEUH7soZ@2h?~mVi=CmR-0Ml!|*<)@*k|+#u1;?mBl9g@ZFeuEG3dXQT_Tg4XV8{ zMO*Rbe+{81n%ot#84c?f{LAt?ibltKeHw(si!+qlo)(rZE(+Gwo^29YP+WXk6IbR7 zRw!NB_TP5uu>}JIiA}Ub5wUtJygR>CuQP-k3qsSttdQ4YO@DH`MGDK=@6t+l==Z#} zWMBdgd8m&@(uwPCk6PeZDP^OYct5Qcd4k+`ZJWn}&1}wOJ-SoTZ;^=Z>?fqa8zYSNw=ih4`t$z(rom-wK~@i>~bT2jPO)Yt^4 zmB8V*O)-yH=}rr;G9-(KUqgQFr#$Oh&tkvsY7W+g^L^H#ZS3gV8=mPZXj}EyRD0jc z=4iH0ot4jAwL_sA*ly!q^{_Zh27b&FOT-YDUNS5$w#Z-pwWrpJ4Z=J|;&-5H*DwLj zop0ec&-Mz4`rv|r0>P(rD{9FW(P7WY#Ic@EwucfQL$uBft=z_Wg8@QUYd0R~Xii zyD!~-yxgHy+MxDY{TOMHI+k(pNno^--eUo~E}>>qS$6Q`>yPZf%%mTWjK#!Cf9s<- z&5@E_tBf|QX4?~-`LUA>Z>93Y^>^+gPfqs4Mjij*Lpxro(f=UsouUKz{;cnGY}>YN z+qP|VY}>YN+ji2i-C@Ue-t=#tnfX8S%zHU&s@C`7Tvn~Bi?h$(pPg~r-k!t6sEWCx zfwNiLFLV4l6LQJ}s4^gp9``x;BZeqfT(Kq^Ntgzvu5jztZk_RUXfkPNFA$Z1TWWsl zlXIkb+liASI{Eq7hDtRhUcc?IbSEb%H>ZQhtRdvEC4al+gZtidgc4UHGvb=Z;wpF) zi>eazPtSNJeR+*R{==Ib9JfmI0+s8~Bjs0`x{uG^`w0Y+8dFv+&C~mJ0p&&3cr;6W zGgnKoWI?R9>!-bJS)+x3Q1sVYhgK!($uDziwF33x*sLX{cCoLei43}?2NY?GgNIUb z>C*OJUDLc@D>BGN;#zIc75lle%)hg_&lv>BsRR0z{RHW&t(>B3=2$vJS57c>3jbyC z6)P$gm}Oe{Z@o4DN$Z+1^i?)O2LK=^{~xwa{r@?qXc!p3Em9o+56p|5^Y<$WUMt--5BqRFas(;`ERFmo#`m4y2B%t;~jMqHI zIHpObF`IU@M!y5@U56YL5po#{=9qnDQ|$@arxVu~9-b)|Y5mE@Ny_Y$W{*kwt{ZoP zrd!uSI;P6mlniurTm&4mH$aeEh`)1yQbdZpZvl-z509E+I6z;L(e?2$538X8o0}8C zn?J}Xv_5DSL-A8azBH|vu0-fyNBlIX(;l(k?5EY$SoTvn+7c;7s&Ok=2swDNgNh*Y z_-sC2(cYw!tx^gl_i0ubI=8Kl8$ja)1J#RI5T8F@-Ro`v zf`x}TWP(Z$ys^5H`paI$SgdGHh2zsh0qtUsan#lZC%|8)tqj?X4uag2pU9AOCZg&6 zUq0`$d&MF~Y~Tj&ze%xeI{jC4#rm|I07Y?0d+F+jn|?9y;?RrQeXZeQ#en3$k^7!B z?{=2|xcRB&w1!DS?J%QMqJI~=oOL_o(#;^I3?d zm$Ex3hFA*~16`hFdw%WSDM^;t zNjxFXa#u!kquo2A?=s<)NXtn<;Vv6K6H(~fPE`urJ z55I={uXGDXfWEySzY=o3Mx_tTzh%g~ZXFH*qq=Vr0_mZ~9KE-v)T#GmP82(5W-%I04Jc4VZu^zr_YtcZ+Zlv1kvJw5usy>%7G+|YXj+j9X24*)dozITE8?}N zKr!?g4<$=T)SDtNG%$>HW@ z?A*13_(QxXBFsrDtt0Rp#?GY<^%b=;fWc1b=8{k{o*=B|(TlU4_8NjSAm!ldb;<~B%`X0U1YenWs3ZXh(!;@3?$ReaA! z7}Zf-Z=`qSa+V~S5x3K&_B0ZKN2lc~2@pA4Ach>AXmQMH6vP;MJSKgs_#NF=_GR^a ziyy|6-eORbxLt%=8Q?o1$*tH>h6n&9vs`lfOOtNTy+#2yWPwJpl&xc&6^ofc%cfaV z7iaSxF_a*njk2way?_(Z0PlsT8Wd#PCYMyVPpg`CY(Adm;s|qew-mFtDURw5ZOG~3fIkI$MY}Q9?|_Z7ykZ)Aq9PwIubN?I~RjKu*le4FGk#o zOzz41m+pTmtLV&J&2xA9g%bT9r^YC`e$~8>Yp|nACYRwk7f}dmS{;xjGKG1i?KwE^FlND6HLRT0PAdg52qXCzU%zSpPJ!2bEopWPwy@&-$GkA3 zPM3o>H*@FM%FT~%fimx^7$xVC@{~$j!CxOTMn3MM5K}7Oo56m!c%7bA)~fQUeN)vT z<$56IirIsj$nqh5-qEV5JC=CP_G*sl_e;k<(?v1sBu>~TI6H1he9@z079tS6t**8r z!!cRn%fU^{N3IjY2x7$$7m#`#P0pg%Jg);Q*Na+EbRgaEQ@k^gXS~QkELmt*tMKbl z+Z%ix_*ST&XNV;!=KZf{gu8cM-Dri9x#QZl;)na)MArCO`FV)phlav>)ti;gGWVuF zumZ{6b4-KAIX(r0v3r0z%CaS-ULPco3HCGA8gU!<<(#5PBE3yn(j(aT^zddJhUrr0`8|S_qMlEaj!d* zEz-TUR21F37I@l>%c`7IQ~rLiE5#qweAR9Pi>@J%_&NukES6wfilwt#_1fP|{E?31jmr~CkZ%iq%4?&30}ltpYd0jW6f|p< z5+b>|u(>arNu-sAx@RbU$XM*u^=OR#2=OU2j>p!ue0C>?8<^%^HhBp|J#8!Y-r%jk zf1h&R-dCT`cVG%Zpe6_f426 zhdXs@zpNQotsmm7&8|wgB(pPuyS9#<6y`T4uRn?YJf(LgQEorsGBTA6fScb6ELN>Izg}#hpvvY1 zW31T$7Oryawi6-i1p^CT&>7mJVj;?BiHt?DPa7c(lxVrrz5v~P5#(H66+}jOozoH| zd`$$UEjT^Tp1EYv0X=B*1M7}Cq)fekVgl%k??U*1HY|XbS?kji4|AeHK+vgAloAMs zPfX3&qh#lIkiwVJh(?0KJ^?$!E|ci~3MYu$aAQuST+Jw()CUVJSu?OE^c@AgiygkY z{JCq!b@dw_H(qm)+ft_OA5Af5INxf%NepgM9rcQRnv^WJ|eZoaa5;)6HaPJl&3ENdI zU0Aal0;BEyvs1=YX&$nOy8Dm?4Cm&JjKeg1db;jf)?$r$FgKUvL53H-x_Y{(7N4By z`IZAq>xXSK!>d_yIPpxi-oYZRDhv=2D}92$JS7_>E-6+-TcKkEK#dPnqt1e!|1e{j zJKM%RXB3BnvRo1*!;WI;$cl>#o|b5bAPAMx5w(Fy5tlGj;$41jTlZ@^|F}nAt-mT8 z8dIctUc^TG@$;&|UpQ$=`$t@-HP4E-7%nR#>9Aq^ySJ<1ZyJqc3dgV1ILZo&10d|6 zZS!pIckui9WzeF1RzY-?yG_zBKqJ<$MY63}^H8G5Tu}wANG|RTjoY&*7nD?9b8Dz{ znIFo7!cGp2bkg{b3uYzbDw4Y4;UE_6DF&(SU?Y#hBVeGx^Usr0y=>|AC=#vd$kkoc z_x%rgzld=nM2WxL;Q&Hm;=mzZQ%<5{s8t7<0qLk*i1K3$TlLI=B)d8rq=d8@087B* z23_(}xkra{y|@&YNVJ=;7JYk_7E>CwGv#AJyqB;LtjT&Le{@B@LHH62S$#x-q*u`6 z`|LPRutlhqKP_IG@#J!5+0eq?yioOLCrWGD`CeTBXk%c;ejG+?sO*W_VDtNreV58J-@@wXZg_A{g{=~?J2qd z7C1nCAsMDZk0lX)#`5a+OXfn#^31X6k}@rrK|MuclV%s61oS=YY)@JWvq>eoH!?8Z z4meO44QU0=P_Lr@Bog$&ve2cf{zMsXkXiNUco`(85e~R#+3zT15G!7i{71zE5eVHc z6ML>Tih4hx;-OTa8Qk@^{+kTRhNgtYWB`uw0&ybqI>nMkU@e3gpY62uBlj#3R=@Y^ z-3Ac^FU}r2Dnc2@FMjZsGSFQ_TaL-C7LS+2bhk!L5O^LYYZe>e)S6zO1U31T0_-7t zp0+U18`PWFu}IWF{d>p>P3rNCD{!7X7>hrrH}Ofy!q1~mS1YUs)5MDE8TSK!nD#NT z;?559`Xe$W+%L`RI4=4Jy60S0m(3zp^T3)LwWR1DVs$B?h=}(!}FTYt5BdtfrBxAe|MQv!h(qhPJPvwvf$FySjS13 zTKA66*y`#-c)0ycD1fvOGJ&ph(yZ%pd4==A&@f53-$Ff#m9HO206*rmHPFkas-3C2 z`u*Tzf)(47mB&C;OFxv`)izTKxnqb>-?e5CNLFyXz@&lVRZ|T1$Gi=%0_G`07gm(X zo5l43%0~>J#e&aQ5P=ldX!4<@)Q5W;<1(V;nnAtyOF`%(Wx=btn{x*6&XJ0Q)1P1* zUew|Dtg3Q}I356}mvx<1J-W9x%JrLv!0`9=T_?tU+gCKgOmcL}Lv@1I6!d5j34Yrj zvKgTp0xv>gVwQJpf{ZU_qOFUXw8XUCbjI#Q{vIv$9MZ##@wpGcKs$=bETk-5aVwf> zgeQ80@I>oImC=H}A6txCqY?yY*^jSRFDS7t@$+>=KR=5nQD$4rN7F9*Xu`{8P0vmS zS)d9FzKlE(`gR*%0Fh}`93fb((k?Cd0#%`gzkO4X2f>>2?FkOcV320SHx}kkUW| za=keKqdzNWjwQ_fx{_#xRa6rHTrJ;U+A(~Ns)Cq*%&MB$LIR;Q2-ZPlLv|j7Mcxer z-03psk)UCL?byb`qnoh-j5IQ9NBQo&>*Y`RM&9!Yp?tcMU$Y@&bxvC==Pl$piX7P?c8~+e>%EI1c8q@!)0}=deGErl-HQ&H5)537n*90< zdi(4P9q%Cj^K3r(LJpaa*AXWN&1a*F@DqU;K)uem8vSe_6ZRvyOO;=jM?AwQ`yo~2&)VpJ|pOF~b6$Tm0JQY0M3;-V)JwUkoIEE4yoGly&`Ka;6PJKatQwD!Dyh;y|vR6VyL`#@qh|B}a zZgRKH?;*ivw@TPW-1euvej?^^dNEdv>l^^Q;$6|te_{9J}GpEL12NKN8|TK4Mq?T9N;&QkobJ;4Ei{}MSMPDac$Y`Lyw`6^eoz* z9_xwbL?tL?s@33$Mq#GRr#|-Q{zxiFgP*R<^E3+R6w7GArFY+nlAT77C_(VCfW+uD zSA3k>@i-$heGh|W(*E1~*M4IkP;)xwM&gFjs8#e9iEO-UBCWjq-w~21 zYxOVFF;JSw@hTfjUnzB(!$D_kJETQk)o1u2AOqKfdrmz&r^5!kE0QX$TVQsihv!EI zM;lCR8O`Q9(Ag5{`O#SQ6}bzcV~*7?;9=;*W)>KSs!Iqm9O08SFsQ|5a+#xQ!XN3O zPGG$3==$dS;)zdb^+_lb6WD>;SnXEG5X+M<|H3?C4ycfLM^CC)XGDe97 zQq>M?EH`MjG&lR6X}oBQcGrFtfyf>T_3U7v5y%IpCwXX=qwQK3{!9YDj=nE{?jvlh zwjtA%*dhRJW}k9o2x_fN%j|a^>OO8`SneK7TrBH;5(9OEs$B2JL1GOrp%yHh08CiW;13HXf@A^nR&~`<8 zU&{m`t`JkX>H~~jYy0)-OUK9zOMdvk)H8J1dGabAM{b2cR`Bpt1kW9-9#4_?lT+4% zAXU!YG6!4Na3H&nASES>NyV!2<=oYAs?6=E0#E!pn>VHsXIP}Yh`b8XQKM^-Q4Z!1})e^DY85WS+9we;&)Tqem zBq%rBYWghnbD-gKRwXWZq-bK8=zjk;x(o=+tTJZ54LQuaDgRAwv1`dp|lNSM17FEL9ALfFaJI(l2W%umxBuNK3foC`N2wE|l$)3t++hBrk<`TK?A zG?CAr%Jq(Ioq?fD_m%z>U)oD)bVOKz7l9N;x-^ubbmQ5m zBD^y%&!6y4V%pF)*yFhCW4tXqHfR@fR~nLSs4-2X5Dc%Jt@H&+}v2?}7UcniqZt&Ex*JUCGS>s# z4P6I=v!fyiN+ux}q6j*mL(M! z{f61ohlFT`6PQq-jzB8ej$g+_=!b+D$B>FA)@T}z(Af9gBcyrUMj4|_C1nH0EP2N&VT?L9s{ic z_7j7rEtn%vDHH;cf&opU6vh@HRAdR#JXyrgL{9M^S646K2ZxE@812AX^@|O^R%MXL zyTRO-ve$GJ_3@=IPRT`7R5DMp7a;}@2gh0w-ERZ-uNQqdgaj5WKO`5Z4IQHYAwmca z3ZY_^IFPW;;ur|0V;>cy5asu6N!Er``nDvCYYPa%>=NRmBh6zWWE>|n0Qkpc3~))= zYeQBE65hthZ1>o(sI!n?O1`A4vL|E|_XJqvG0O`GHk}2N;(O2$SFkxRZ$@asLGbU+ zFJ?fp0YgZc;I$y&0ZG#%TIz#Q41_V-V$MrI_C=IT^P8Y5LzIv|S? z2A8dT6)r%hjtwM-1W%dVYkLYZL^1^z1=QVz&KIOYfhULuF484VhN>T-Im*u}f07ee; z=U=UeG|C)XwHGV{-z>@ViaJ*pPl^D+)8nU%Z=uR!6Ia2J5+iAnBf!lj-$ko&28(zRFt=(7gshj_ ze@BeRqrY_J1_!W<4YtLn^*}I@G4yBwCuL+EWmvvk5OU7=tU(#}J4lZ9Go(Db?=YNJ z>GUkQMuk8S|Jz{)QUuIGM9u-sjv6^8Q9=#K2q^NqO**DR#k>|jz^qjlzM0x90~uWg z$)oXpja!993UV6AUa7SS9JM;ToONz>U^Y4=#LSoZ+l<_sn|>;zV-K=rZ*FRi*#%<= zx=YNT>ql5j%UE$Ku#r`s`xV3>vcTY)p!vIY&DlJaOJM&eJ7ik4t*Cw+Jc%LaK5iI< zJw;dxuzi2$Rnaf?hn|g|K^$f0i@d$L864$AGXP8y(rkbC4FfKrD1gQBbW)@U4gZDG zbs#rj)gALPA!!C6HOM{~z*bynGL{E~endcvFTl;)pZET$`lOQc?_Z}RtF`eWnK(5e zpmSnfLazjb6@QcF#WsVmQ^g4}fYP90!sJB?K^Lq34cK}oKi&_b=2M?t`q$f<(X0H< zZSuwIA}pF1yg7T~Ze5Ew0YE@+bqGqVMuG(y$c}z6ZHdeNz~%OXFlQzfLilkY#b?KB zysXR%wM1yAE%9M(-Z3YOE^)#Cgterl*o9PvlSqw(IhN3dlOZ(xxm8WjpZrxhl2@jQ z86f!vViWQHq>pQPx1$x6GqY;ioo1VIm745_udRsvncMJpu1E$+hPoND!d`UTZ zw*9kw4ZJx|h8j$D%>T_qKLW6{#D@-{Fb&(wX&@S1PNreoPqK_B zF-hB);*IAvGpdo^v(LkcERn2=eZngsv6Zifhm)0aiPx&g;NBX9B|3F8J71$&HL{xJ zTclPCwWxK3g}`R#4SKnD*^JYs4YSuxW@^WqP9lse7CpPkR8Q@?ULqG!tG)fqofMIg z)Jf|{Xoy$EK9*_jw^+h3zJQfBSQJZ<-rD-g9nMq(2ZidcypJzgs~Ju@_USA4PXg8vsz{~Z6sa&!HoANao zX?O5>OLQ2hUA9QI`&wf1@tw`1rEtvUP@(%tZr_b+6xWYswE1=aUc997e%Q^v&ZEdC zn-dAcnd94k{1i-5K3aWQvti#A;X22VKfk`tnInbxb=`8C6p(;a%kh3nN67KVb`gwA0x!nEQK`t)YHbTQMsS?+kgI%9!0 z4z+Z%W0t#!JEgTX=-uZ=6q*|F+Cb;Z` z6NHHK1C=nHOI0Hv6rHJir8i#oD|~Ja4!-?jg5&!3%$t`L^W1VEybD|oIkt6&nd?Qq z8P3@`*lbHP>!bTew@s9D$g79yuj|O)Z!u~ok8yK0Tx;)(k2gzw z*ro#(+(tF9o^1gSNA6z^-=i>0l=5~Z#GK?^PChQ^HC<4S0`+@8LMtEz4XYQYIG_fAtGr!cr&d!Zc){`Zp_h? z57qm~oNVQ2;bv1Vd2jTpDQ^exkO|L~Iz4gwu1kH2d=w@{tcYzYlGaRkU-!aJ)AT7iQC`xKC4R@<>(a zt$U}hc{EOom3~${MKap#wxpW5>O_N|+)TV3ica>;B^r1>Mk%pc(Ll3a%*0zuSN@^$ z2_BaI>CR}Xi-Bsl$0yqoO06-{fY+*Qx0H0#?FA=>EQua#-%ZWdr+0s^yE?F05Woqs5`);=9yUZ6I}N zW;s0D{h>cgvX;yYa7KG6y+6?Qll9qR;<(XCg9sXu+Q`I;=lfLm!qS}PTcB)D^wNz- zEKaqFYkl152lKk~=-1Kf39FZY9g48B9FwW)M4Itc@Pb=ARPy;~7!MyNeFz50Oifc( zskc+Udxmv3Kvm_7t(M(LR3?5g`N-=`j_-{;;$f(cZp-~-yvtl!pD>bW{6JF~%2dnl z?Xhd$sB;t&!^l{BxJ-CiG22SY`H<~C_1K%TiPY#Q#YHmmk)lm7Z6p%y`L%HIVZ3=) zAfQt;38s>qGvUemZKh8MROkAQ=*fS&>d^^fwHaA0MN+lDrQ?eB&4BWRYwM~1<(gr$ zdG;*eA*G~WR%K#9Ss?o)C8C_z<=RT-9y8;E!WTX~^m_LvzjvT}EXI&*~bP(tMK zJEpOh&7aFR`f>9LG56RMDpn5f`45kS%<1_V$V#L1Ybb)Osn$Nx#HaK2?}-{TxP8&+ zHDqR`#meW?G?Sk37J~13mypQThPQRT4i&d259Q6%#YmCz&WgxeHbgNVD{jxn$1KY; z*U7uSRlc_moePyL-tVL3nJrzbv9X6iII!sL19eW4af5A{#QsQWIW%mE?S`>Q`{6T; zvgzc&CtkTZ1J5aUjAZ8*zxI!+@+v$b?-ac*FWNu4CxN>rJ}xhx$x3$E>}BNMrai1j z`2vbEUTzfO;hmhIHo@B`*p4Y?mvBaEI~^)@SHr2CRIfXq;5|Y%;#S@FN^myoG6%Ts-7;3~Enl z+mt~k4d_w&V@#c6X686J#g0#~vkM)a{&R8AYtHO4rU8rf`A_Tozu90Pzl9wkzQ_r@ z@9KH^?}_=}5O)4HlKtz&Nc(TX&UZ~24gEi|j{Scx>nJ^fJKrdq`T>yPn+gx$3Q5SMT5J;{HRT`fsWN zm1xDODaWbDr)HJLWN0L$C8#BSE4olkC|^@fE73En(la+OGB-0aD1pN`sM0giGagFL z%uY{JLyS+!G=tp0OhHG(L_^ESK-17jx9yg+7ojE@uVViE@h@-TZ*8g5UK}X$w~AN! zt>XQ!vjv#{sW<(16_0_DiH4D#;h&fE*Yy0)xIqE@0Dkye;Q050z4&GeAgev;@go$H zQ?e2>QnRklBZrgZhb9*&vgEOMazO!gGEGiViwx-t)%k^qiG=T)MS?(qBNT?If0hXl z7a-J)gb36Pc^S&TY)_pJ%(I+*eevz=WjAJRxj${WPF`(!?%+gizGuCNVw`5REDM#K|rN@xQj><5KejSTBkd~Cps zijePz%h!RI=-Vx6D1t(LBg4V>`gc9a2cVK8<#DkkcDX5N1;2H?AgCYVKts2|;_QeB z0t)0P-@Hha2!6?#I6CS$e0_g(5n{pwE(&^83PF2vBB46?R7nNOG{ItK94b3}v_z>B zZ}ABJdiYE1!63gpo~Hp=_N zI^;q`;xzY1hD~J@Yrq)8Zj4k1UvzAUJLFhW2k%un2TJZV6-iQU&LiZ}-1VDV&l%R;3@YejWXQX+$JYyuVGOYA>2`ary-BOAlS;WKIodI3xs zjkj-p6vgjNaTS7vMNEVOrG~j{7{(p%E#TN2bI7 zEKbSrIt?&DiZUPy`r`&6m-GYo18U0($m|jlpd&G0#aA3Bv;c(5R}64T{-fg&2(OS{ zZMINWWgxqjd`yv3=b4?>>SL0_D96QJc;thG@q&j>$l$277OV&f!nY|mmkh#4^ee87 z+6;{XAVmdatO_XPgO7N$LmVpfEeHaB>v%N384;$~J2j96peiYDkc0?`TXnpF$w84A z{tXy8>V=Q2MK44Tc@1a=j-o;C2OduH4U9DHV-a!WB^4||4NCk9+ z>>8I?{}F-xOJUbxfaE8|kx)PKOFg)jF8v375Hm(B zEIa&k27{6^IVJQrFj5o~JY}5t8yE@u7Z@4z7Z_=LE1@uz8#8)!#V3ZE{R3FP29Y&G zGLqZ_a15G4e+t(O609Dnz@hjV(vLJi9x|c*A=`mt zwaN-Z1bXWjKH+e)Jt@XX*DZEXFwr}uaNu{btcbCZ^a^8xz$p{>i@~r}X&OL#hn0vq zrG1N_JOT9!AIHZ`7<}?T!c$xl$$QkmNDHk#vepYF{tP5Q&ZM6;xdcHlM_J8o(afXp+zH9FCUy8qCU@E{Xb9t z2N=0yU{UiI7&%e=4UDAz3yc(SizE8Kfsq69!jPE)3V*2rq41-G2mywZg!n}AL478` z70UUI0pKyVz4(?|&rRg?nxyxtr;W}PmdVJPV7n={7D&|VTuL|v_0hSRFfd}ijDMK| zY3b=Q+4dX@_U0z$pj|SCuYZA&aesl45tjm^e}R!f-@r(gZ(!u_!gc49q=0bmc@*B2dVgU^Xq8QuXoy!0VJ_2A7 z!8#FQn7Z#&>HG&bAe9~SJwZvjKNZL>sJ|9mh*HICm;pq%(>E~EljC*l{{SPukpf#& z1%t3^N`WUx+XUSR3|k-oWGTxn7GRHx!u#b*ZKNdiC>p} zsT%!Kwt*2S{UGJ4D^21*c?Jo9a%?Q>q$j`2viT+oq<<3yBKfBT_J2I5K$WwS+8+tP zI&BDz{iYIez3Ls!D3C)1LLMPa?x6HIM3kqep94sXF(*U5&I2fxL5On{mPQK>szN^F zs$7LGMiNcB-7c$hGII~JnR#t_Gc7+HcZlC}+JKUu?-W-E2PW|^>ibP2FDy0Qqi1O0 zzox-VVWqvRs!nXksCR7Ys&KO2V1KciA-Qp#hrupUz>K=K4;bLDLWAL?ev@}PeVbsD zZ#|MwKHtPpcE$zU6BeS;`B~2lq^*x2Zte7~lcYc)6ps!8Z(!Mi)*?-+_;24dE_LEBwc`0xGN{|XI z9t`a{G@R^s{0AoxFDam<4qJuq_gBROEv>NWr2n18{s{7VJw5~50~>>TNs1k#NgP^e z@T&}6e?G_Opr>EIIA!1F?QAhpSLCq+;$s2P3Amv`D8(#9CQH>KtGVWQlTOy1EE+x4 zBJ50No|k5t*%fBOH@$;@E6?7#<;p|=Uc^nquFfI~k?uFL)#_7?+_SU6eVR@skE6^x z658}kFRMeM-aZFQj1jc&miJ{`a=`oZ+@JYM>*ejlp&|>6b*RaMNj(~^Znd{()t)1ixzH+APydF}GVc`0k{0^9uYw3pVo}qEV=NB3;<9J^$RFm?`Pe zbQvgNwv0PXC3fc9S7ki5P5XDv@fz*$%C+F|_AON_6mp(jcY8-Zz0|7AUM9}R+HsBV z|D0C!iH+7S^x?cAU`ahowB^}mTNt75`F8un?i%>_e=T3Am^=8e*k!%JTs8HE2k_x_ z4TK77>XvO?yR`h7+;MuC;dX7md(2Rf-Aq_1jB2&MYTc`Gwmh0360?KxX`!PlD8c@) z`IWZq>n@VQOQ(yJ$lYHj>U(ke=PppODPY`hfdv#38+OM%<>~&kXSwhE{);)v<`6YT zuTd-LZhvWp=kbyYe#4p4`8vl&0%9ZNw?)kk6WiXypcK%N?fAiSw?q}*q(#4Ss_t6G zX^?3NCibEIp=aB5w{}0_^a^%Ne}HPF$0-Y42ge($u1Td5+tUu`9kp!-9V`R4TRzF)6N5h1Q1O1Y%9NEpWie0Vu&;l~O} zw!_^Xx@bJT`>O%HQVX(Ko3F&SR~sy5dOc7%F{j}xxSVVYnvNEk^x1E-HP|lEm!XGSJhE zPAr^;XBbdO7J6yjONG*WZiFVZlr|zzMpH7fmbdeI=ygmj8@wX$YxW>&Zv}e^%x3g5 z*#{n{$Eo&w@hQeV9Caaj-%w!P=w;~44-6N|=VqSh%&>GS#AznC`_q+J#W|@4$?oSb z3%a6>a=KT4TY8x|Y07+Z>1>=0*$523Cx|vW0r|-I%#8Dbg@-ikpEu;?n&zHvh+%I} zZa6PR+=C(+pYrVUU%dNo=VVlRz##`;`E*dN{485aS}efmx^cat)-&j0J-sD_vpLw$ z?gpdlIBm&yVrFC7avQop;ZiM!;nl%a)plI>w?q zL`u}Xn()~3b&~qXC`3Dgj7=uV;__X1gsaBb>=`*MM;Mk;LoC%*=THN!`l)?)Hc=+M z@rRW+BXBa@71z7AO82qmYHo^t6eH5?yb6^g{kgU=;3Cu%J;n=hpZm;-@TtVD+`?t5 zl_y7ft09eEOZkk4f7aw9YcIA6%H_ubxkXsDkE`ZRB8&cwKhf_ z!(nUEZe-}!l!|ZN-Pjb7P!QCj^@3`4Wh2%c7at5~TKCeYc-Pdaw$PqK{&{pKS?zII zfk_AmSk3Ijub1LqI-ROirSmi#zPf=Wee_m>Iy)9>gO;!+%cwFC*l4;~m7{zm?R^rh zmTQb(VMr45_k=gR7CRqoZk1&+EE*)L?2h(#Ts5u?k}R@bU%}HDHkULo}fGGFRq7jMXi(0Gyh;B45Tx5|9b438a3Hq ziMfoqsx0oM@6(?iOKrs40>@X~7&3c8%jkhmh z_vpPN?@+xvlwaU`O-V)E_O$a4P9AB$?9xt4F8*S3cI?S`VD z=rcL-@=mAf*bB11k^ zBi{3MVFwh(Cpu z3lD|PLC2}3{X0>lU17}A^BVNWpSQEQhX9>`QK=`Gg?Qd8G)Kz*8ngGjr-m{)Y z;SWEL9fRd{oTZaWe7*0?>7LECvnxOI z-!-vf*4E-W}s+zrl;4lB-(%N zp1j=}ACP2%>agiDn7VriUGUfYLkwt9zbXu}A6fVEZv|KILx{zgaa4%lC=BPkE z^-)|sABb!c^^Slbt!3o~^R`}c%m_Ny=z*W?`0+x|MyDlG%j$kyY+7jOA($YA(5mcg zSbd~UijAlr0w=xx=Hqqj&xq3VWeiZFF^yJPccxqVJ{R z8Y{nOfPoj7QL{=^-|Km@9PKvN_ea*h!6In&j^ln#UA#Yk=lrIrIhwCy7X~NAcw5+* zs<<{9L#5;u_G1nf<_%ra4>)l(AAR-Sk0Q)JvIZrj7U}rFBkzazA7^`-?)m~9d@K^b z<{z0{;j}N^6UJr-Cj?>d^^RW1`+cVq`t^`)Xqa(O7`rU%y!($j+OpIdkz)Beliu&b zs~39t=G-2I>F$^QoWf?xd9VQ&-RqH4UVP)Cbu+>g0kTwfM43mmCKo_4TI!RDgzWMP|uo^f5S{)&Yk zc8~BOjHTh*I=QUt>_wtY?gxf0IVul!=n#84!QCqKbc(&4wzj5VY#;lA0CmjwUAF0KDixBg2T2n`zx4Fe0i-nT-R0088fK)<62Da32O#RE?5k)br&3snrlTYZTc=b#AU%T$?^Nu8q($OAo+pzmrw z={qXX!>5d0Dg}z3{!1zEAlt|cwx;($V+$SLgdX^9p~y6MYgwFXJq+L_`97MEdK<1t zvXXplsT{ACRZEq^mm_82geishWH&xKB5iUKAMv3mpSXl-X{G0!gLULXE+)O_Y2~3R zwE`&u>FtS&{IG^br9q;~*G-~?Oe;ONG^?Ej>WobSfBNIdeQKIT1f9c8xM!bFhaGR) z_We7_fi>E#rQ5b!;ayPYM^cc1J+ysY^C0Fml0RCN`?b?(YZ%=dYoP1Dt+ zOseKj7@U-dw@z|JN-D2xsLmByskN+C`?X<`@%{ChQWAk&F-ZRB#5Tag;@X+T2<2=M zc8-xuBaWg=3d5rv*3=o6XK$tBiQnKY&H5B^k4b>9?=WVI{ttzTIy>J4uY^`S3z%UX zn0HcU@o+8A2h}ICkGO5#Z4OyDy=xz^gI^~LS|&tK6U+CSe?CV|?iP;f=tP%#^FwPC z0a-raaD^^4?0Q1FnnqDtou$qH69$M@-M=*beTG;mY`RpKNBYXyj`VrOmR z%SZ9yuJ^eXOVo<>j5;+9XNHw{yP>?tVK(0i3kOGbrIhWgUC6n?CGP%dbsYW9y|K7E z{+zsdw#w)ZaN?8eRSF3CoA-;^+7V)`ahZ9&mds0w4{<`OwtA4d z4`0C>&8a^b4*wH5YmyK^G4vwMWKzk4c*_coyB5V8E;}-}=E7CbK~|69>{}Z)3R}U3 zh0Nw>(jKq=(}D8t+BbcflkecqS|2m$~_TbKa1V*4^gID$=f9I)a2EDdJ3?SOLT+!PBFi&P#eNM~rb5Z#6B(sD&5L{%!)=>YtiZ(PR zZB8r6c-|Q36Prc;K~6Kc^d{eGpws;8LiYkK%OCE^kp_|qsMSyxkTg3U(I+;?F2(T1O0ndpz z<8Vk?7`W<1{Mr*$-J9}{n}r{+T=3yFVAK%7^GF=pZ&47QmBSmw#6>G^N2$^24-X6g zFvOwY`O(zw)LG3q7Z6{XY$yf*B#U1kdki3qx*#--rBo=VG@lKW$PN_A{Lv#IcE2*b zPig5Vio~;XV%8c*kjJ9agetEYD;wFBQGd~4ox{>lg;*qvnq<@Iq&Qn33E}n2!UDFs5D0zY80KlF_jiXG2J{ybmAocRP+Ufhz z%B${*(#gR}k7Di(F!-u}L|v4xD&th=)}nRWse{1AJ5lAHX2IlKATng6nq@(0vT?~> zn`DQEl&8!;G5f1W9~F^UB(p-oSA;zB_hmVad{lj`+8`TFrMyx754j(6BtCH{ ze(p?7pJ^j62>Y^P0AuQmn_Ej?`WkUH1e{+ZN~QIzgB@V;lMFUmAest=(e7;aKd@{v zOv?IMU?-l&MS$7h6e+>TDqh+X-wPi9AoG^tF0-f?8gb1{sW&uZ0$t^43I13?SBtXd zkz`uakzEct3Te^WoEb9;^n*$YA^(FJ?B1;rRlZh<=tfS3y72I+$*u1yJX2sOeuI&) zR$CrphaCjRxkZ;Wna4B+lz%L0UGv^%>NDY6p1!~i}G%2Ih)R%274Et^jG9>6TLCR|zX66YCPi2mN zwrkzwelH(CM(LPhAy2aE`|@Uk1|Y;CNR$vMu40ceN;20*z_K@O4!+pZ+evuVeIl4C z{E8TLs`+zjo&K#P)^b`^kl|3(Fu|K?vE$%{+BC}wqPA%CJ%|f{p>w62n1Y!X{w~*& z1t1KL4;#s!0}%6^5)6S~Ax?v8V{B>0osCXGc&`T|;b6mSH2aI2{-t3@m> z;L93ROP~k7_E+V2r1&uv^bs1L%_JF+gma&wB(0@De+i9?iQBurVw^w}&TK#9B29o! zH7b56XUV4i$Cn;O}8}&D&!<(S$-&-DDl*RAS zt(Rr66w6B4$_;LzEP1aHv8_M)Ze?nBRowxu?iQEHDkSctlk)Z}t;g3T}p)7}IcJlUeNt z5q4cIUjZe?;9Q^T`r#NB(}R}@bNHT-n-t#KIeCejUD4*S9D|d7h=AQf1S7ED%FN~4 z!~FA~(|5036OCJqQJwXZxEy}zQPrnUFRz=sUZSbrS31L7^v}~b)&`+Lnw>NNfds>- zuX(ma5?X79#)@M3Y!~e6)5!v5#{4ZgY*AP5qhCanwzyJXs7hbmc{`fOkehtH<>Gia zEbRs2cS##Ryy~kxQm5v}%%3jH%)Uoywc>zx#;Se3ytv<^=Q6~Dhbxd9k66@(F<_!U zJ7cc0JG-9Tq8Ag{i3e7sm*=+>kr2pt-ws9usAS^7M`lJrYi|d^e59vu>G`F})Wk1v zVB1|-K8>c&HJ>%7WfjB!T=sqxG+6?-+J!q;6@&G|ihv@{l9sR)mU@cA{n?6Rq|4ew za1DwSACHgUpyFnJ4{86Y;O~?N)uA}mL!`nYF?5FAZ6b)c&{nLQZl5n~7GcSP;2%Km zj3m5XRBm)mB{&+z^izYXnNJs#y#rk5$m;%%4u$J2$W`uAS3(KphLW0xhqODJ#kSp( zQ>2GkKKW9a@M3wG)r&pyR0s$9(tObehS}skjZsVz-mv3UIx{fSxXq49aHG9OCPhcUMm9aLH;T4XeTS%@ zJU(zRBxTWKCZpA^^tEYgOT~+(xSKMD|1+#QVS1GM9M;Uz3_czidQZzo#H3Eg0abOq zsf>w+)rixeF7zI0)yf}s*@P9AG+eWWRoXMx?IX)pbss z9i?)%WS-|>0^H{;qmERFC!k(UB!hTS8q9()SotA(j^M>i*2DkzD-sHU%31#5m7`m( zgprZ(HsgHP(F|G)gKS70h8W5?N&hcA{D&4qAfgm?Rgf$j%eI}-(^E~mW;z$>v{cnYB zu?eg#^hmp-s)yB4a!fu4_qAhc$d(OoTI1)8(CtkPLbYuh^_B&9Rf&e#tCEWrIrIl)zupp!EDO_-$5X6lJqFCK6eVv3P1X?G7 z_XAHiDCSd2AR`G+!5GYH^E-s&Oz$N4VylH(u0-`(9aB*d*Yn$N=ZcZb`3U<)*yRMK zgg#5w(99!cY>qv9{PA8Cg4Qxm%>II-gOQ%`0RbR5NyIQ_g3b7>PgPdq2Y%~h0wdH&=_W>J%=^( zf`dc1Y-TF5sn!`o3`f1N!B)R(z1NE@X!T5NMEa*WM~x@3zHsyoJc-u3Qa;!-->j>t`BIysNZSMr8xY#o%s)Az6|{CM*fE`W^%j!MR<6MT zdfNOs8w(yuu3RpiU1tuxkcAZ1?u)y^;x*l%Rf+zk>gB0OQz^U7?`lcEq5Lqkb`+Z& zsDNZcG!0Sa?~Jk;xG+Ek>-cJ>J_I$D9&Rf~Yt`-(8Q zpz_3j8A=xrv3h}X?&1Z=QY}}LgL)2YP@CP4PmJW8sK_`gmO`i7m>5Qg^M*gR7Ujki zDtTZnlP7&PfTkI$7kIwK@KI?TIQv0|CjOFV+LgVj|0agc0o#) zU5QZiz0%P_xywLW`IY-iuR$6t{z8DxdIEM)beFz-ne?5K>~6u;EG%M}hlDW00a4n7 zc6q$8Var{5Z2-m~pRKmSRI`qWOShrZCoKJWHr$+FVq*U_Ly}lYXuBHJ?8;lV>FxOA z6!>n>HSZIR?X2Cb#x{u6WuU&#Y-4wy%rxlArJ_xpBB0TlWSgeCkMB|G6_Lla^~T_f zCa5Ybhw&_qtiy~04EK|zBWeuV5lnPLEe6}K;S$s!^w&us+j(j;o~?z*wexsWt^*Ns z%B{AKLi?f)n=}H5Mf6u4M+AJyO~P#%2p4V~qrX^dXs*(xK=g89ILffzB_X2muCo>H zBn&MRY+`K*G&Sc?^ju8#0f(EC=Fz5G#oO5E5Whs6&+!zC&Yu?{j)>L#3FVH8aaQxs zS^*1j04}gG@gEAcU$>6XcktU83dvqgq1=Y0PjBsLp4?#;RFHVIJy9?qaO@G!UCV34 z#xHZXp3M*s4LU8;`;~otiuq*yln@T3S|ktEH6cZfj=fTXtT1#)o=NS#<&Ieo(Y6JO2Om z?F%8`-*;~R)(@k)Zz6MH0RVb&0RW=^H_x~J$6$+@gNB3tzvf!3EdM3f`rADGf96^* zTnXD>!_%swA?S4qsg`5)6mWzjZ4rDx)qG3j0@9`%Nrxvow`k%@5NFG7>zc!o z-T)Po=ZDanurRCOB-CtVDlfvv2w%#YxOvL#MjD5ivIBF%blX^vyq(42al2&8bsUW> zgF|x^Hs_l@z1(Cq76vk!y^@Sgn_z*Va+Q6N-7KssLg(smSEG@myWSGz`5_e&rNi#n z7%Jg1(^*B9C_@&a-V*Rn%gowadz!=W^nfv)RY^xP4L*a=rMfuhqHJ$anRWJ((atb? z9d(2&V^!&_ubPIo?Da~07(?8(W6nTX+rhANZX|EwMe59)zT3nT3&w0q9k%kmbW5^q z9-~_rmVqa^1?%~+O#dWIGP5>If7}xuA|fvsBXnIO=D667K`SV?up?)QC9W+UD-~0# znP<5*GrcRQ^_ZXU?zVKiMW-ZB7#EyHS24M=*EbB901-}~*vUwTCEmbojw{_!;mXI^ z`|6q25W0Nhkj4+t3OKj7$kpk)T+^j;PIe2d<&<^fDVDZ>lHgQ!mPsyq2MoKf&e(X| zxOiw*)DL(W4mBDim>b`CJ6M*H8gBOg91X*u3M8e+w)XY|M^iPgo^?Q;0G1G%Spi

    U3h2MgPjvSB@vu@+C&19GZnNs{80JvCr9#c8&;hnlI9 z2OmM*7t!`rf`r<%9Kd&`GRp`Y;N944B8Q#?V*L3ML3otICk>{-?b*=%9`SbsRw2A* zrw<_f#ia~P#;#1xGta|zdZUSIW^RRc)LO6~qn7|rm?S$1Ik;BYZ~vT2nhM~!9smFl z7thAKig8#H)j!WA6n>C%M~^xC6R$*i^2zuBDejghaKAPuqspW`%M<5h9jRLJb<)Dr zER|1L+^6Y?DbxfRe2;XDiGB`~^QaMl(*ao7Wa#)EI(kzBy!|W$0$|hU%^Dm89)G&8 zlRSM4u?6<^Xnn)Z4$vpp#FgNT4+CO%7_?5mLwP@@_su-k?@%1 zmJx8^Ilio;s()REj$Ee@@MkplO>^S&AZ&+YpoXhA3G_~8 zrsl&bSZQyCp5L0EUmHhc#-AYcMwuIA81f-H4jRsp7kYWpw#?AE0Xr+y2)=%MnbXIT zA8D`vK=<(ylajQSht|}fkTw;(ax-iP1>AISuM&h;E4me52om>lo1ffYPWY?8wwqQW z!kD`D5H@?AqiK^za)dKd{rU=6p>%&H?3boHdMBI68%VSx+6#3RZlHglbUK%fm(^(BFr4Qe5E7c zfNJA!?R0?HNv0)Mj={!*?o0(T!Sj<*L;qlCclN98t}C#sL^gqEyo6o}^lw?Cg?lQ$ zx{ZC4${&my`lW@B2!m~9rv~t{Dj>;MB)L9fLigYAaMVFw1!Sf2iAT0{c}iILyA+{H?8$bY!3-bgYYyv zEsoG(1G=dDQ~h+1xn)`cq<+5;mP!4P13d|yWua&l!J$mUM8^8Xv~fFtpyLz7_jV&< zcRBxYf^v2%_d7_GH-T84XGkj04wA1V5e{|aog`xeLBjH|I&q=PjT8VkhYDS9pdBb7 zcZ#NW(_8{(=~PjUQA&~MU}Bz(22VHdV+#xd466;@$t+SQfrGJiB4Hoj=g7Lce)8Z` z>^kCoaO0zE04YfZ47x$yxTpw~5iC&LjPT2y4`|$HD_Z6eUF?aCiIg=v?-4mF?%mar z*QC=|Hc(sA+DaVTG4A(p)Nu51I2o?axmsw)$;UbY2%V)O4ToFv4@9+}s?T!^ z3CMFy@2T&0GSXJ}%P{3U;b$=cht}8u=2$j+1vU|NmI;&GP5f+bwrn~*-e?c zyS)8}!>w=UFI#DIG>H2c=R~oB8~vgV!>=)uXW250&rt6DQ9jR2JXtIF!;*+eAI4A? z*wdsbOC^IV0~UFiOZivoC}JoNFHVT`&c*UKUhqkhz-7`94?pC^zH)8gs&78szYs1X zWg$N&x;y0(meppHS?5Cd)%n(YIwS07CChn*ZD)NAQI4e*Ls8@OBVr#~E+ea-YM}cY z=(g8N2I*zlA$efw*A)#mX6%!pUvfJLwo-``VwR5;GAE>EFyCZ!_l|7W8qR$msaK`E zk*3Di_KdF>anjAKX&@kxk0X!`)aMNOFf}8%QX#aw785h9;+^cQZ>?w0(t+Gp9XPRU zXdeaAaqtW)eI8t=&1wTk2wz1_l(M@=Hg{To4p+HpUxH^y-wG!$*OYe$M3#niMNY-n z&s(bp@_D+RnF>eiq49MJt+*WH&vI3esSG;Gc68|1=ufrVvtEc)lRZgmoeyh;pS821 z9m<56Bd7mZgmgfE;Nd@Dc&xWZnv~g^pOL+>J5|NBNs0iE^2!)C`i=q+eowm8URp@q zMP7lra(I-#+(3ghJr8(pKAp%nBpqpv?+am4CWF3|29uiCh!q$XErcJG)_{4>%(>&? zwo!=iHqH|(XJsJ~z_vQ<2`#T2p36{G+`n@(x$O@2sm@3YAU)I|ZG|7wsb2V=b>_Of zA1javuAtJmtlAkmXD53{z=hneqz7yvMl|JVs(`*v!T#imhiqR@1mhAEv%l9krJWpy zwvg*@Mi3yMBRBM|pQb0I#hYH)3AcN%xE#`}JY19{`l2_BLBGcEOlYLNw{H-hR6gu% z&v0$uAkSR<{?pV9UM8l0MKK_eZZ5)et@o(6ZX9?Sl+Bv(iDXpAR#ha|Vm6C;nJ7IE zIwU(xmq3>_;za8=Z7xM9`%{R7NQpU8HL+p4X8g*tYb+#;CWupocLO1^2JyV|VMYp2 zxac-{r=y!zKl^Dr|KPP`w*j-?SIatW?a#<9G__Pw8Y zA6a=fragT%Hsb?F@S7;@NV;QSWlP}l=&_lVA;^*x*lH$h)`JI&Yd6MAn_!c4qVS*b zQAH$FmFY|6ULabux?;hfwQfyufx{_PuFvw>X)+}uLV?VyT9Ny+IJx3*rf(gL+)KBK zvI?sz&$V%{Tn5|3(nX8%o;X`C;qbU=4qtMtRZ?h7UCDirPzQg_Kl$KN4~ zek1DqA~Ng1=UH*bHCXS!qx=u9kbvih*H-OK>M}yVU}Av$_n{cI$mAng{L@QfYPb7F zEh`HYR@5I`j>+#?n5Ug5WR<(XG}NH+LF(EGk6WcM9l4A}c|aBilm033+~R^?SbCY| zv$EKd9lNQm>wwGIeVdLPdh1-p_V}%csag*u4uvDD!$7N;^MYIKuFEgVQn*tgRD2gL zeiAkp><-L7HO3~!d@EKIL|%L$YjE+4DP!1KXE{XDt4!@Allwo=v&GE!Gap+`ItmJKzp)Hbu-S~zp% z*!Uya)NISKqwb%|zi#saw|4r2H?lL>pw0@d1Gd0PJ|ZSHr!PdxBf%rewoY-oj>tcz zta80*8+|f{vygL$?meQ{^Nf3B$Om{Xl8-%ikdxa2fjFDWwyt|_b4qe zX41ae3pXpSXK=hGzXWJpg$pVV4wMJ36ny+Ue5WqL20(qRce;0UQh4klt-d{>y;@N> z#>N+TO;}=kd3kkHSZAJKW^hDee0hDEpvRBV2<`?T7~6h?;J?0o5taP=3CZ7zkn$t& zJH&TIsO0|_6(J5*R6zMsLFm^uDY5pw>1*#7(a??)v6njaPZ;Q`prD5S^_ zF3jI+l#Cb)4k_7~3q8s&5}!)XL_kQ0IsgP-6;{%MI)DPDTvJEMs){Ucha!Z~?xVGQ zSw;2SnJSL&sP*vHb;sA?&?kPh>9S4J?Q-Sif_`v0jRw6(Z*ZV~Eeh<}&?_46HFRQZ zWoBhzX2P;Dwl=mjv^8Z7!eyq5K3GU-1itJii7%J|Z#UV3PF?8JzTW~aJVby@?N6~H z>XnqxE0_jC*5^w9Oe^B5-wJ-%ivThezegwp1TNeHAH)8WS|=oc2p*w;pMoJwAOYP^ zF@u1QUC7_}M=m)bLab)+s5~V?Q78sR5rkbSa$%8tNkWmqVdli(0iruz9HAU_1XjUX z>=q_O;P>gk8GpP`I?G_RP#?p4IlZA%1}kvrJLS0{y}JN;7a}*wiFUaLbZ$`M~Q$) z95S{He}TUkbG4ubT1un`kwdU7bc1_ovj-H28rcRpo|sco+7n{RbZYDhsz~v6Ua$-* zGR{-TUoND?*$O;L5+1!=DLaM;UV=_k+?aiLh3h!|4&0lHEHmO^FOl50T3f~8PbguQkYHIRYuH0d2~>t(fN@)@#k zsq*XrS%uyIVt!ap13B?usfo*2o#eN}wBaBGc783V!LkwmkTlY1iUs&)ejv;Az$ga( z)`LI~A$QCO{CavuQSDQ~jWe{UB*bvaORtf{zw1HrUV?Jaq=W=%K>iRwQSVaZOL{@N z$U8r#;3@0mfDj-Pdzd%O0acJDf24q?if02k=>T!>gMdg9L$@WQDC|kg%)!bX`4$01 zQ_;psGUz}SjnE0_V3v!(lN%a;&yGTpP$;gjznjk8ME;nc78HxTIrasft-xTS7$}jO z*vt20hNq4fms`4!P6^YxLn$ohUn3xv0O+%h5Sc7Nbf)E zLGS;p2mMk7IN$&t433N80|nB{r;REhGMI$OC9;k8homnvB9P}q_4EQf5n8LT&B9k| zq{hjd=?Zj}%Cl7FWrKkA@qZCCtF!rA4{}3zX~DK!s*4~Dy3_z4wYS!mK;xwI{EmD^ zyGG^pZhzGi)-e@})M`D$*~5i+B&Yv`50C%tE9c=Hkp71kUe5gS2t z=hnzSK%pNhdrO4W1Nr`8#K)4Dlfnto@b`es0R&NQn&cXQTTt7VBk=R-!^kn4EQG%K z3hEnM7u519RmV{GP0KFxf5(1E`LV4%EDL^}#lG@79|iSu3^&cjMb+Fw1^H*8J;gvw z>DVuzp+0!r1E6^>zi}jmBF053g>u0Hxd<^mCNV&B5jlHsJ8B>T@}_?%Kj4}oIg}`A zR3SU5k!V6NP}!V6L^cDo>AaR?l^)^*KL9kBX<+o4o$%){~lVn8?gSdnt3lNjsGJ#SRz@ zSkEvC4vm<55RugKW+12unMVVmd40k)x~S}R*_3Syrlie)PtD5>p^7jt-xO` zIp6glwVEYs8c-^HE-Z483Vkdq%WN6^ybqi_NdC`HAl?DzN!Jp_^X zqjEwcuXDo+02s@O(^9P?NGdaY7HQTINK(f*Dc1?V~yEc1hS z<{nA4_5e@yEIj|aH>z;IsP8+sQXrvXRILdF2}+6yFpm%!0ECNNQui162|3A&iAntB z)s;3W$EioI_#{$Tm_Gi~(qXB3mQB)0cFGh(ruiHB>HG)sgZPd7XoCqiB%HsIBz+@4 z!trH)kso0~(mNKL$5{!jGt??+4Fw}C+=Iw?VhMv-8d`jG)x|i0U=+C9vczOda3iK9 zsmvljfyHe*a3SUi%!lYgj2)nGe*OG2)|^_+kP>cGiJHz`_3N^litpMU{qjw2VOpsn z`>0`D(!O>iZy8AgCS`F=HD3bH4n0uvc#2_U5ApZfXy6WX9Jd&NC&at917NQBiZ4O$ z4Tini&jJ=Ld^vqxF}?X}vxK-wenPds$dAy4eCbnNks0+1BYI%y2wfT0sl8d96cF2PXsOv9#bzt0Am}h-ot!6(QI|&t=bL-_LtEwp?5Lz( z(L;cEnR~1!zSpq7`q9h2}{ zShY=ey>1+x-zNaLKe@X$E?>Brd^!hj_QNB@-c%UymQC$Q?QhXs-=3szVNz{3+pi^z z-}!vbVIy^j-tH|w`CAS+#QBM^P=IeuVADf;pMz8*y-%L4EHYMt_ zB2Bt%%{*K&(vF(TKT+jEF>`8(IZIYC;?{efj1U_ZZ>=!7KzgIsyX>;?5cV)wdD{(S zix#-xy~JSD0uv1tplix(HJ{W@8x0x(Yg(ezHyDBxhrcLXTtqjSSnf`={%OB_2`|fM zSQJIGP#pbpYFbs#<9_25wFy$c?!0}49$Hl~hIy>!jqk@`S=8cAPzWx??X2TfSXVDn$6mBW za*aZbZ~+cq>)N-4HeS|PsB*c;OGg^sW!q?rs<%D=Ftx2}%I63iO2-xB-dS1CWQsUW z$C)(%lApRjF85h+AAlD=nS?%&vYXrA*l))}<@pe&s~=w}#NfFbw(IZfv&PZrHtwlb zovH1{P1-7Jd47DeaJc=s#kY-9bjAUOr+xBt7Wm^626#==9 zjNK=1E5AP38k;6MlPHPzb=ZA%clZOesQAK%%xQD(Ld|_IlWSe)nz9WC+DYrIiG@3< zeb3M7evLBT1JE57^h+}ydp`N>b@*Yw@kLh)V`rJ;_WrH8a28A%hF+sXAI+NVrF>7K z`wL%u{1vnl=~Xib_$vB>i^S=ZemM2rWAF_WC6Ttf!3K)#I8Kg}U{Xc%UQ%1;H0BT8 z{)SW)wD!$`ZDY}9{$P610Tk_f&8_EL65C-R3KTG$N~mz*UImshft^*Ap+zdRJ(mJv z=NKp5#;1BfzV#7&W&K*)Tb&BIvXn&R)yKyvw@sGx;f1iIw72>%?&YW;^R8Yqcsw%m4 zcd@qlVj>s2U`;V?C?}cBf7bZ*XWSua4f5TLqluio>Y=$`68@2(dr!mUBV;*IpKIvr ztoA(Wyr*EwLf*bmnd0HMmY3+PnMEwY_f&FAali0ie$lAcOwHc|OV-?*FBr_jQ>66`} z4qr~DgH)mx9E(CEyIO;Wpzr6oe*m6_W7Oe1J^1j?n8+wO*POSlO#J!EuCu_PV`x_t zf3zlgJt6A+ zVW!~OX#kpR`416lg8o&pWn_z0sgo`}Y_R(S%vMZ;+tICm1if$)S`*s4N zLp9)hy$ST(^kT>7!W@a)WjxuZ5o#@J-+M+Etw-5#{_$cZTV3C})(B<{k-~OqyC9PNs(vII98SW42HfWbz+$X(bS)j8kdD zwHBsq2Ica{?!r2^Kdwa?yFMx}K4-h(YZ-3Rmz>79Tupml5#UH|yjjb*-w$=vw3a8a zl~Z-_zESD=W6)fGf`Y5I>UqfUwn&VsN^c}y zSbypKc|Yp!8{F!KWqgLKwsk4x=;VDI+Ec5Mobr`L-+8B@^E)rnW^+C8I7s6ff1hh} zGvac5ISY?AQWO5Xua&#feKO`lc9|4*CVd>LBhLE6+@|E?l!)TQJJd%TXE)i36h~L( zVf~|yD4z}cv#WUX)jK|e3k>~i!1Pi^<|naVMt7~(mG#!C(KDk>!hU_T!}(WL8T2_L z{r*u<%A*k;;&{|_DhkVKJ4n{@i?H7n-nPVaV@nJ5(P+?v*=@8U`?uQ(`z|FfLJSCUH(5K7>McS#_x+1{Sg| zZ7k;qJ7JPW^nkxhbt6wQmS#ECMbAueD)XHhqWHlzj;1E`#;@J{CgjWm4$)zKSCWghVNX5Ue@rL+B;-nK&{AuOXlsO?Ska-n*dF`x1%Zr2BHNGp#$OYui z@`}_x%VFL&#)#lrDj!`}?{HTcwsHSyz67;CbGE`7%=VL_yvqY+)9&O?a2q_ZvavLO zqdWEVOlhLLlMZ1Fd#QWiWCh+(4y*O`pE6f}tl z>XybBuKyyo8?w3~im_#QR6=Lu1PvsR*9pu784^zrVqka{f$V}DhgS>%nVs$mNYC?! z>4~jmGoHW91{UqXUM13KV!I=e@dN9WmFe~x9;PY8b4xT_2>|ZDdPy$6D z$b>>-z`N~e(E0Lc;O&L+CWH*r=+snAo0Y5Rl^ODM|5> zkNv`RA*J9a1`CK60BC{y2R+@11aCBdq2j~;l6M6o2nzL85(BwfIk;F?_EY-3CzFtE z7TCH#{XG*4T<8ZWn5RU?3^;2-Am3H`drx`6Jp>FWId4g^g+NS|_@ypVbI><5B>;0p zAQnhy;xFDD+cVGo7jG7oB=JmfcFrf?AXSdvCkqn-cP@Xmm1p=~_(J{xvd@nFkSb@{ z2aOQ#i^l$w+@}FLL@osWUwHE+si5X^+hazeE*SEYOvxZY>ol+&HOf0t`-mFZ>$3g%~`zf+bXzXN=`#q3W3i={F}ic zLmYZQCZsR%oC*LFPf(oPo|!+3M{dK{*K-gbzUg!?gp`pr1D+D7nWCgT<)3=9&cF0# zu7ByxHviI_)k1o+b-Uoh&Nalun5=b#$fO`y&s0TtrJra54B4CM3V{>Rcz0{$47U$T zX531(5K__SYa^uOUO@%DwQtsFN%^ZTRT07j-?NmnFb>Ji5$h`~@QDgtmoBuTZf76@)c(eRvU$VaSW*i2J z|InLXb&2`$qW|j6b^p?vgZ{7HT)FZOy;+|f8*)N~jc5QKkED-t?~>|Bj}YDpV#i;0 zTfD61)S>w!fUD$uO`tzNldFVK7LQqxpA+D&so%K`0I;P0TW_Ysg^|g&gxf(-_0G?Q zWf+9kqyS(8-*6v5FD;P;rzVbhr0b!f6V-8rFwP^M{My#`@5EGVSlu-@h4&idDnLUN zbOP)NEo`t_@oQC_llL73&2jO<{676?0vw=TM#Sr7H15eeQ_} zS8vRk-zD2vbAjuy9M@3l0CUWs9Vc^e#7D8l&k*6yX3XDt=4RlO7i=qj9EI$HgLLqk z$LS=CfdVIgq{4wMWtK5|RN3``{_@QUqThTo5?EdF8ZI}d&geJa%(Hah(}<4G#7eNN zv_ysG|4+Wzl`7X4SUPzf8IU7b)?h3oSi0PW7_LCK4}vqm;Jp+@K{5*v zQaOCS31E|$9sa7n@CytYd{_Vkx*#-Eyo5SoA&AP(elr)cZv6FjkaDLmWX6z*Y)~^eMXfRJ7 z5wp1^13>XLA~rbTWufDX2Ru1D##wx)y|9@F(c<^nD=^a-t0Iel#=+s!`c73Uwbe0A zo7sYXudwLCB7 z9Udv{$E{+Y(x!j=*y)t$ZyalW;&HXZo@V{ZNL$*dh+f{*U$%dcb=+n%Zeix7&$*XF z{j+!%z0@(7HriOCy*dVWhJEH`;3RX<%^mBMXrr7^(YdPY>K@%pE1)vu1XW$r2OFeR zU>T4Jcev4bg2THn)0+Q6{upACG|b|_X#f05Nu5+4-@V*m#(UH=XV5d8lS-!A6`8g3 zV_JoCkU{anTFXA4{^eG<7-%{xaeZ~r3)((|`L2u`SPf&)j~iGSspz95aWYk%l~GA= zG`PO}&2YJNN;me@0#%Z)X*JK9Gcvqt@>;C2VeS^4r}sHe!|}<~nYwMDsW0D}m-!(elQ6##6^}Tico!Dpqj2m+GhM8_S{BVKOl*-DP0# zics=Zw3o;3qpaxtgF*8W9p6hfnLufZ^+;G|aUag4f0OYSjpBUg2g8CS%NZJ!Xd(wo z{Puy&X2#f~1jhD$$bM(w@hrq_D^_FpAK4(#wqq`7X=*zx2XZ0t;N$T1cC@zhk#|{` zflUle_I#bmQWJ}1Ws(V`5c926y7ec18!?%sOBLKGEDyd>@z%jkZWk*p{hiBP+VC$-&tk!1t(&_Zop!{cON?aj{w^m;>wav(z^%m);ii_WR zPkP&+^VvK*d@(V;d;ID=R-82`4>r%Tbm|{B+YN+}yf&Dg%%Ciyb5gBRW8_{xEemWm z{~CV=b9snMkj7iMtN+99I^A5f!1LYXXYP86W@>QlM zWyfuayTCsZRA8@H;aJbQQfj&{Hy>Qly^rm%FsFDa48y;%vFynM4W6G>clTM002MCm zO_oc&d@3~AJUj1(_rOvHU*`=dquenLWOwzR?v8hlU+nv5&{=8A3eN;^c{Kzinrzjs~5gYFZOOm-X)Lur}LOzTPCCj z>e2hpTDToW-nOq1ZA@AUlFDyaoThtc^^Ok-zTUAngM8r~!qrCu&s)E6PV~A=wXS@% z1xEF{X<#($7u5C?5AG|>cRz(ggMU|9q^e457N#ND-h8IM)oLt7oZjSlbXmU&epZQI zw!W{!s^vP9R1cLN58+{WvgQr+ct(%y)vl7t^U&zi)@}_xa*MK{=X-A9NRcS#G14;d70VQm$Zn5SWUFqf6_i~6;xWTHL2#bc^GMF=94_}R2S;_4J#b0(eYD4|)7Xz^Gex~lso1|; z{j3qG9!LdsP|D8TWe|5GG7oH2_a1+MgHyQaE~iA4r8%>9|0uqZs5cf>%(!M}`+NaR zx1B6olS=3P8RY5?trn{*?{)i9c@Y)dtelXEb1fOW3KlP{Pt};S-bq+hJrwt75H}BZ zy37fVcSMVQ-bRRiZ3O1ci zkQH#-GU~Hk+s$^x?>}|oT7Tz6!I@kzCm1<{-b^&qH9wVqel4n{a?qYRDGt593OBZ1 znk1=gVu*p~W$$!Y?)i<8(0XL+P^2^;N&A`}-DgN`T{J*f*BCL4I%u&?_@o47D2wy7 zw0WjKCQ-(P8#*^qRW;QrwGj&$Bv+1Vmz=sekrl%i!f108 zwbA3lXo0gE=Y{pU4WW(xwXkCrorh6O$ed)*?NW}5%;n4Tx^tO5==3C6mOTO0&DTzN z`TJ?m!!6lHdoKRpwy$Xc^HRu0}Z65y0pIsp^S*>`*`%lXFZtH!d()q6Tvo3yBxxWf zPE6GPmW*Kmc38K+z7^{nxWI!4ZcLnKoyj|$Ok;NP8O@`7?Q3N0c%0rFruCerRZr)x z6ZMaYAL_SFU^ESb6OYKhT_SN~-v!H%dGSNQgRrL&z`vA^=N9g<_80tm6j?zRrM|An z&ST}D!{d&xkWgQ$tXt9Okh`kdXcv!mNbc~~evHbGxI%ppr@@CrS;&0SFrG0C*7r>+ zh%ry~zB(a_)+>GToD`Q8J}rqd?tsc*bo8#(D+2y5HhS!G$;c?Sq46iy5$RkLXbRyN zv{4$?9fx*GZsKce4D`ynL~^RWRdhlo8WrJNwS!O*Lxkn?V{m@CD8Q3b4N>!M;jhZU zZcEh;V^S{+=z0qc*+Qllj`5M`Tgj`7?Z|WSVcc|#QAKcm!UUF{@z_MQ$jq3Qsbx0j zK`#eTJq$A(5!*m6ejDATqqQeLZN{NIsKwXUWsZ7?K(tyHdY|~39@kn_J!cgu))QON z`^nwZL*WLDDlMAMIsuI7Ujh+~5E{|ld?xy^vi9Y~W}*W!jEerW;G%0+(&QNC)$$dm z#%Dses4tyU>txq_GjSzaRpHPZk<{F~O^d1nUliW`W|}pIoP_zVzd(K{q}|}_RX8Vl zOSH}MwK)0m{NaT@EQ?netC^CovaR#`le_s)yL~Y~3A7mQQVcbBBUz{B>o4**V4KPPeS0E*tJ-3qTIx9iNp6AV3NM zfH~x|j#aSQz3e(pWyp{`Gy*`p+u$5_aHp5zj~QraK$T+Pwd8sWGqT&%Oi3s$3@D%R zC$H82L)=>iN46zfn&K2QGb_c+%*@Qp%*@P6F;j|}nVFfHQp`$03P*YC*}GM@s^3hv zO;v|kgoWux*pisHE-FvWPu^-lnXk8!Xv~w>O$- zI}$|UcL#qY6NVs7W!XSE-&Q`p>R$WIZypxjjd0bwQ5wJv>e|&p!WVm*km&=@Twz=- zubHg)_ijZC&jR)yRg9%lV$Lps6mDG>MK|sUmIiE7z&+>lFQem53VqR(PG)> zo#ZT{dVW&m2u&bDu#FtjL*;bJQWJdV!)c?X_m^Lu+B*Xkc=D`^JkPF_I=saJ>suDeC)ivZBjjG&2DMPz60! zddCQgj?##3`i&a^$%AHQl}~V+!`0g~m%`$BpdzW;`0ILF&Y7(`&Lww9`gG@_^R>g& zV`fW<_}MkI6IUUoLVbg~RNiSYFy2PvlR}5?kcJ#syeByfOGbiP59k2Qr55rzG4|_W zgFyKl2uouL@5nDKA=W-VC2$sg!sO+fzUb@21;*9jHg*>$V-3}US296=WJedp3jeeD z<|Hfsi(>^v{9GU5o?WMO@N1)5kY8Oh&ev*lquC|P*0lYgQp#PWJokU@MkA_XH zTX0Q~5Hu7=OQ$k%_o}2llDhpQ1E*D{^R-^gd$SX@o8$&fuo6V*Kh`sOF(=1aDF=Od zC|?;LqjVNQ&Rp@zLa6i}6kAJHP$!JlGl~uo+x(&BPMoI4JrLr1Qqf?Jn0^XwSdS-} z4VSjc?G7o?JKN-LLauA9Q^CjUY>9HM&KqD{R6@9$&O}PxSKnnOXa2#D6dXF z7AzVPtkEU2MT4`4y5aLKO(aB7uqFFPmf+BQOqjUEh|08_)MspQ&;@l>SHuKlG{RuJ zJU@=`auDP~-h99vXN46g1K*I-#zPKWH*p7mNj9|rqiePDtpUn>ew=_?2E`1FQh@4x zg}Re{FGp^$)4lndL}LeG;nX8+_ew%&_P#nxGr`lsubd;R2Np+Adr!)=Dy$b_=yGIB z##fcex?`)OC#IIlbGHp+kcT%Hg=lUA)Ff<6_!(Jg)x9_u)}2plX`6%a3MhvjOLf@5 zSsRuo;UuiIG+h^bF}BHiTBomM;>Xs8Y3C>$x=1E2_@kAIM8WHs-=_){6L6%4g;B^_ zc>7k^g_rYwK2VzFSylxVtSx%9Hy&-5YS*T>VyJrxY4D;dUA>VH5#YP2XNQS8q)U3J znq~~?FVC&lEtjp%VWkeL7)S~}O%_HU+JPu1_h7^ozkI`0k&cfYC)Y8neXy=(%v|EQ z>ZApVO99u?WUzxx)iTR+380Uet#}>u&Y^w`I(}|s(9;;KqVu3%cO;4oH0Tw$sbQ*C zYCRN}sao4Y&pyU19^6StMT>~b zso?vPWUC3A4(rM|Hr^_7YTs3Q2dt1^zKpTjIDPqT*|>@)#T;9lZ^;_wJc(5rRQ<^w zDtIko&uh-nZM6$T0HTm(UpiDy@`;V-elGPq?Kp+anR(aephCoFh3i!~&FPC0nC?W8 zxsr(Cs2Oiyesen8V)skqrV+;ZMpOUn8)H$htAy`phX_H z^8(3uK71z|^LAPp;Yb#zUH0|nIN0LQSj75d=q8EzRXyf|qn?9VuNnhasBsS|vN^Je zn6?d~o3xOzh?kK>PymH2Dj5xOiR<3xbi_jkKd#)M7c35$=xKhn$b9CO{V@!AURcp- z_hc+X1q${f^*u3C9#AeMmRs<5h*GgD?o5`4n?fD>w!U&N<-3r>-ehV#XA5JxsS(n0Z!B0nkDFcrd}gJEr!sj zHvJ53ezngFPA29)C9{R4F~IC!$u)O3UaS(d&blv{$5?$U8O2drPE_Gt zh>JBct)WU`Xv{YmNSy!%(ei3fP3-S2qZZ7XBQUn$zIG6aD*zN z^b~M*vN@@xZyd}u@KFPLl6nGDxi+%+50P~jKUNB*m_pWtA0Fxn5N0byTD{94hAGd) z8KT`3K|Y0^K|PCbC(Q==F;meyHL_umv#AD+=g3-o&%;<;jwy~zxv=wQ{o+(o#L|kx z19Zshhz8j?VHZe+E{4A9+#17A4@nPqJo3ujL6qziU+DcdJ4na>{LI5C7GT4+ zhXEkxh;D4|lI>Zy`PM6E;paDiZpkk*aha!Fu?sVZ*vBUMG)7k-gB7DT+#G%41XyE+ z`0JaV#y5jE{0l-JR0zA~>pGyDNhmzlAs%RQEzRP6>uzBL;BeVwm2mo>_=+ma#XwWq zHH!^*+?^fxw2u>s)WmN%yko}y{AeoS^CR__eIgM{R3Hzpcsu8axHWVEwpDuM3?=pUbHA2 z@Yt(^^K~;r9&;MmC|}!tMJ*4RHUFnY=K(jFLq%q`kAUqC^wJjAc_bT0%t+)zX zu%hur@e`2`+ML9rFbM9!>>V_8F zCHCx4gXd)gl$rOVFbjRiFG+2+xdzwM6>y>iq=jD=YIOE*&XVs5!8gAP9_RuSK;n_5 z;%2|b$|Z*qzPXm{`Gx?&<&~5$2aZDqu(DprU<5#;F!cDGtFQE10o6f{F+i5p!HJt0 z09?QB>57|?eh^n4Kekfe?3UL=uF+7mMr(y!%6gu|^_!$qSRoo#qNYOxqpYY=qz+k^ zLbQU%15mk@xn#PXEb0cn1if-GGMru%+tA`dOvX7`|vRX)Q%@%9+9 z$`~#Ao(VduFQi(*aZ)!cqRd)axt{yd$h80JTl;MWZLv~DGcZh!hu8d+nAc6>O(-Ed zO0U3~J_uSxOL!7SnR}^-i~;CWg&_uE8X+@F_5s}sc!Mck?xMJvj*VsM+D8&FD1)l) zKA1j+rZ$oq;`PLSoE^+-n#P255jjKixeD>7*|^K`i14gLejRx0mL^wAI<0+rjhP`N zC0)bCRX>SJF&PE?B)+ti0-?w5_BVi0<+dQrlzdl3avrFq!KDs51|A*AQY{|gw+_B0 zt{D$$qgR(PrMeEOB`Oh(@C3)wQ8x_7Z17k)*D;+mU;Fr0Phl0%0(6Oant|Z#%Y2?Z zTCkMINCi>eX42PazI#FP-EH$2gcQu{>k4F);KT$3Qbo&Ja12rr^{67p14HQ@-5bj} zQm`>Hw%L1ITBo|Fe!}rv@uVfJMuC2)3MbL^ge)Rn;K7a}jtnSqlb~;ElfV->>SM5FDxUTEfr;Sd(XRPt3NH<|BjON~uu+qD$UNWCK|cf_9^3DAXDY zwAL3X8*ZxVkSCi11+Alhl|2%CIR63Kp6}+)3R=aikrvn!@Qi0=d(B8PXkTN=@movD z+2xv0363k4;re(N(JFw-w6Sy5G8;(Sia|2Ak+|zZnIqT!@SJtFN~O1tz!Mok!*eN} z&=>x+UkMD#Z$>}GwG4uEyiqcmR9v{#gAW4+Z!@jzFhwT?-&|3|SM_9&*?_aHB~JTQ}^wRR@!+V{H*Mv2WftOu4gy&8cs zphGn+v-&AA?7)wc;Y#1j>J>%FL{J=Zr+8-6WD4MwxrF`K&O`r`{HqqQuwa~worvbo z3J)9XIgUja%=}_?n&$cZg$6Dh#WSWl6&eyhqKJeNBa=KcfV55-{IAUk20t>dYx3M4 zx_GR)$q6U|ONQ{)7HD5__Vu8kOX@Io@&48Z2DW{3M)pq{B#n$GufYb~YAN|0m9R*X5tQrvg>Z&@ee#1G-hfAvh@65hIWIg~ zkvoWNwckb`Ax}U&J#9#byYQ5<(hvV4(vE>pjx&#)B$Dpq=0o9J=8P3~jmX!hQiq8%c%gJtK3a$ERf+ zgUj=JQz+g?OoNrY09DvqdorO5C*DO1@Q1DhD?=7>%f&%0Qs8|Y@mNY(z8j#u=V+o# zBi%8pT&z%KWn$%`GM8V`%|9(BR_d4X5D?=1PvhVYQDUGm+*NISV4$1ohg1ul8aV2@Fb!?QQ?i!X_G_=U=yuni+FRP%Yc!OG-%X_Z4L|Rk(tZD;zdU3*ULoD$ z^WjaGp1gzDwDBVN zZh32x)16{#TMW-la@B<@JrUJ~)0p=2y~N`w$g7d^xM6bMRcPe<{@%-$i0;m&;u)W9 z9~S|r?%UIOL}bs!V*UPFQe``J)^6%BqXZt4qsmnnExI8#h5L_N4fj#QN`%X&I~iapWVoZaXHoSKZ%9VMu`A5A^&=jX&P} z*NgoBpAJ8ozs<9w{llSG{prr@{bz^XpZRH^PbrW3ur4aUXSSgO0BHO>q|gW{>MAGw3fe=$+-B4u2npAR`?xU-e9inA*M=u zK9w|4PDD`jQ8xS;`qZfVbXHSSQDLxatvRQb#?vA!71$&7dp4>9IlVVTC6 zI#1~(B7O)t%h9xmXMA(raB=ioWXc%x;Tmqmd#r&ERG-9Ur7LuZJ`4Pvmz*7V$`X(> z+=HbhkXkQ+mIl-T*Geb}b`K=%?i?l@wf|%&pQ%4i1h^h(DCL_`$S+o>3ZT1p-WQLL zX}SqKktccH(^&(-nZ6FoBp$FuAO~M?d`q3d(4XIwe}D2TK@Z*89?qXv`u_7I;u?hF zw(#>x695AM82me~^xxJVjh%z7ow0+Hxv}FPSKQ|FivNE8#V2a5&}*|!2iDA^62oesCK8C#jHm#je{K@ zhCEWCeOv1AxVwWk@riX^OQ*Pc-RJOIZEiJ`x6|~mtuaGlKUFqzC`_2YDUEP-e2&1D z*YP*`(jX(>uWG0k@I^F>`rBLmSZHXEUn4x*Q{0HeT$VZZcAyK};7{*JuZ(VA=ts6c8CP)X8I$B=?iJ*4r~OMBU6 znhf9tnCsdSPJ`^Q1FU6&*Xv&xki8jHz#1(COs|>oIwMO$vN=9V6*zF71h^te)G@xU zK&IWXNGaV*iR0#2zfaPyHRFd6-@Y{S4%%>Dyurc-%I!9hS@zsb_Rl-=Ok%|G)Zn4O zESrnCmDKd|C7#!GPuev5j0u0+V)PFIQUCv+A}$sdT4 zErch9PE>&GObtt^KN4Zjji!*}J5UoxyKQ)krK082GIf1$IBd}v_1XXRocGUN>-lp5 z{r#?``tMjkG)~6Wc7NNuTt8Qg??11aKL!0>(SI*U<=-Mm-`VYNdVa6q|1CZG|291| z2DY|Nj!q8x{}rnLZE4p332A?N%N_p@BWUp-k!fOXWo&Nrf2vXa-=fjc(9GCc|Nmpy z{>l^omYcYfxwWyCxsCDPH2n`?@i)f#eenJFUryhDN0|Ow(?5?dF|@U|(>HW7x3!@$ zw=uCYH#Kwm@0x|+|7lnGt8oASobW&DER2k;ob*4{Tbn!4I2hYI8#_7~8~wNRe^GAn z=Z5&Z9mxNkm^0I{(X-S1uVVhc=>730oBWRXw~hceY>3Zc&olr4;s3dqvwjNyi!XwO zg@xwtuEHO&|J^6__wz3Zv#Bv@yFY~T2+0pOi0eS%@HN6;E|(mCJh?N2sp}VI7yy~& zh)Yw?kXqEpHzxW~0+Wz<<^IkexcJSP9%r4y`M&(It*Bq0K@Y0G&ODlkMIe(a;Hf|k zL^hJ#PI`7f(qDDDAC$kROk?tXHzZ#h!=TT3|8<>LT1;Sx%S_@J8`krWhsvy1JPEi0G56*6-_{3#!A%Ae&q<;>T;?BpmGvTOwcRVTBM_=%nClj`# z){(4QO)Am=ECjtS!Vtoxk^=n26qI3jDh$0+kW!lH1j*{>pVO%m!;7L6Vb;UFe+0w^$6 zpQxgJ<9RHao=;3b#P7=TS0~n2Qpxzfxrj`+zE(}wx6(KUNasEiX&UZbckk1UN+{5T zIg}5aGce1~R%IbMjHUQb5ti<`mdRb1(8!dBi5jKeW#}QZO97jj$VH8X`WU@;4wQau zRrLxdbw%azT>*AdFJ$X1jnjd5^iV&UA0q`UhiHFaq2xy4N|(JWw5Gm=5mwUnxnhD?kjE*9K= zRLR3bjG<_W*p&uwc8jfFs2O}u(i!!9I5TxD@Vsys3;wLjjqhhb>VWdwvVOhSH46YL z%0!7HZ4zjq32@MSMSc;j>G3?Y&3_#6TDLT%r9rkc1MN`59{TvjS%w}tMjqm7FxaIg zt6=kG>uIO|;3?XK`mEmkOjAG7|3g4y!_14?ko32AfIF}p_ zc{exor}Qs^23kVtxvUa!7%d_(<9+~YzvA!EZfu7Tcoq3+6|C-!){GSjgVQt9BD*|W zgRyp4iC`!lpwc!hVJh4p7* ztx@gFZ;!!f+K08{?nwsfia1_uL|pIq+rJBQdKL6)h+8Oy|KTYAC|_G#4OH z$*Y)L$NJ&KdB2l{W+b(<6X7Dk@-GcZB_Ozpu<$^dfx`&KYBtka4cbp4<=2CGGI-ft zzhmFs+`eK>x|3QHqg(~C1u#Jjt=*i`;JYM7SG^GhXG*b?CiR4OAI^QMMs9_$ z;?#AzVGE_-BuMo~1G)ff!zCWpy8a1J8>bS`?x&y}3k$WzvXdsD9)4vgJ3}(T%2#KN z&lFWokR1*lv}ouAv&q7zF}3)0Qp`DgGQdc4m7<77S)hTv2=}|RgeE|%#+?QR(jkFN z7NHoZr{xIF>6@<02Zm!yES#6cH;q2(0Pj>=Jp=h=`!G!aJ8lrGjS0;d*hfuiP$s?^ zcl8T+#^wDOWXW^Dg3WuF8@N0>FO8A2a#M5*feVfkd{y~rs+F!7N#Z9c!2FbTnveyX z^b6}`^{X-9OHm$rBXLa%b2=mIfN26Ppir{;qV&tfpJfBM%bG?&+(Zr7G2lZ|7VD^h zB630za-V~;%R<7oQdorshsc)o4xpa3er3`sI|}Rb03K~Bh@l#LTIe&OezrPf>inEo z9eAh8SdZXAk)M0oo5LNpAA|=2NRDf?cf!9|uz9znAH{UPadDStQACjY)+C`4=oqgnD1GhWP3h}7nQi!+44k_4BL zfk5sR?^@_!V&DVL~8szZv4+R zW3X%InN?@`-7n%mZLKHS2%OB83A6!*p1oVy-wb>DLCZ!6AlMx%Xg$%iZ+&oeDRrC( zNS~N-+AzpoF-cP04G9t5d2juc7S(h)ufP*r4fTKuOX^?Tlu101-kun=c>0`LD6|477wql3VWv_4busv#P zmGdpRC?9k6=~e-x$Rri`Gdg6f#&Qo^Od|5d$W%V43>jlU4dXMh3?)?;2{MKuh<1mOA;WDUle8yLA-Sx5se{cvbfKEz$3iYcT- z`mQ9ydWv(cO8g z-N$p4v%7*~=HI0H$=Cl)cK^cn zx``=iNi@1@69V4{|A73^fNVejXQW;?ysy6fnyL?)J+U(kdp?w^;5u67?3z+?ntV<_ zW&McmAV$OfBU2FEU+a)8C};zy73B5_u$5%kOIO*sT$9@QO#h;9O;2)j`{m`-)4BW9 ztLxG$7Pi3bYx6MBv&~Bt>gI#Gbv0=kWr1q>vH<4JV{Gs>8z(Y<&-WCneB9`g&hqC4 zVR(XSOk|!%weM)29eEI6`V4shT-fipmDgX+Y4TQz8TJs+cGKL5+y`WcFv@48p=@8O8ftCU1HV8da7=&)Yce)4~N5dq>SiQUE*cD={W#BS0o3;OC6vF3<2I{Z-ve?xo42G|kxGhz{jz}o zI`WosxPxy=Ed)RAuN8X6K|wmrv!hKB>rd@YMhFIdOG2G$7)(_kj(m9$PHUZqnMLR` zWumGFZ4W1&WZJoN9cQVUY?=FLSdIlCr7%^qICh~zzPwQ2b5E;ea}n4u+O(1B;X!gWol_m_ZzBWN zu~B!*n@qUxD2D{zMnfvzg?3-U7 zqMEU4nX<0Zx#_;}!eZx;=?eL-F2iAfQ$EjWtn};@m7sF)okF;YDarRko3ie(f^*8S zKJDo~H-CwY{D#=mwP-SkObcL@EQChhsfUZ?|gj?}c_dq#x;p8cfFyb-f% z{1|Gh)lhxwTv$kJTv!zI%^Gr95z=F+pLrV*+4p z3-F6DHo_AGrJ#^(lY%;ZKhz%auS8r?PJ{sELQ*Oj9UDy;3Z;9Z$EKBbU#|8R{2Sg?fdV7byy_>)og1ShW@X!?^e>y&16V-O}D5MYSnr+x>owljd3{^O#K#bS%U;W8INQ|qxth_KS zxUnc%)B{@Y7{RD^SC^#^)@T?C8yk>3W>t?CMjx{u+#7zpW|`;%zGaP304^tCsD zdcuXR6=6+E7Swx`{9yaV1bYxUQxx589{EShpO=OoJX1244 z0kd+NW5ZU{nMY*%yd8TtaQ**AhAbzJhnTwA*v+GGx3`PbbG7Ju%T6anS=WLGxsTBh zk_FzO*jKEV3Nb9=tXlma@pE+5QHkrpQ|3QZ7zsXP<2d5IuojLwD z8QS#J(fvV&4cyT6;qT^4{*d>%e~{rYjU?Ank_jsp5HF=G8{4 zRx9a2)l$Z1cC7C=i%T*?Z!4-g!3q zb|%)E`rN zRz{|OO8MD-ru*#vWy;THp9OwPx*F8uEX~gU9YBYyw~70pDW+cS`>ON~aYjFj+6Y9A3&^_1|9xpBROq5boW2*4`b!*S^v`UvFqU_`{kL{W>jh`N1P~ zdCHt~Z-$+^24R!4;0Tt{`yNEe;xxOO0f`X0)Ozkp^~lPM4AK!4SaafnM#cJ9%U9$v2 zO{ihyPflvm1yQ@|=HCR^{q=^ zU7h^w5}y_loE|t>bm@2ah;zg;8b)q$1=3>LyxWz*70&y@{&cWheD(2sG#$CUPy5dH z_ztBRQM80%dK`Bz}6}>PjELHmH~)10F5qAl3=;kSlW?V zdAZ8wII2-Kf>+p~n-Iokc5F}Ri7J&EAl^Z@9CKV7LexqRF|HlyUQX@d@Yzd~IG+5q zAdcfT)llIx=>?Z=>H3n2+j?GNd{~}}5VPLe^fKyaF=s3V&$|i*U1pS-n28Z;j4K14d{bYYp#Wq9jHC`v4>J70$4QCNC4x&TYpek0h(OFdZL~B ztr=7f_YV2UFya#xN*=%7YLXqzu4V;2fcTht@|dhKd}v>j{5k_2nFSy)_e&yQF7$GU zXXHt!5V0a%N7NEwj`E13Dz!fj}#(i`@R+NflNS$1P{=xS04-p4$z&B->$B?1Cdss9Q2JH zn4yaR9WX8E8fp>dXTqz-(@#xIvN!7!YeYgpt?{m{@~8$M8RDEkAMfo}dEhmAf52-p zfEh2Md$-%*;b$EKTMawn@5iv;0CiyuE696x>6^jGc=-L<(d1GvP%iG%9wp z5L6cu#zSQj77;xy6-ci+b2N73Rhmu-c?aRfLKSROdn`q5Y)CMrC^{dS#f}-!ot;rR zr-%_*rwVaN_&H5g4n*>XFhL4#%*2(yCR|TTk$O`)>`pOM;bcur_+^KMGYWp-=($Vc zIl3o2*8o$Xrmcvr*;2caa)Up?GPF>16o-lSF8%RK5yT}mf+we5566!XDJ|^26G9>4)QO#1iZ9d!={$Ts+S_1w6;!_LXd_8HZWh$gH|B z>}WUt%y*eLhh=1dH7d!KK8UIt7b zYf0}EmSWP^7X)URY;Kcr(r5`+;yu+z5qwd+az;DlS%i~}LnDgNVkPA7KME=Q}3uNJh{ef4NDN}5yp|72+q}ep(f;McLH>dM`yphB)oq8k| z5bp4HFk-zw7^wsjv)@n>HKA-=tt33Pz$x#&HGhq5`XsM#thdlSnw(~UwI*sf9^_ln zfP+@!s=HvbjtnAK(Ut1GQQ9pj5XOC~xi)Tat5$K}h0H1A>R z6_T4^&$@m%Sa0SpYh|=a7xS5Nec?n7;tdcLo9eKo#CB(Ocd)xQzB_ykeY{{*HO)GE zOv$PrAFp3}jok1B{4?wIn{ce&;nc%E2`7N^KbrMoV*KmqLnc;cw!hDM{RW%g^AG>| zJkw@h1n~i$ojL&fvn@uO6>6OEYId5Qx5kGQJYe=j4=-b=y5S6=rb6tfO@2GMI=$Bv z@HrGnYJZm?&^hNhdn@%rs;ihXtGIl=(CM&*9~+;DfvT#qs<*c9LiuGV+18O$iILJjB;;hC z5%I5Y>z}uHiNg35BdetY2ZH_@$(o!&E1 z4u2kGYL{X3nOW+=q4hSfFjEn^sn`S)`s`FEwq>4_6;$J6_rH%eN#oex7>oq9?#Zi* zQ6mz1H22yhfdgY%QgQLF>q=cwlX-da(|S`Z%})wL4B~HD_v~;C;WtADW*Eo&bz)-$ zZHqJH0a83V1ky#_SRyH_A=@(BACe5snRd9lsi~%RufS`Q3yKIQQLkjlH^})_t5DOT zJ>!xvz(}%xNsyi=*Vt&*T_H9sD!G8Lo8E7GIn+Pe@9zFM_to`&UFLoNnD_O4e|S*6 zN~t}117)mu=%79CZnu6~xAydZYf|-k=<4*eYw^5ZdwgP;GnLK3eec}F z#Lrqbn|^oCZU+8%J3@U=8CzYgjjapDdA+MLIpA9Ne(oBW5C^olLRxw5t$W&qsPPw- z<+@T_?ti1J2#>&UqlqY&ytniJ>3@*Q*7XTfP$T~ZQ=@DNlxvMACD``1t8A`k5|>mV zfrKmyO6-g9%t8+p4Dv-%7Qt!p60yudNsY7$jppE&IZ1TL+V43geWQ=d} zqxo}M?XVVzEVp*w@N`L{>^7zvH)X+;5@-wqKu&a8KpUHfZaI?rCB@BD zNka}MqezuNRN`p*K93NY4f)-_`WS<#&`T|5bgVUjs{HExJVJcv(bgJ_t$_{=Aqs+0 z@I??RPYzKz7MDl9B;(mg*ek7lnh6oPF$u_pVo*YluP6Er_&G(4eN1%6d^?%2S7%S7 zCZA%HyxjOn94mtT=){44F%=)w-ub76T&4loAl`KV=Rja5@+VIz1g(SExnCcL`EBk} ze|<*0{^Tirv)LpAnnBI{SwQm<^~4w%<5Z!((#@H6-g|bx7r^A%V>=u@1cO3ex(i)o_TozOnu%`dap`RNlEG%# zqR`O>MRO%Y+W|U}l1FVivmhFf@oN?00h$5shD1F8xDVT1cUw46YkgC6xv`TNehtwB z(J3(#P4ysQ9|{;&g-0?kbU2DDJ8kR_YJ$19%CA_sI+L3tnOGLAvoOMS@qU zHq<+5$}8B{sw~7|qPAC$v!YZTJS>zz(T*xzo&_zW{@SW>qY)0lxmLvquF$)A>X;Ma zJ95Em$P;S^ty5k~w2@!;SPv>iaY_-~q6m;ZoQu`0eLVYF=`zCy4DvEvhGS5Sv!Ut` z&gs|C{*C0F8#dDgYW|2B3CAMWB}qB19DCYk{La=nE|-Cd z(<997dT-<7`>K=&X=Ve9tV4rEh2b;~+y`HP9f1xj^1*!#h%pin`sIt=gHnWd)Jq=Oq)yYNV0l+zOS6l$qzL7gQdBOqs+@1lN zdv-R3VXs(^`m31D1#aUu2pbR%u7os{_;A9ttAp(-j<)#TvM6Kf2YC0PAnRFBcOD3* z?Sv5Fm1p8pjb}~*cZ0>`w>sS|%slKj^=N-3V?iU^@%d8hErmfkAAY;qED{<0md}ni z*!UYu7h9p6fze=k z9L!|M4I}FlMbHj1dc|MU&x?n7DOaKl`_PTO4J}T}xDG< z@gHMt?$xbJ%o$V2S#{Xway#$n$?%!N>r3djhx)^JJe=P5xA!+Ei|0_s+W@~Q>Tf>6 z-xT%to;JUK>)GL7(nNIhf1eflMbxz?>}fHWMgIhhkVvwjD)|BJO4-N ze+~M-SNdOr&hQUG|3?qxZ*Kh;Nx47Q%m2lw|1taQ?~H?giTeMm3-b5ebhICs81bLg z8SF3s0RP^l{tuSfKPIF9oqh8kgZ}%6!oT>j(3wncyDow}tllU1tx__MoXzeOA0gjr zI6Q^JIZ4D%5#yU57%cLx5Ks7LH;jQz`51Wgk#qvxJUsl7;t|va!{iDa4%d^FhAXiI z6Jp8atN|_J&d1A-t(VQs?;QR8w&!O~gu&&n@PyA9cN??wAeq*p0klRt3z?}RhmYO_ zKw#~J5+&7XVUO(5vK^4pq(URLk~f~%{zd`rN`k9)Z;Ci!Q8& zK%vR%x945KGUqjzqx@pNiD~Mu=)C>ENr8kC;RLfRdnE)0YX*lqV9afR+|? zRcK^ZU_n`ox|JhxhM&S*2Kz{-!W8&HFr2ypIFGw=)V zVG$W;K?Aqd=3A+g+R`HJJYpUe-y9Y`57m;ka~+0&1#!mj{U#6Z39Djrlt>@44}z=d2KG zyq3e*?bgjI)6K1>bJ3h2*3-#*4@XNnvhxtqsV@2GrfTDERQ;!yPSCo&C z>G{qaUk@~(+DbP2Q8uTe_odxhtJhwKpFi^8%o$N&4kv3BCfKoxc6fGNSB5J)o#Tf* zc+O6qUQ`K^(oSGN`z#&6v=l;}Dv0;yumSI_I6bLJpJ*AG3xoo%Q~43A;SfLpVFb7j zX_r`jO(|cnhY8`%#t($W9wqodJ~&uEkrMN{VSEzkdp}aWglW?=S>Q>f1rp@gw@{KG z3B;}WeS4D>I={Wm?`7*!G$I!rXNG8mWgBJwvA0MNYCuVwQg@ktfPej zhDU<2arx9uD8~+h>pK!(bLpS-S_t{2B?zd|=QOIT>%k1Na)hc8mbGI*D6|&OEBT_)G{UGD;CR5`Ix~Q*C+@BrrxUp^qk!6qH*7yc$!9pf4o-6*0U~ z=TUm>ErM~nmobD`g~}(}z6oE8evS!fcp3^uZep+C=$ssa>vhBCvjCjpFBaeZ#H{e;K4dA*O;a01vopWG58 zbm2+~-vDIjFb>~P&*cB~L#@~6gBj^Mx+MX{YUOE}LLm;+(mL}5fygoDVs?Zj_3>K3 zDJU1*YfEFNF`mvIK=-mCbMhH?FbzzRdzdN1i_i&CHT$zjfMnnU0{YOtxt)7#v+G0g ztFNoiMOW#^)6!G))J1ZA>jeZRy$=Fr#)^{zyXp9ZtHZwSZAJ^8@0|Wok6BgrRs5qH^1 z{$Z5`7ib+~k~0aCl&Nu*PIb#n?FFnxk4_h-Znt-!KVjtmVlBzD zsDa;DL!%m}$Mq}+AL!F{nnM*a@OL#C+Wnv&voBl%czMhGy7{zn_$SKS`9~9RpXC?@ zJ{728XqJ)(X^vfYj7OR52kX7Av>JG`;m9!#!&JGv=l>6JZxvN_zqkF8(%s$N-Q5Bb zf+*eH-Q6K2AuS-?NOyOabazTi?m5wW-Lana?sx1lp0y7=@raZ8AHVB+#Yd?2O00W9 z%4$H9q{TU(U=pOwhbFLZJ`5VHtW7_~U1e$uz^#oS7yXD2o7p#v(?{q6zbWiG4An_u z(we^@waTA|Pe#izrx`f6k-n9pWmbfts1CCFt?PS85Kfk_q^*PKV=`#!5oaRp<`{%3DXx9yRZ9=@r$m1I4zHYf7e~?btx2W(L2uW_<8K0-xs~OMQuPmo@o(Qp z*Y#;ug19;rDiFJe{HdhgR*%r{!tkV13Smf13}UyW>Rh9Kai$_AW$m?1flW+KLe_p$^RR-15sx9GXD0E{Ykj4(=}BA~ zM~c^|nledt{T}>a<#!(g?Jxw;$6%7w0roKlE!+z55?cunG3a(bNfv_t?qlen=SBVM zV_5jsXEeR^G2&nP7=4SJPVHUQFmP8KNQ0udfWRKGk6~A!rxy@ZT>NNcXVtKlir~II zX)9pK`4ZRzf5nAD*`SKO#P}9sc;`Fu<7ha{74niAUasD-PO7k;$hVo!&o$VxhpzXR z-^!R>DoI|6-bMyH)#~1;PilgPQz4VV>ry34+bh}K%~6S>va%ec*wc&TG724yZ=AC9^C z3z$4T-K#CDK`nQ!c%Q1Cu3fE*oR0f#Y+bInxCosdUu&P%El`BdLX{HSKHm`Ow6B8s z&W^sZxJH6e-+4Qvp>>A%^nE*1J@~e`K(}0^Lpv%hBjKX)bw?8MzR}^m4;OVP#0)GW zS-o;cxIA5K?7sMV(XH9qVLx9osj#4^D#D+VhkG@pd^2}~&rfnz z|4}C+_NXwmW%P8SJO!&zFMJ;SzEykz=A!@8Aq!F%AzPe1<(#7~Zn?dUT_0f;M6L41 zAXcj(Zg-}!TdF|Irilh zZOae@H|hZYnaNw3kE0lO@UGI^;3Ba43X#P@`hGb04!&4NBqzrde$v5$J+`Tknu+{( zU;0k$u(rHle$bPDX|>6w3u_=>(GNnDRvyjnJ?x%Vci5X}2XiQ)B^}3f@|Osw8(BU8 zTvAu3!n;NWm(x(9VM2&44D$Aqn+))XDA)rfW5-Gtv1&K!cW@>?1PI^>a=ZFO{d9GE zCRp6_r1EoPv@%Sv4Cex2lj;0!ZNfn8f*M)8MFx=~RZlr35ZcU@b!!7CV_5O&IRD7? zWm)`H#t3P|0hTcy0A-9>f4&gqnaDrN7!jv%I>0i9_)8h%kR&4wQI+OoUdk9?FJ+ADru14c zT;e@~X}<2^t9rT~R1Xj{7jUtMHbrh82K1{LHh6?D&gsrE#RVpqmO6bDs1FSw6GK*5 zV&+^U*PKHoF54tX8@||8-xw0u@mWIF9H67y*9X28=6P_m&{px7A4 zsFm|t?zoBIXmzvyKW;=243(xrF!?)!^8)< z1gt-7k(_k^Ylxy#Xb9H&hOeYx*Cf}b(O}c(Or*Vf4v^ZnyC#A|bWSp{L#VI$8d%0KcrSve6AxNa6~M`tf9SDy zDw5)BZGD&D{bmIJ-0HShyQ0oy3;WF0kG4vIbX4%*udSKGljX4i7rbyVSb7ysCeOZJmZIwca-b)T-VU~F z#EEYMWIb;T#6YGNE(mIa&)I1JA|KH$zyN7(y4bMs=Av?kt(iYLP+Q+J;UHyr(90BC zjuT{RAY5fF#-$J#xf_#HLf@x2$lS5)t<;s9axl=}Z{#%$sYYO;#lAI(ZLh>q%>D$7 z-1(x*X@`=E@29w6GB6}BOTJy$^w%id{XD2{LJL;oUo6YF+ zE4AQv{E?b|{_0}zoEqKb0=gK}z%B+WIH3%R)bB0^~viu_k$xWoVq)Fq-0 z2KdotD?E6&`)^a`k9Rv82S?|3k3HM-Jw5aL4|rJ5kbgexfHMx$;8T>7|8-@^!OR7y zUi|ey_BUk++Ep>?O2CGKiBG!xJk& z+YG1i&q%A)XzmlU{?MXw`9?9g@iwnAuo!ZD)0(T>OyL7| z4LC^(tGY(z)Z(C{o<%?Et??3%C?I54QRWZJ_Bk$LvG32-}zeC zwgF6CQqyeBA0uP=`0&{vAJ6;2pOb&hc>y&krr^;U(*K>VoHdTWb0Q^j8$R9l(>7zU zRuq?S{s?%_>JqS3x}{NU0{Vudl>+z+uP&^0LO&v-`;BS9HLIXfBCZXkCsu!0P3NA{ zE!s^sj#mhLv+){@7$qz4R>-eo>Dak0q=6`NehjHgXmu;;v`sq_=_wZ&PqPD5j=g%G$)@T#$=nmrYkpSdVX-n zP#Du-N!(!;9O_N>h$9q@S2w#J#bpW}PHs+M3g>@Zrg$l#0ltC%h~)hFVv<-1OK)V%W{PSzwf6af3uB--Ro(e+Rd$5}I|F zkC)W6--o+IaNi?SIgq`aggPigU_^izM)eIiUOr8=aqe5C?<?$R$d&<4h!&8q69^ERID-mM!xJVfOWIG^>}U}!A}ehtA~a_b$-H+; zl47h(IvSl6JqztQZ_VLTn@%fZjjO$+dHBe8jBK+ti7W z7Qv*ivCET+9OmJ?_gd6ld4!ul^(Q?uv+z@U-PsT7**ay0c9x(L3nrIW^H_gAUQrOU2&;TQ&Hu$xns zkqt@vBnjaSfB_rlnz;L{bs#w_nWy(IcTrqFVtIt+=w0?y=ho&L#(u4?oqv8xmUnS#0mK2w5(3foS^80$sRn-K$Vf~la-$Y z<41{6Pqqs?WA5|flcs1y!LMQzcnf$HF;72^Dvf(liqogjFLKWuNx(DbP(h%HFB@)l|}AjLPikC+JHLghL8FH&8lbr@F&t%oCMIbP?9c7M6jVUey8?p!%9 zWx%YEzgZC%=Bh2UCqqCu+SzfH1>JouQ{xvHd6;y+<=f*%a!)YyD31UMI<`)1*|^*@ zsK5+D0l0=el_Sb2j5?|X?&KW#gL-JsQ&WlBfLN3)d^P+puQUZ+`phN zcKxdAIfVvci|%B*Q^nG2=FsfjFinDblL}kz#7aLQeU6!t*?Wl}%`2$H8KPkB46mLWE96S3-*xxH6W9teyPw5-(V>1^+XMPe$uPM>e-@wY+ROOWa@{;rv* z2!Fne31&?yXMYG?ukjW7dsn5zT{7egF3~ceeN((P1cKVK(6bhyXqo*asSaF)vz1A#szGtdeL@OK7-%u{-XT( zf%A5M@rLO6=TrG=PC#1-l)~ES8k)=VPowv-O3HmM=L%|#&$p8S6#3l)6e)xqrqrD;EFPL;`T_gFfO^?sI}wU>CJ-hNCG?-mh@Mw_qJ?L?Q`2x@Q^kLJK1h?04K zqCTu)H4zV|l|>ROw@wu_z21i(zabUlHm=#U*mv1)B*nm{)AP5m-R*$3t|G-|NeLSb z{I)0>qI1DGYRY(7B*FkASc>Ahh6Jwy_$A1-2G7|z_aJh!esYnsTZ4^5Hfxs#wuyx; zR_2D3E4*X?Oh;VRXR3)ts|3}B;o{E6?f{3lI$XFqPWH&!w-8*=VnHOIxmj_U*R#_q zJt1PREpcv;3|zbh#P&yB8MYNBBbh4lhagoA{OLjuMdorgBAHFogn^|@B1&=c7GKik zyuhJ2DUI7BPz4de#CDTHXaumKvOouzRsASXzUV2@ZR2J|6p!y^XkS?HKi*N}rzj?J+2UVf3UI$)wA?_-bB8JxsMWUx6Oilg(E1DJqCtfk2+fdB+s` z$=$m4^_U_3pf*K)1otSs2nu~qgdD2?b?P!?2c^HAe2pU)$*2Os>#r|CyG20I4mtDi zo_3!LjLJXU47%eWWn-z#X{O8;O1_LBk&wb=ym{DSg(#V_zE1q;*cbHh6CSIb9dtg^ z1Srav{is(+EU*D|kkVwfhbWU<$NLk))#q@wKkUD4Q+zj)q4SxNwKbvD-w&k2Lq0x3 zoYxab0~RtZ*bq*X&8mHiL9~M9x`HUYZH3})5jUo`zLp#Bsvzk?{oJ9O4AQb5-`R1r zBHCP*M;jlJZ<1J=E)nrY&Od>>ac#thLDEr_&xj3W8|$fZn4r`d-YBL@W!!>(9tpPQ zgx1M^#b+a@ntdcS&FyxV%#g}XyBr&;vyA75?^Q6`t|}pwYm*XRh@SyS+WCmsS8~aw zb=uyy;Mw`wFPivPqkF&xLERE~NDs;65fAGpo zjGp9V9ugv{J`hFPjYvu&kHH3c7zBTx!ACxxxXHv|7xs)%Z7PTLrplNnsf=E#5Z7jg zYxwnt1>TbT#Gx9e2yF+e1I~1?^dEqr9r6=2Aqme#YpLzl^435{hsj84#OZ3Sj&{0B z*{ZhlC==6|#s!o8UvES}iR5bGW2*`<|Fr+RgB?JL^!FzY4>vo@U#km1odiq~{6i-# z(5F+>W}15B}T0H@fb2g=r0 z791v4+y}o1k4ZSt-jTt6`)=TuC*dQtnu??Ri8}VKLYs zO!k*0LAbq4mlN|JR^8?v96;kwy#*6!{80jozc0{Wgl+mPSEh2uS{O=LB7x23inmK9 zQQjLrf+_K#qkn>Y-yFVCu{w=t`lK&zG;F}w$@b&jd2)I$`#TUbh}&#TN$9PvPQB>%Ejdkcu{C%t=n$lbIWvt`PdVQPV%UH*3 zFR2{Z-^MzO?8e9d)*m1Y+C4qj4^>Bp>Pqu9Mpm(3|8a!ZKzPWFzU+fiG<1CVBgY~`vOgEDtz;h=#)NF;!7M(dq_A+=HJGC%J;@rtu@0lp4b=z}7=Mg) zP>gV_MK}#z{B5jb=Z88EISPx+m7Fg((&0%2U|Q|?VLgAbRH*fSY}M!X(MIrLYBg>3 z!G7xJ3Yyxj46-)uFj_P|m`>g0ZYkx1B}cl>7HBP%jSgp>`th#DG1l>rbM<3M!{UNj zjmB6;>-R_3x{1E?&&xePej~CtZzNjoF__<&f*ZOU)`0t( zEqtg|Z!$4jAW5iwx*rizYKlUtmRziIIG9hc%Y1To0CV)g26q-1Ayt0^X zBc6i78-+SM%w_I{n6P|WKyFgCwl)txZJh~rMLPApQ@DIqF+(V?y_jQkDe)e|oH!ML zDt%`3^GS@qE;dMTPr^=bP20-laMS)eP)2!i>SHR;nI_-oW_gXKgG5W~or0}!?y|d} z;Mxfpx?#c#3}m$?rV`};n1!?Dod1UGD_H< znV!E2wnb2woyamR^=DbEF#9Qeoe3BZ{UR82^t;&G+6j(x1EiS2XwjXZok2?|NeULa zpwD-#dVyrTYPgw~g``@&q8lGH`_B?EM5cJr_2k?NprHf|v)~ZFXvKDu^96>Fk55Ia z2*QtpaU*R9hIG7v&`n4lFpp1KkosF zZJIkrH|cE#5omqm?jBLQNNjjcVYpG`n_4U4xC{lBB}vdEis(0cm3aJ+ZaSj;a54p_ zhkI2lCYuaOdmyRy#x?38jqL|4CNt2(u_>s2d2whZ3YtAj>4e_UcWk^yX&>r+rjA(F zk;zL(*pD3QY&LR;0j1V0ht2EHBU~H&S&qHBNR&j83z-Ij8LK`}l)S62iGQ_PHxObz ze`n_GZ)MMYn`{A&?^IDVl|IDM-#&I4#+R5(c&z$8VulB4RrW5~&0pC!rtqRIGG zJA2gbJ+dW(l*HUuWfb|3g^3g7Upb%~-e0KWqTN->Cy+uznjD5VO+UB&p6mDloa>ka z%yk(4IoAPgxar#zgNb8?h2P7D+JN_J6Mri*Tt_;#y0wj)TQ@^f_X}M>4TH(pc;r%%TyH){kS%oc4G}gdH6p9ChhnY9&7%=C znH-1H1q4-_6ZO|JeUg2QWO*hs(G5E%Es00|?kM1t8?#V8c}NZQB9E~mpYz@s^=FX_ z_OV-4AwiIf#2Bwd6J)1J`p>TQ2>D~@fF6cpHlW$st(yyC4w09k*zM-!KCM>b3Brgd zMTgiyDQkW=gxEnvhRVjJIq$y*YSNE3+rrruy7cox zp2!OHSMJ_yGeEJmnA6Ge8}8PXw6-ezb|dIe7y65N_=9;k?=JrX6zy~Xu-IyvR!@KR zULj@qjM{bT{Tl-h{^UN-@55~bTbN~#2o4W(61@gka$Bjz2yU)lwN1N0(rI(A_HpI> zY2Wj!&HAf{@y~nz|E^W>f4=ws-Kqc{{Qn2v@b3pZ3;xl;6Tsbk2JoW&-?b|K>awr{ zi@1M1`2YPc{||S%7FBtmp74SBTK*xS}xO?C@-?dx{L! z>-TJ%-;`$XY(Y7-s`f$aU&%Ua`jMUWengw%BzZL83|k$$X}K90PJQ=m+w&nLHZJ2@ zEOKpFz;1+Fr0#_F@+<685uTV~+o}wX?NXu=SnE3L3L3IPbBY|Nc+nTAOCfP4Iq(ys z_E>mD#Wmj?=x-WA+%(8W{;>3)C|yR~*Ln-H_RKJ{&;dta1j$d$j!vau_pf&ZO)YyD zge`f~=pFWJl=unbge_49B-xk_C?53=t`=mPZ1$2?-aRvNG?a1G;`Zym{h4 zT3`zt+H4=|%3Z+By7H*M63^nyRS13)I$W1L%*ul1ucuipK7fM6tV=>`$or`f8ruq| z7c@0tiCa>LVQw_bCg@E5;|HTaP)w#Sj_!nUIb*TNX+0y`3HXa+byiXKk$UH@RD zVWH$$dYhHR9wBvTVyn1|M>ebs2Z#BPu$alfwcKFE7`O3jSVMkezbkS6JUM4{dm+Py z?BRD^uC-80V$na}R^kj$Y*iS7EWpF2oAn#$iADBm0d|oI zy-zo`eXbsBS>lFHDK{Ed&l|K18-f_s5LE9=*jsgt(5oUrnRQ#$BT|?r1-M=@&(CL{4-X&9?d7g_j+B}O`<3psC!t81nf&03CI%ud)B5-cCRD>D{TOIJ>c2MsF= zt=cND8n;~SL38J*}TlsXbCRc&ywB%KaSNhLzr}BiPK`W8EX|zjnYCe(!+GGXHA_ zoQRf^4!8r3|Fg42%jK~$hV`T4AYca^eEnYRV5JPW0}lC2@hf*~-D;>Ta+WZ6uE<62 z#fD4sZj>fUIYfm8KBpA2sf}6=PqvHIe|LKp#7@BF>!gvq8kHC1dh&I2t<`~VNIn|o zfh^&tAa;QEJmq}Pu&LP9`3g==?Ox<}?sWaHxl^^5+^Hth-*TtB|DHR2ysdx9od*BT zox1!bcN+IU=T7sTZmu>*R}qEox}v>*^mK&iJa3x#++CeE&u02ulw7qSX#$g{ZvaE! z<$q0{s{KlyHeoGeK`pDbJg!8nbPTO12)XSG+u6IHHa0OKISUDz*2qGX-lzj+z?q)i zU-`hDYw+=v0%yQKE0nGe+Pj?fm7S=21CpoO(x zW;8^t-w05>wb>2%P@E2J=~P80QT}v2|2urz4+p-rNekYL__%87i<;|?5JOoh zQcvmoTI$r3h)-(#8T^84#@(>>nCE8%+|N_Ir%ZapwdW@^3^{U)=}x{dbs-&@_ca;_ zIlIoUfAqtyc*x)}~$C5MPdM#aMopkpR6H>`i+7&e z=zBxl6HR=P)lkLe|3PmURzI&b5@)?WjjlQ)vXE2^pdl$NNXEEkA-fLW2d11Wq9D5W zw|^oK4I!N+UknClNH+f$4e3fd=ohk?4&6?hGGH7(x5(KC(2x+1mgt24(vUjiO8^Zy z(-n>4{s}AS@Qbr6WRji-!e`o0PBe&JPkAwUR%b(A<1beL4f*!$n?;J14O6XHF#jjL z4s){ya;Y6yuVDV%^9*9hN~)e2(aLuCk6i6=*T^^5al+(efXT-ZFh*Iz$8iIfdbso7 zlaE{z3Ei5gHkG1KRu212`B z9CPjB2e|%ph)vp`Kn+zzx+l66ao1X@qj>o$89M=KTH77xN7=#a{@TL7?Pt1aRb;}6rp_W^J05@?ky_GBlf=#m6+0Ou} zwKKy7m8q5#?S$`}?jdqtOac?TFxCTQtQJYzp~Iz7WHO2r=KwwagW!UtTXft={lD4^ z*&440vdtA3B75U9O@i}W6o7k==Ej_&(GvKx0%z4wc4n8l zj|z9GyC41|dV5rRAr(4r`B>;(_zaQnP)H5}QU|9j?$aTmKhz)bQ<$+BaL!H|kRyPC zjMqgYjGWWG$0S`yQ+(ZI7jdxLiAqzJ{K$E{U*<0n6z>1&+clmC|fn?&xQ^_@lnJ73!=6W>bm#h^~`9|TQ}hW=Q&FHYydn}0OPqYl4By;86TEf~+5Tkq*2$SoiwB=Fg1>aSDaKxe@o$8Ode&~cXg z?{=L38NT|v7W)tBtCqyEk5iJ^?NO>>;YCS=$W*-Ng(2PH=~{`)aL>341#t6m<3-EC zrusf%As+>1hq;GfOS{3(;M3f&TtQvKGdvEsp5mRlCNO4h`vf@ zn?rACO~?&6akHl}uYIw!0;VswFDi8NE z-eFN4m;aO(M#%h$UcUUB;Q;!T8=b;_WaC%Uv3)Eis;>B6e&*VueXrhi-viTt+SvgY zR!iLsn2~ztYq=$NZ}*fZwkGuqLw}gY^`wAA<-!lGUq`DCu*WIiS5mUbEAiy;gBvM^ zTMp}OIvS9$FHBvgB^uP*6ScF+J%X@v;OQ?X3KeF_Hw+6GZM=WSQ7NA4U`bni@5Vs| zuH1F$>PAJB3iUVzP4qD!iy7^lF#okcZl(ZA1p-QzE;1;LoSZ%@3W1V*GHD??8>Xl< zX^gN6IV&NmCabily}JD_4#bBRXVJb_;#m>N2>vVuVM%>6$#gxR>Z=c&kf^wZD= z6AD;&Bo%uoFy3WD4xrbMo*Na*Ar<8QSP0o0Iw^oH?39$p$+BbmoDmEE6YpafIzF_l zv?)7_?07uB1bwKq$fsm;=%G2^hP60d#8hHN#yk$to*v<;x54xrD@>vNlsft$AG=c_BO=*;GybKXDGA8U?p8GM?Yx-2|e>sp)~ zOzNx_(YTPC!;%``jbI9n%$jzX1IWJ|&MivC`#+EK+Nv$)*P-4NSh~rtuBtn(S~bNs z+*?-d8R&?~U{d91n(8zN?jf8UMPGXeMV+|Z@OjbsJT*Ag#JG6mK)IBjlQ_)hjHVM= zgcD)Xq&c>7EfIGS50)*uqtKoXQ^IaJq3_i?*Xq#twayJEe`ZvZ9O zAAJrisS9|Bi#3_wXPt|ij{2I5YvQpmw|gETa=r26Rewf(UP!dRc~X|=(9@w0;xX#j zs51ZD!S!{*!{L(4SQ8hW()(H?uY_lM#JuO184z^9`Uf-!FeytHu%N8)Uw0&5&{lub zh8!%+07BGX5CZ=pEDLZX0SJK^>tOsuk|UZU8g$Ya`u-}zXez$ep9aAwuKJtN>0Mo=(`T)o2u^R@ht6DE#5IVz*SIs}f_nSV0W8T_pe1SW z7fbSpgWB_?T2knTs~8$$V4o+*k^PQGQSEb&*lU(-)*TkC^{=i>Zo`cFxO6~%fD#-U z5i*+}7;eW1=oQ*4!>S>b*X~GMzQQqWf?7|J6DnbiOD0w}wa~PQ{6`&LrSocz!g$w{ z-p8GuuFYk0{Ig%fh~}&1~g1UQniza7cbzdDi^za7cWzdDkd5-*OVz~3Cnm4A06 z5BvIlIg)?i10w!(B&q(y2mIBMR5(02?2CGmT1~s!+F!JJe!9IEYKvXvZhHjS)By^b z>r^7HIm`}Oc0adj*}2LBnzoBK>Tv6%?2GVV*KB6#;@w(vVZNIu zyj%fEzl$?&YOe0{Fh+@rKUbz&MzGXs_TgAP!c=Xp^Lf)n;yA;~S8lAt8H8D$Z|I#x zokkvk^8AF)^EuPB^=99P9IJVrtE0hs1)mlk&_)4*GvmI4w(8I)6ZMwoCzvay{>vZ1 z7c39FG?6SK?5S;>-4V20cw!I7s|(0P>ja9=Xpcgw>RrXh4>hS;#j7WzcLFZscSONw zWA>BYP9@4j!IJq*R6J(#*Ev^xlD$LiaKb4clJU9(-Cz#1lCuTY!3YlkN(Kh`X z)f8Ei7*V(LdRnsyoO@KzsHrc>epuyLZ1oWmClCbJfvYUN~LvJtl&te8W{E@qdLnDGVuvxGzf58J5 z{{;__1;PVdTw(uElE2{r*+6)}uzAf#N52_^(IS*&G7btbc?zocnf2ifd;$P?0G8t* zceU;FpYVWP>(v){Ku-T|?=f4dO}Crqeq=|6oFI0MP@gA%+cToPV{4Kye-dZaYtC*w zVzx>>%a0E9z#=2vJqp+e89!y0RcJG~;zNG8W>B6VQ==<0<;%$K82UGY-WgH*VMqlg zV$4b9^*326ss9$xmM~g{;(@NYLsZ$d=*_QM&04_ff@IaGoglXiY?h%rq=5!5!?K^be5pvs?7fPT zVpR!TFj^2{%+8Q}-}cdg{1y$gWS5T-cN#zCiXc(xbWn_t9CSk048WE8Zh+vgK*$f) z6>t64>88j-RloO&7w31C5j4KiEJ7H_m6ASJ2?EUQuE^T}XLjEQuxO7{4elBirclGi z!?-R1;Q_~TBay%00l&ngJ^&sNEsmNfZ~%Y@oLv439?%4U2L!*s0~Bn}U*G|lao6pZ z?l>r@(Z!3j2WlkNM-*?@{D1OL@RUf*kFo?TREmX24Zx@5yA60e-Xafch+cbT0<>f` zKudC_2@V0PjA4MR8fri+SOH41yC}-;)xNS$c^JS}Fec^Xu>PnpcBa?b!~S~i{k2suZE$#2Zz5ka zuQc^K+2TWWp~^VR5NI&Ojg&210GrJsteCctHTNh|^qbXm0(`AEt(rgnViW+2Fy6^4 zt3aNV;(s@u#>LIX{kO*;J2&&+mvw<<7~sEui>D1(Z}zKF;>PQaLsKSYA$4SB$zn=Z z8P+u|x4P|jK-=cyY3G5C9sPT#F0d?9HBHcw!aQaE^}k>P*+7@663X+`K67 zmE>|hq4)E9=#Xl$bvJ&`9?^sGm|hoEVJirf^CAfVM4;wXY?nq#1r`1dm~JN9oYGZ` z!YOJvXaWgR!`WE3#(+YhTWO~u|_P!V$&QqS$s0W2;KDydJ z&yUP|J-y3#$XhL;_+{$}5D88JX7R(Bj%O4`Lhd6Zm-W1G8}z)8CQk8ig1S2HLS;GG zS3cmu37vm?41ZJ91ZF#=6rDVj*du^My!5?lSPVs3jf`liOnU9>Cs9TblBg@L!$?qu z-O762iORN;Y~eLBZs?(GJRP3Of4v4z@BVlVYU=4QMfgzXM*1_80A7P=>x}~DI!wUV z;M*sj!#luhkgiNn58x4C*fkKn%W6Hj!2qyAUzZ60w<#9mCo6RR|-?w>HJn$x=H^SQQ` z=aVL%=h@TNyIrQ|hlZ<69jo`J0+m5{Zci^TDbll=LLsijvnflBwtg_nH!H1{T$!ir ze0*b!bqgAN$0q5=qwh?1_b--@muEqW>r}^H`{Xyu&0{@r3*!D}A5CB*+H)=;)79G(qzge8S~wwY+W8e7Xc-$la0? z)d&0C^es6?h9TfV7;77dKz#r5Ap9&Q$&YWF83-FZMUyfV#@J`sL8IyoO4I%T&R#0E9`flv+;&{dy|Ej40ZmDI@**Gl zieTgyW)w|P(iM9<5b7Pw=Mql01}nB)<(}yAG4*xAKQN<9I8m0Ip_l}Y>{9{sbloB5 z>sy+^rR=%XOz)#mhA&C3!~is@9MFpwnv`F@)$)73)YuQy0GiY`5Hre8s4$V==S6D+ zBZ|z1!3e;N>N5|5FmQ`4%}0XAUTTG}b0XHWyE%G=ECZkmcc>d5q(!yVq}1>o?3yKD z36S&CK8(zKVJva4_`m_imYXM@Rk#Kri>5|Wmmfmp{}lKJM;8+SYxR)hhLEvfi+Z(0 zn0!kuEoO>bzf|vK+!V!)M4is^JzxN;>xwEldiQ44FKo09HPmEMQhh+u72J^04m))d zANIvtcmj9}$b@kdlrQ--aEVc`sVYD|ZFnF#19`Ze4f6O-uLjs%=z;_ zxiFNnPi4q7ZW1?8v&4-d3g$5@?=?!Gf3;JO)xi_sMTk<}5Q60N`$cG7qwvBjf6(S!c`})**hKR;4Cy0ju6O3RJ)^D=RL@ysytmlJkSx z*+n<1z%=6PgU5{~;N^d9JWfBt=FI_()ZR>CxQd7^p3W{yd1BMKAK~UJWy(6SMk1-t ztPH{d_BNWSvqaGAfc71LG#ZkF5uzJU!SQGmvKG%0_8G6tQRLE>Z42gb6BFbOy?LrV zv)I>BuspC!Y)M?O#P1!=wU;cnyS_=S^ei3jAlO^;ZzsWj<uR%X z$B9P5PAKq6s215;`0^x-a}nAo1+*6ifbE5ecnWL1`c~_A`0biEfSurh6yTGPjE_Ef ztw7@1?pW{89mD3Pm1ow|7Ykx@JR+(TRclkL0S+Nx6tEM_LxBO<3GN2E3psVv;g0&h zc~X)COV}E}18PIifPk9cOF#`Px{2{$JgL%E*}w3lKIQ;o_X;4 z5{JrQmm$w7DMo&qM-b%(5nHGxn(B_zs@8aU6K?)~6Q&;k-h|FyTS*j*j1MdJ-ZDhW#7`hu>KLiYSAdOM#S_ex~wj1v)PYQ8zh3*L3oXRq=&-pI6xU=WX8{y`orqs zeF=y{Z_IIeS1+4sEJI-*dFmb|1z)gV%aLBW$0$kPgFpT`-gU(d2Rn(1qU!d2;|l-uT$==)BhW7eamuh>$-!ybm;xHtHs0^p^!R7eckf z*_DOOKs=Y>^^q|1d_8eHM_{h>Us+B9&xBBaWytpn%sK!V^08YT&?gong5xk&i?Sgj za2MQ;{N39~0EYa8tH&@!D)ya|<9S%6|?q}>Pr=#*>YUW!o&d$c6sB+DS-;~jz(-vWt z4{_*;@3#8UMn@VCqXCprYzhE+VG=8YD+};Hip(@xXF?U)6~>qD`j;5-u>R%siBL)- zlU!Y2fRs@>Ct(0(bV0qsBck(LEjxg{pluC_+~@R;R;$-hby5xaquI0RV&1izEw7%4 z~tAZ1S)iP!aM&AR}dm#+YF-GDTw$^*eUUUXK+QADzaY9?72;kxpB4&aa39 zdZSlQIK8jK$eO<+t9t-+h zpZ7$JEh?rjEZ?NJoKz=yK#d97u)~o@MFSD?W6ujgZ9LFX>FK>kM5yeS`MtIX0|12l ztdB7_03rWznU|mmBd+n?q|K0{CsO-OqV{~rMBU84G}E(n_WAB@_C`O8lc5W5ANjJ+BHCL)<5)Zx8%Jdt5W#TXia*P< zKWDWa*HvR-z2;^{&2Yi=xD)b`q9`p%Gk5JPy0(_E+di2o5oC3U5Ry0N^&{82u69XE z(WvhPjZ^DBqX>VKEStxVd*Lf?0OZKWAv(gnJ7Tr|u9Y(Q?zP@LYVt@3XFRTHGEEq^ zIe;VItFCu~{pAGx(_~GA6o4bYx(6u+@UeiH|9M?`Cpz0uFGB{_p zYiNS+DfFvWwq|NaDqdp?MZyj* zV7=5@LDR<(9Xg7AG;!8}@<2D-H*|m6FTSe*Gt6d2R%-aR88kTz!Js;w47B0@VeT!X zvR)UiU%Izj3bm2sPAmze?mEN2 zzzZhW!xQ~O-8t#lCD4M}2i#<7%=jPb;g|t+7YwL7RR9)R{}t3tZGs`!|0k>#_fd*S z4b7qo;-~7hoe#Oc4nE-%WVWY&_%dOP4yzUiHY!YH{_qk`>g1(y5v&@U+qiZZ%eQGK zE=AWGl`xq@02Uex_Ibtl!sCRP2?KY;l!E)qMJA{RZ=EzRhqb#gr?N{};(_|X4`g({ zG2!0^&;f?`DJs0SZKC8WqU#E8#T(Q6T6ou8VS?r^~Ri zy@)~6Wm!?cblJ}aTx4LnOibk)Xu51~cSytLQl<1=8z?){!)fEl2%0V{e4Z|woSd{t z;$r(+f;YqZE$9@<6X~!rn`L<{Zf^jx-aScE!HAD!gonhn z#ts?2;FYw`itL4SN)ADU%E%@vA85KP>{;CXfsq&ZAB?;-fRX2Nc*e+!u)~P*Mgg!; z6R!QSG>Ed{E$h+|fif*3SzKO;;;)OJ?FO8*=6K6)-w)Thn8tx15HkMT^suie8ij(j z@iMhQ5QtmDqRH#?-TRF?znjOeexAO*o~%!Yf9W8A0>b~yg7_~k_x$TX{$KWQ{w5X- z5~u&UJYn>|3bC-TbaJ+H^k8~couGDv-@n_De-+LT9Cx3n{`;QR}? z;`yKOH_@Db63!U{`?PbSXzb2Xoc{E(mm_0+MbRWt*lVMBHLZfynZi-l(gIZTVqCQI zEJ!~Rh0tDJ5jhTX6lI=bCd$TwCyurcP^vA@l*iIk#mqI)}@6=5IgnVW(t! zayAaWKYl1&QU^+7Ljq9F5`V9pZ^8avIj>BCl(Xch?AiLS`u|bRU0aI(2j$EPQqH{p zq@1q}MPbbUP|i&CAm!Zj59Lhs_sV$=b8NYJPcir}%6a)&IiKp+{=0H+__4{IO0_)qeL*Y>g=zs?3^w<>IMwP-~?T=I9e z1dVl;jukC;9|~X143F!z`_6~%P9L`I?Yp3&T%qVal}*yevkO}9cRUIC)*|{jp%L)$ z#ej0xKNVxv2@-+ab=gz(dU*ROuj`)kzPi*dfpoUZkh3>pKJfak>#JY91Un1D5y47z$%B=+1AfR`wh;DG)X}94 z)TDHUm(pnu`^yE}I2HE(Kag3xBl0k}6KUi6_+L(@B?PlI*A?IAg2vjSFzgyLIPv*1m~igQoa!bl`M#PD~sBHNYaSn0s>FWC^JIQLIdAKh@c z7vbDwzsyvFVJdL)YYhEyI-HbY_=&EAQPm^T%D6nf*szr;_bN^T{wVnW_@iH;4{SNZ z)df&2bNjWF8i^4iGMw-^m*Ok$?b(FwPvb1m65hY~5UXYIHB;gSi~r!~<>GSO=o~4c zX?*Ql453Rj-Mn#sSXDu^{FmGNjc;kT(>eoS-8+dl4%?8$SkGxf7wOl&{g_15agA$v zxhETLP6~g)|3a5@+xlxS!V3eHu{@l8F)RTmd6I;#p!Ji^@MPCa{9=}Iq5+j z;6Y`R|9kltcrdSbqWH&yIVC^Yl+W|>uOe0xikz{&^9e;5%kuB#UuY!(so18q8(`X{ z9Lf!)poAEhcCqQ03aP6jX!&4snYKHE=C6Q zV1136vu;VSg`=E+MAG|uFvl<3Us$QmH#2#~;}I^uhx1L}weLTwY}=ENJWP{u1ZzXx zaj$l0Drs=`AOq2B2+j&>Cdsgm>MB6=+F4(XPfYQ;k^Fi2_sU!T-iF3n5z)iv6Mks= zn-&?~0k!EV#QMrj4ERSK|DRj+QB)imW?mVl-&;=o@2VBqwZ5gu5JYQctYN~ZcC1S` z6gPX#w9>KkU*P;+{v{8DPfD{G)=5^cUPnVHi5NLsN6)|!H-F-dXm?(kftG*qSx*c|T(gtGiE{@dV7ORVgUF%n$?bRH#oo`DO9}Lrpmy{= zFaHAOC}{cj0UrcWbAEjuZ9X7KxPb-c3YeoZ%wf;vT|DM!c8ap9AdjYBh{xkBmEHwL z3g>w0@rwG1;AN~qoNPsVO~CSRqJKrDS5c4L=)#ZGPC}>7rK|+wj&A6Z0aAD#r)Z|T z9f4D6V*O!8UR;&?bd=>fOy5Y1^RF!Ezn6bkjAbsTD>%YTf#qL*mWK*p`8P6DY6Y$O zAJOYPMNstmwizFYUN1jKuY*9*Yd)n;s3MzFn115e3Jurht7XvguY`r@IDs~0^MY0r z>~C{aD-mJg2URs_+GUqEl1#Vs(X!7BpwhDQaJ`k)m?34$EcY-K?iNCXj&1eFD7aoa zYlHya%XP3wWhC2MEi6Fg-9%7%S64#=V5ntl>7K>x8NH*bw@gCJ#p>5&ABD~}n2C*z zwaxhYab2zVjV*o+y?kfRyg88oZg<(V&_^8mTt+O;{l(XtbA}Q9q2ESA%{w!C95EJe z490G%l6>At(dbI=p6Qh+)7pvV`~hg!+RIDV^f#CU6ti)&tVcBFTY`d6Vx@&J7n z{9lh=KSwD4z6Sd@#%OEGuq}X>daXqk)iq2XSQZGbp(_@$$8b z8eW3N2Dc~*3)_2RC>RK54XlS?Z;{l8h)dX8=w)nZ1op+1bx|{HS*7=LOW|LSyv(*^ zJvWn>_O+dqf4caJKu0Mc$}xqOd$urhF*KKIMyvw8 ztZ7NG2QE7J?Oa9{M^P#Ji=&A7G=mtdf{-5%N!ILkK((4Y2^&hkY8YYN7lpPnL*z3# z050WZu%Ui76?L9HH*-pXDK~*ENKzLpGg`yok_^D5I3FW90Jzi;{%^RHF$!T3A!6=i z7L`UFQFrnkn4aM-bx!d-+Ft#=612^bDU9+~e@$6L??R@riq_0{DK~yRL819D-^~R7 zPkk|WKcefV5Ak7{bQkY^PoLpZfx-Y>iX~!D%vp-VFp@%fL=y}gUKm0tSIXnH{oqTK z0rA0)8f!%}3-B)p(b~q0zr*$AQ0d`l7*{}|A`3Qs@rv81cCY}N7Pe};vBOO{n-DcmXtO@UQ3n`Y0QB z+t#~1jrxmP;-i&^t89JW>l4MhqKwPb`YCI6Hv*f=EsoZY2M?Eei}lnMOztn3T*`Nm zy?0|K1J%4{pYzwB4sDKRwHI4bUVPmN9@@5TZCcfFUVYb+`#XTWDj`kK`$^8iZW;d^ z1~pbfvb9n&u0`@=Te5)PYD@BPOY3A(nEFY4)4tYD=cmYx(vX**e6JQ23VCiG+Ssl< zAItcDsxHyLd%?Scz^f;0ZkG`2aEicN4&<+A<#*(LAbG!ie1g}qgXKV!xJ&s+@5CTw z!$hgpvNYAkma0D$N?`53?=^dVEc~XNXj-AWru{Bkw6vqP7Hj;Vq_s8KNB8FNX0sug zhJLZe)~tp|9+_$WE=d4 zPyR(iSaFdV>yRvTqORNZ1Gn7N`)-8-D@3`xRMMQO_|VU9=kjwATB$0_JFCh2i+{fH zo4e$@lyqHEsQt+4Tvt~t3mHandDVI}&$Q~KsI8%xsWE~170p8zX>I4S{M8+4Gqy%f zf5_3cE=+*$V^5RfaXc(|0yRx1EPVGQ4V0qddY%fH%WAI(*QInP8tjr}2~|A+!g73t z+d$rj7EF<7@7mXnKvqpEEMWzJu)0iH)H+n(faMbGgU2XM=2r^C{VW9+M~iOHt`I_I zS5wM(!+%MVf+j7jDH)S7Qjr52vR)dwC}j&X3V^T(jp&vmLs3tS;fD`*2cRzj5SA7k z4y@S&6#&B0F*JV$VO{d8ZiUu&Ql`E}zRqc<5LSa@qz8ep%4=Yv$Hu>^aDB1M_)K>F zSrAIwy+-5lO%R>*7ToT<)oPqpuu&wfiNX(m$D;)tzk!f&QJ%bNlVT?s?KRy+naRTG zm#ZgfTIx(&ADL*#)Vz~4yM7S;v}}2?o?kQ)vk(a9f?r-X_e<22w}Hb1-dpGpi8Sko zVY)f7AOqVcU~Sbb6fo<62AH4QP_oJ z|9MMU9g&>V7D~7=Q5(l7H1=9{@G}Q`!*;h(C~t;C6L`Y!k6)s(kh+pN$IinOc>1>u z3p&Tz~l30a(z2y<`cIe*BX)aDMMZmoj3MXOn`eh#E2b4jK|V} zEsA59pI>`-(GBVyQ*T_Wo!{+PC9=8C)FwO1oN2y|(emI{CbGclV9aCUQ}xbdG76s^ zc7F=#99_w~(ln=~jn-0=!b&Zc6fZeagZAfV;kM8z#t z3t%}{^%WRE@FD`Ua51seceb=Kb#gYevDbfR>S1nbt8eeD?__LfZRn`)Y^U!5{L#0u z(Kj*Cx3JK6<<_^cb7W$)u(LCK?XZh;YfZp@{yRk`{CR%Q?13OuuZgculY7=91>!*$cb-ysPc< zJ}>8d6Kz;goT=5U6|PYV!_iNLMggjZwKG`keMkCI_>Qh*n`s%9X}P2v)0MlyFj8bQ zIr8gg@n6C$2NqKt=tXhB4YO-$rbj>79kRv3tA!FW_9lB5G#aLc5+J`<2(U{hi!m^+ zcq50YNi<1g+Ck+fmz;;G2?pbEa%1%1B#g+hdlv4}wMA#~sS&TESzw-!H_ztj=Vy;! zg8WN$>7;v8?5v~YOOF$DL~}@P{W{eNXJcbx;q3L7ulS1brRTI;FW!q=Pqog%cf{Dx zElG)zx7@hbPzJFTmX@M{IPNka;sPwDTU<7x*Egt?*A#+R6#j;Owv@p$r zYferzf*m(3VwHe4)xzLfs){$KX}sP$-^SO{ka>In-HP;iPL2zg5-Z5P0Xk?8Drkup z$yQw&;?mI?-M45k7^vrJXa^fc>o0!p+At}KU}IuY7u+1}?k?;K+zS0Ejn6_?V%>Qd zofiV(-D>6WW#Wn^!BTaIC(Zh;!sJF9b%;ExVdO#<*cE?8iyiT$@9l$-;?wngn0^l| z)1A=cO{(QRvnBgVCsHY4%+*2rUD$Dh-`w?>FCUGdmrvuV7N zkJXgwTS97jX*M9$_d#beOP+44(PNmZ$?3bJ%!x9tz<%|*s^}`_e8W)B2i6q?r;vm! z3pf-){V=O3BdCM$HXREHWKx@wHpO2Ge$lQU9zUBXSyt$hu(#gd6pY7JDob$N?kpTq zipcq zMYES#&F<7{5l3?iR!CfE5%S6&Td0ebh#(e?L3&Lbtz3IeE4N=-`PTh+|WmfhF+52pc8q z7dhPBNHW}O&~D*ju*Bi{Buc@HSkJKg_&;IyN+y$AEITJDR?hyYJj01Y5z*f?=K^iD zp>Q-AUKozs+UiC+ z1mZq_WSjf+3s$~YHoCv`?r1LeEE!@uq$8b zHsA#V`&3Ca+m%dbiW_If*}oGL9ZH4%fME1@>FY(QBy#8@w=O^7efM7#3O9AFN6>v`aB&D;fsy ztR!f7AZR7z@HKD(V(rl=F?(ytRk6j+Z5@PF8NJOAqUVDJQw4WaW^|O(P&;aEX`!RU z-K=N{WPP&;(pLo10jFl~!#sjOLh)zM;&lRtOuay$BrnmYh+0w@u2ctaoL{_iXg1SZ zEK2ESlb;94obf^e4#Uw$yZ_c?Bq!1L})~sFb;pVY3`c(aM!Yp^==Z~70%II zA`gM-4r4+(!UHgY<%!qODXyR=kETR!$SsR3}R>a&?C&7 zy;OhLjyKi#J{@(r3{y}7-gPA{LTu%V=EU$xklM>)Hod!6f0-bG=t=uG>;CBLgDQ$$ zu@PST%f`7ej3VYGK{s*~G}}F()?joO?+&(VX&^(zZIfiqeF zxiZJgSDKwH`G$GU0<2I4QA9Z7>yY)(%bj4?$h<*Jzx%1cQEsYehwogTvKm{YT!2jj z4?KO!Qasx+SObZ}Rg3uNCJ z9ROVi`uP`a_oqAs)k>K5VYB`(Fq1*Z)4#tcIsu>hKVB5&?Et>YGc)<0_$o@h#WEr@ zQZa!qEm6@UVZ8k1FS~)e(nNUnH=%DUXNb3mo`=P)ssb*vFsU#QX7C-Imxo?wW^VUp zJeK-`j#xE#NRihTD#y>n>DZj3^2>+tFq)z?kwdY| z;^PYI6IhWUnm6PGvMHfCb;v8pSpZ*U3=QC`h?Kw5ZPuE^1@Tq;?*M~@*Eh{EXCWnVhpQ5x=pwar=bWM2q`v-M(vpvgvb&O{pckN`B90t8JqY-j;0 z;6l+)_w>t`c7CllGJbxK>)wm@-?;<;Di#w!#oANIU9(QRQ7}B0_cOlwq{zAdb(%;U zzEfSxuYL%+f0@zlDCLTdFZp2Tu(WmgSy4{9ejO6W+c> zlV1GK5x7Oa_T_8v7t)jJEAb)cd#R}MJ|wl64(}Q(^n+H^;-|6$`6B&cx!(zA_GLEBT95V`0%J0`x^M(%^4{TgNHNZc#PT6 zukiZi@`vrFR`;*A96p>m(m5G-jrY~bDw?QV0DL&%VysV0OxgkjA7(?Vs`vbbjyPBH zj>#BUATI&n!^k5WL3bSZL_pmi0e}w+Et>%FVd{U)%W^vdfc@3H*A zwO5r}2^CtmuFP-BGF7Y!E&;V8L5O&1pqKVNB~%hmirvHCa6sgDtN&nAa2Hh2FNuv`+>T@T8PIP@+2;q0eeXebjwuY zHo@^$^H#6&YLZEzQt`GywWU_hjmz>989JNv=m)S_{_>Vel7_as79sw-GySKt8KEcV zi>+CGz5BwG)XI9o)w>Q%VGM~QtnG*+cDVZ`mRY_R*R@lY_nv%;)r(nF?pJwdMwLLO zq2?~HrD68w+T6?Lv%e$7>)4=SLFY*?xer{6S_ADLcpNR}xm1Ok6}?^!VI`#Hk=YjhK0 zb`4i6X4+(}h>_`3cygjtC)4jqq-y!&nquA!IIMm)1X;#; z?@jTR;MZsHvnF2=6Ru#ep57!34{%-rmt6$B+82TN?u-+9`Fo&9uj21WFXkVSUWhDO zAkr%c52f4T4N0*GCDIKW|33;A{6 z@x!1G5q$43vYjDQP7{8_nM0%}T z@RVCDIUBU7T3^Mvrv>-K7XXpoN#u8!-sJ0;-25LnXPhewH7G9|SICT?aWi7VQ4Ci|0MK=nP`j(WM{*>^>=#@#VJpLB$tzO|KXzTES~S7>bE`SJ>_~>Pv7B zf(lzWsqcTNGrV#QVEfGHns)q|J80WO?>HkD7!+5pY9(L|=d}!z<6j6_-Z23RTb_BH z^3fw}Qs7H)nVw|1XSYZeIiN_dH}~5!H0#>@_4ZxTYwIqfLlAF9U>*N78rdEJj1LF6 zdCiFy3_{dHoa0LnV5rY^`YxT*0*x&VUu70bPq4hSU}w>NS?usqiP#u2xpIs7A(@W&op+n;-I0YE6>qdTw%_lXmPBOafA#kG8Q z3GBfMk~`<_M3*b;Ez>Zh6bH-(AQJFRlr&hRA(yuEFY_H1i}w250M0+(HLSTu@i zcyhE2&WPaz&UWDmQRaNECyp3V*Wtr*+Ky%&h5DiC;q;qoXIrE9Lw8?pL&;K`%DZdq znyj_C_Bdus%v5M60=Eo8psxCl;XoaJ0#JvagFxsjzkrZni@TertGB18H~YiEADQ0Y z!%m<}m-voqlpl~v5c}^A!f|u)u>E~1;ct5UttpCeQxaGmx>1lDeYvlCz+=2O;x!$* zYWx@(LM9~M4p?CpW3Y>10{h&i{KlivwPh1BL|&FcBJEHlkSMK}eCHF|OakXIFU;lV zg3;zKC@=4xeA&*ZmM2fR4skxx{n}#=4Srm2y&SPbSZOPI`JV37Dk~@A;Zb@hyi@c; zK0CWyq^Lr#T&a?Ye17^h)~fOGCcTj_F?RyGJv$NGTEgXJb~_{a5Ej;#T=tTvvT=a~ zhq^2c;pDuc&t@?iO$Rg_Gi8Avs(VG}QPdFiq@q~o z#xHYYq^+rpjI7|MDAXK>$ik(N5W-_k`^W=jVaUjKC>!*J)70KkJDUgx7lvz*;{`3a zd*}o;DQ6CvKy-}>77xI0X1=K~{lLN%$jV4tjX^G5*m;%0q;2Ubg)RSGP)y%VGFgg) z(`pzj$ZPO2+GIeMn^MN{rCj`g6$aHrQf3c*w6yU1x#vx|o3$kS=S?_j?B`85r%<_I ze$mieEMv|ON=z!?5nIw6SzzIH(0p_eqIC$z=9y8QC1=TWKRy+{A@WC*07Icd>78lC z^NjWpaWP>nPcTGfI;W{svF0qQ+&3c39*)#M1eB}0C;<32OyuaCLDHmD!g_3>0 zHbTsr`r-=-e+kVYBNYB6@A!iHN#W(Am)+sTnNrbeMI+A`uXP}{bzq>pQ$oxIJOU@* zyBhe4%u#np&SIe_$eNWyOPt`hv9D4*a57y}9ZPigf3AEOu7sPLgz4}-u|du5nWkf2 zc3LtgnQK7c_L5y+DoJnQI;|XrS--!qrG)Eu$$WP+zVZ5&D{2cpR5(pOS%QBEjof~!y8(#)NsC>w*0HlTfV(!t<&WAC zKuB#%bXkwPGUs6RjVk!{p6veB(}UTz{M(2AqJ2bXir+D;A&>2!tx%Z^&oM03%ruGZ zyHGUnpjW?RSZ>@g{cl6ajLCjX6kHPr5*C6x)pjJn`F~pX2S3)Q<}j;5QjwjI(s$U^aU)Ab2!1ezW1 zH5?q%1y!`hCSh~Bzt@#1+A z=*;uRau#{n79lN1l_y#PuR@Vv)B^!01&0xiAU*^MoOuqfQDkiSp#eI9g2k%;u?umn z2r~@FNlhbx6D4=jAes@|T`)yUw3A2^hIroyTx4T@hfLkeVu;xft=1vGP?Fi-UZXuM zyij|oHusqplKqf!iY<{;(I8H$GoUIBN&>SQPhik?;6DC`SVVDXl{Io2BI5~l75v7A zktW6)9VB)Eg8`%LqJatA6My9X=_u9LBGuZlxR6jo{s*`{q-n6%uw&wGD>pI}rwQZ( zs2%9!V6d2B_q$mr0v&?6{H!082dZLlJ>%19IkTpyU8`NL%6H5U+aDgrGe*ZrR=qtR zcDJ4`{dNv&>uZ&@wMxsqTaW^}i&ug=b=8+o+XJjoLEj!fno&7rBt-BN)GMldh@ZS zoiUwkKB6zg{Kb8n=tOks9!*(EyKn&5RwXgH0uP zA4gdKs%kFETRA%7!*RlH#EZab)a9XHGvO>?#o=UuBvFcqG}d%)aq6C;@oqrd%6)N~{Sy zofq`dZ<3Uy5JT&}@0FGXXzsvH+Vp?|O;qkh`o9BBF)+G`3+U&qGi@ZtXj@n+1DR6E z2uEEw?bP|v5F9|D$r4UxaZPtlhNW ze-1S1{t;;6`U3U>Q31jVDvn5XI_WFcSS z3}Smen+RE{Y2OB@PH6)^=McD<8Kkas$%q^tVMlHsnuF-0ZSn&U92@28w{&!oQgCDu5ib!+eXv1?eG{{^LBj&?k(w0N5gHOUDOs%KmSG2* z<`y}%h8K44A-!}Qesm!_Y;+|<`oZ)I*n_eA!5*op0h4R44MIlooaFME6&gnmyR8~W zr4NO7y(wqLyzldhL3q#AtHa$%_m15=7ZBdl^Aqtmu%|~kxVTz!bg1W%jLGl?HI5v{ zL^zM-{Ntwa^oO}k`B82(;UupGcpbCp8hRs%0C|*Lp_*Ups zr!T}ta>zvJ5_e&-FL~j!AOMUJkdZzo7pIk=YmUZkRf^x~o+;~YHZOiU-+YE}Otr(;c}5w6shtNxT8#$Gxc z?)XZ^^(Z)U5MS7EJ&5SGt5wV8DIuPfSPVV`yD1Z4^+@^3OpONb{n&MC8D_=L*0x69 z{(OiXfM#x}T74m3S)|EQs48=y+&dA&xxN3$&s8pm90iw^q7Bh=u~eX(s-*kjoHE#W zPH3sF1d_OopoW=uM_5U!fEw!DHD;L=g?vskcYS{Tk-fbk?f3#(z{#?afD@CF0tjTm z1Vw?vG@0V*FeXBsZ)uX>D~uZ*7K_7t*nv1h;Zdqa>^hODte|%)v&w| zA#r$Uy-w##S^%G+;)rTM;Ct=>J6Vw+l3LS15@9o8C)3-X(x*~M5}w}pY+Vj~8lFPH zYHl-VHP?$2N4-yBbWbW6eJhuYXp9u{MLPUJBv1mhQ3(#s0!o0k{sbMsuZiEjME6%G zqbgO?t5`%TJzwj$0PYBk6&sS8p`zXB_dL)B-y>3N(CQ|-%V?HRg%^fDAj!Uglj<}O z5S~DkWRI2_ijBUdXIEEf^@d7ubrIe@=qW@W7x}eamvS9v^U6H4Xjqi4AMo3M6{a}# z60uo;`{OQ=9v)~)QV3+{wa61OA`^d{Fm7;1tf`0c!%2LzI=f=(Gj^+8HUY-@W8{@g zth477a%VGfnjuFwq&zWYT6kk*Bj4gf{JDm+#Cp4P!KYs14$^_QrIypcYVNfpIC5@K zzSRdc2EHK|sXh}u54q-s`J!aG;7OF=f(AQKb z@RLWdq)8oQmKzxCQ!yECF0D%x74bH6Ar}<+u};oM<`RIvg2T`MS}wm}P2r`Q+NbW| zdU$tUrIcs>3i!oEyfr2q$EIU=Kfqs^!4r^gfR7J#;*k-s)mf`~IWJKWIVM|xCLdkg zXA$@f<~5_n*Oc2}-%ceLwEVypmr>AWuI=+?E|Vx-0znsYU~2}WLD^@gy$u*JeiAUw z3Ul;3uW|`ppafW#olGb;{6-o&H;b%%T$2lSark3 zi1uu_?>Ad0J6UqNX;FQ7h3bI@3v6hZ7U!>Xyu-+x^nyyK)-BxKRhup8soO(l4NOOu zLD2{nr6O0s0hizo$ATP8B7YBL%UoTBRq4GQp(O-!6${3Hsd6M^6++st(1#eX>?w?1 z^aXyTjx20IEwo^MbhP>|5+_EK(u&0v!>!ORj23T14s2+cs#vV*hp>E8b>ceW1vWI4 zK^q!+K?~>1WE8|2Txv^9BAGU_g&j~)vXN{pDcCKqQLPqH4u~lQEK+uO+7Bhea#k?v zkM5AZDx{NQqPneJYT+B8r#rK|M;-XQ%h_4qMeYDbqt@=lh?6 z`!C0{6B+k^mjK-@j%+df85w!|ff8W)53cn94}%oyA3u+e{po5XVKSTgQi`ZwoYwNU zg)TdjNnD%rI!{Sl^Tqp;UT zA6*1Wt&=ln#)f=o@SNGfW(M(dbEH?Oc}?S;_(2;QHgSHLllc9?EHbwerN3(Ufej68 zrW1~P4afjvrW`R^@GGARFxt=jJL2KrW>$CD>T+B+<)vc~%?h%L*z}tg^yh205od1} z_U`@d?vAgg*0{T1-=FOQ?oz~Y~3cqff{z`5VKVWXMX3}50{o40D$FXwc#=h zb*yfRW*POUwfn}`2qx;bk8azU$lCKqlW+xW(k@G~<4M+?#uO4Pl|uVS*KZ@;bAWhR zB&6?d*9%qoZ{XU2%Tq8w4Y1=lq%i_kTrorcrI^o~d_KT&7kBOMlfcf=Wu(?H-8CKc z*5{oPl-Y7GZzdf#wf$AKug$3PebjUGOUVLI11#d1BkjD0)D+nn*{v5zNWJ3dzv-OJ zn6*QV9V==NJ=XuzFvH9Ht729E|5ErF+gZEV*y;lzerKoO!xNQ&lMq3cAW7 zH(*JjVuOLLPyk}|f9>-CACBSqlQ94`9t#7rJ_`d2D;EPR58GeW=rbY4!pzdz^dGwu z{{b|AFt?@gez^tq*bC3-C%AC4XmdU~UbASvtdZ0&+pt4|X3^KLtt`ONp`f9pg)Kud zu<|LyxdnGJzxbL9_;q@8nwLN9zTNX`ou6H~Ys20;-}=G9(Fg`c4-1xm-|&P81~#_} zU2iBA4EAKqDJg5N<;tPjK2H$?3OY7r|MCtM2LYOpK@4c zPUQCY%MMAKHWV?%{##MSagk(mIU#~d1+S8!L525pl_$Vp0FuMjA6BkjN zF6$tn>jrbEVzN|xYI^mP%T_TNH&RFA+YwK}n&t>xYW)`h3^xe3W-nKnv5($!dX@%1 zSv{JZQ#3iIa+vUmn||!v74|xQNpkze^}#Xo^@sO|5TPPJFelz=^u2)NTMpK6*~WHW zicbO_9V>^YPVqC}%rH$|5z1tLJaYI9_1>qvdiC2di!`I}D3?r7cV%Z^Q-+1F$97O1 zZDUcHP)3xv<}rsn!s2m650M8;x>8=3dV9^r0QF!WlVHeNiBkYdzEHimYK9uZ)&XZg z94lswE{umGm0r7+mb=tZ%HhxQu^>6BqX|S5jymrfgWp}(-HpNxs|G&P_Yx-M)^ZMeqVRFHlZAccmkSxk7c!o6-2_fNDoOH zvF5cLsUg);m#Dd94zt}o2hhFuFCrK9opq>P*coW%AJKk=Vo)h;lblRc2_zlvX7NK7twJ^Dwj?wIZ7m`gpl+tfO>vB)GmD`OZp@}J+aE7%@Mb=qxz=Xb6C<#cSJ zHqEr=a|5^1z8vC!LGBxA3iikw5S+>VCi<+T``?xwS(ge zK6$X8D`cG)jZvegrjuj8fs9wU%yqaNi>M=fiK7*(cf7ia-N_iJlvJ1K44vio9ka94g!tz+h<^K7-~Hrv>oHfJho^+fiQivEeVczgMtxcBxXhGrHv ziISb7?PgyV7&zQ}IUlAxOM7Ur+xLE$ghkw4`x5bA$-RxB=ZAeylp;zNjp-os->K0K z&RYnDfOS7CmDEb4lqPYauWz=`_wAD=@@pjK3_|%%NxJ^D*%5!6B`A_W;&hF45Bozs z1mUZ;#9$L+6aM?sw#Iljq39NSnN43r^`D{W`LefXRMq02h}bVklXLfvi|@y|TIuA_ zjFMU8-flPL1epYWvE7{Xs$y=1_g_`XaFZIXSA7@t{Rt+;Uj@Hmphr$JC!#FTNE7aO=Qiz((B`!Fugp9(pB^qbik z&DkWGD1G4gV4l$DQRauQ&|WV&z6g4!+~V9ljl_^I%#PBLRUoTt_w8j)$n^RGHZN>I zIlVqKI22l5U=?K<->2drZS0D&I7m_~WcK`bnRto*o_U6DyUN&ta^ibgmXnd+51H8F z)e?>6r-wUdHmP5Q>Ymj6(!E}`RH{pqyC3sDlv%(IdzoWS6^j8re9*d)w1{${0ptH! zi$z?6hjl;5ZCfNq)!ZiLwwl%vQy2kQPx3!;4v`t@dZ5k2Obr*LC&*e9A zxHG1Fje%JPsr8My}|YEU(%I7>QyX{FM8yTbsPCLT(3Q9Pu@@c7R~5CiI$ z@k2UtIkXQ!*XhB;ENf6a!JjM4XCKcq0^i>#T3)rD{t6F$Wk@E&sB!l~Z8zKkwhgft zakz~n6d7-8(@zb6N2O)>QJe+)s_CWWJ+!dY&>vJFCGXg_Zs+zf`6gq|w4Rfq*)|0b z_ME_JsZiN`^@ZpE8tnfqOsyl*y0YpP4;8Ll5QX!C+M23#9bDkly~SJnO|?6|Bd&8~ z>0N7fVY5kP842{%Wvi_#jp6$lEcJDQ4-W6Y?6(qaxZjfAfid~e$CI;BFmr+>AzaR3 z!P+}(VY;Xm&sssrrxz&+8JQkYf&FmR-zv#GS(96X*r#wfbw6C8&u9)f?xS5cs(MYL z)Mh0J&jB<1)yUuRwzan$J{D8y<~(&xQ1R_{4c)TEs2<~yp+EX;{(k?8J;}vPeuNAJ znS7!no{;7y28Xebhx_#WH7_$w^!#yBX6CEcdM4@c4_Ns1wrSufIrv5P6s z`qHEfa5^Cj7aOfO4SW0BO*k`{BGl>*ci7`o+jItz+;G(*EF?oFmBIFAeu3kcYJ!un zHKYqgD@u-qH?Vg9x~p?1YOBT@*o`(f!tGwo->owKOjnEvj!V+T2D}LGy-F7@IcnSr z$j^M$yqZm$Rmfp*?<7`AhawHx0lx!}$4$agoi^6<>kR$N3}#)Vz^Q!NJ`35;HhOA% zdwA9~-Su%Pz2Kd-t1X)~Awx^IPSdwe{4eJf&m!jjAKvaESd^&S7WB4l+qP}YN z+qP}nXWO=IyUu?js&3sE@v2o-os7(W#%hf9%`pq6LO@}l+^+*4=E9cjxbPaxI~`+1 zp{IJ%|LhJN!0VFl3Ki<3!dUZ@3_?#qn;MVKZC?poqQN|6vWYBjF+?I|mKNfH1Nj$A z+5N4b$g2k0ck4I)&~(uiWg^uLvYjC%MEHE;m6ipKMJ#-3s?M}rhh-7ZQ?eF&5+X%ea6!(=nd^#i_I=$XC-$@TqV5;m+67|w8&Il*nj~BQ{ER0N048EmsN+)s z3wHBHzCP;^unMpehdj)8q&tAZSkkxa8;k@%To6b-Sek|UR)3#64Kj52Rwo~P=y&ba zvf#FLOt#M|g$uR~^nTM!XB8K@>$?~tfbJpjk1V=+RmyfEjDhSo+&7VzzrKEE^bM`R zbcHg{pOnmbVPa*fLon6=h=?FT9E=pSz00%bxC_X&*!@Lb+63{zryMg|e~|8x?JkO7 zqIezg4B?3|=l6tjnzJkbRjri*`zsF0Cj<)Ph|7JCs!QBKAw_ab|>hP?8NM zxEK%~f_)IIL$0N|-veQ2($(@o3qH%>n;axfxKNPKw({CXsBG>tNGAuumQZ4zot>XT zepXn2>DK*vvH@0qyR)rp5b|wQ(X8v&rZ(&cPbEhHb-bAk8H>_<@+5nZiT|KKGeMB8 z@C+m?hR{WJrK4g8+yp6-5>3QP0}ueFViH^V~~ht%?$B zPN78H{4{!bugC1-gY5Dh{5+ODt0k-!eJ0u1MbS3NgIc#U|FVsO*~XWWZ=;KF zHFeQtE8SnY+q$j3WbZ(T%Htsp7uSmr_!e6S@nt^YL~GvK{4KYd%Zp)>S@ht`@(QrT zVLiOFOq!=?piB@?5S#VEC@Zv3XjZ7+nvo9<89+y^P;?sA|jEo|BQ#(v` znddHLk10&`D3&)SJdmz}xiJ(p8;kZM!4d`hqL?U{ybWnAG084P^MZLP$>&NTXRKuL z#qm!7HChsEVhG7Zh59UN=PggfF~X{BkaQv2y;4gM$o5sEkp4dUPhx_gQ4J~WMdj+o z+4d!c+Y-0G%J77}PcBI`Tclc5O%(E#jut5c z2XC~~E0hwF6>DB$HMx6<@$b1`vY`~hzWu%5eLwbz}R;3t#a z;ywlHxYgDtL2tvncIdlg$Jl!X8Z;iWFV91%rP)5Lui*jP_CSDQMqj(cN;bqLBEWLK zvsFAl-s-xxM78JxPhU+$;Q}FrS0FI;ue!OKP&`60GckTdvI=vG^3+^%oVR`XW!cg0 z`@{WaMXnuhSclwhs7vm}cgFo}X5mIqKvt|E1tDt45YBC?2Y!m+Cu^L%G9&LFqw6Fe zCJrg_Da_2_ms!4UA5A%nw(l!xGZ)nel8mN=iVGk)@!XceN{^wp)+8D_T*&He0Id5R z{(;ZsUHWEwO7S|M06m5cmCk7m;CRn z$K_`F9s1W00~Pl-dj7?IZ`sV_Z=LtJqC@A}ub=m^ZUSAm?Zr4+-CdPPalWeiH`c0C z%paWCOuTW3@7t@=__KjxK`?A42O~W??n)8RY)(AFzR}6l5dRoo-dAu0o8|?6QO3TH z_sk1(|Eus<*=NYKK^94SVh-Jw+zW|PCz6E^a)ZTTDlJ~jj<4+LdYcX_ zAV>MT;vOQt)cbejU>Vsew!p}SFFS(f5AIUaW`EESm#w-ozfv0t_98sE7YZuTeLI^@ zAO8RvCX$CxDT(K8uvp=6QW(?2s+6sO8tXjI2I-rZ+_9nqe(41HEpKwJC_e zxFn6}Qmc1IlhXqaj-B}*)8vPiL>KRKO&7{L^BL_Lp4ZG^o8lZCF!k7~sTMtHE4v~J z*dA=8!r;a|1L`6#OU{x%a-CkgO8aZloKuvU6ka~Fe7Icqe>LB|%f+|FTYjH?x^Swil0JS)6Eqem@g?<)!C;v2T!wBpf zxhuv16wtfP)1#lN){MurG$%wgp`iws03eYA1Fit-^sk8TN(0Vo32Uh-!p$q9--?(W z&zapE+n(GQh?QU7#=S8vqq4iUDKjYFySXs9Hu-Kd26Y6x+3IjQoyp;L`#)cPU#w+Sd=QThG-lW>lqacO4H{JN&(WO6fMa@ zq%62pcM0gw2n&wmQ34DLw$7m)d@M>)QO6|Gg@Y6z7<_La;G_{SsM_%%1_)5};E-lK$77Hc zAb<=I6nNWAJ*BH|YoiZ2aEJ|1hzU{D2gMJvq!Vy}#O3F6*(V@GLt+XRKlB#!3J@hX zKFlEDqyg0_K+LyJYQ5GVRdEgJoN+LNh0QfRsWHGtgON%6H7%M05YY=32~jXJQGD{0 z06Tz2jxq*SN+ z^(~|fK4Ph8xA3Q2V&5F&z<8LGjvcUjMlgG}Ij zqEm<^?Prz~s23T`myYG++#!2RAq`lp>IlvKmkQc z`Dc#j%UtR9B=H=buz1G9c`(3yB|58cxLjcBpeTY3fhI{(f$fU6JyPcpw#5kdW%?

    _2CV~(p#RL+;EF^}l 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

    s@gk)Zjc~ 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 z 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%0AqD*NK&a{JXYO4G_EKbM#u;$Jb@ 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 z%0D|-xPf#%7bOVxCDDyygHgpVBI+~)d|z!09WiukkxtYHM>^YHO3{mYA-*{tQo1y^ zg22|`3khHMNN{1P0#?})YrJ}M4Jmh?hWRoQ|8^$rOms(&a-8#Ck;Ctc{Z;V6XVOi> zY`Pb!y5;IlE0>$2?Jq6szt}vPq3u?rRSEbF*PEMys+rWmVllj2+f=ETh!&NIFBWxn z?iJz%3h-axy)BzmD-NAcuR@rU7+^n7@i{Zluff>S(-0I(yI^9$(BirpIJGn5Rb0#V zebJq+>!<7n%lxTVN2#oeBVPL%8O8b*gQ3MPN-Hz-zy5m#7Akzg7ZvHZTKx+xO7D%i zf$HzOR}LS9>T|I7ZoI>SY>WUz#+>f;{E<+mpw+1|4>92Y-|RuR=Y!YvQkL5}I2Zs5 zeFe6s6l(D~=5Kmnoj!0jy@JTG$erPv%8uI~QlRgG_Tfb*@a_1R zKsSkd>F7QLBgbncW6c9wn66~UKPnQbgHYHbc<;D#X9OPf~w*g;a>nSf5IY;@AcPI5$LK_B)neC06R9E z==kdkuk|?ZRhTtIx@ybzNzg}9UPTTod|yg!1>gUDboPn~7Sz}8hp_oRK804kvYMx0U-GywzMF&HbHMR~Jn*@cm+53z@OA`I7OJ*2_?Y@wz9+0v+02qpUwf3e~?B z6rj6a@VtI)DiA+gL_p_B(GcIXjBXhgH4QCx?>FgGLP5sp2sBr*0#Y4N^q&<%pX7Z# z{mV)L`T>fU^h;{yeJH;P52PAVRq_47kySOLmpkZhB>hlT&i%)9wgi3SmV9rbtI&)` z`P}sNY(A*7iR>Mn(t`e!#SI;n$oxZ95q`ZmC$KD{fBIJCg|MBsiLUQN6?4-Hd!ZJ8 zv_+IGkcM8nJ8!PB99mfX**q74Id}>~FfcW=1aB~r<+c1g6_n?5e<`g@dnmy z?{69Z3K3bILG&`#q@RKEr{fo;kMP+xo9%rfCH)y~RRv+H?T@##V(Yl!je*!UQUC*5 zsLpBn5dI$5S31l+ZGpu4tY-uyLy6B*mr~j0x%wb6>I{cZ=h>dKDf2Ldt8|DMhI_nE zS=gMdyn|H6%OtbmSHwOdoHZCM_WY(QjIGG8x1rn<-(JO7wFVW;F&-~lRj=g;F)DW0M&jWr*Ec(7W=j&7U4c;HpD^m$+ zQrGzF4y?l;Ir~WC}!PldG zvR^WC9kpB?W~BvOo+?vNMQ-x6zDx}pC-|18^ZsFyDzUKWwC0~rh~l%Vb1XzA!$*tb z=0}Y$8B*}(2iaLy$#m`+6K~h^RrpS&(SUf&#}39De53-Y1;NQuE^*s9=?`YNpwB zJPiJ0dM=+;IBYz)e8$h}5BQ0|fY|lr^`w*Y+>|&0fF^Lw{0#?URrbH6DsHp>^7tOE zzF~fZk(6h)`3a+pvM_NRG$e#8d`_&QP7he;?;HE_UU}j0d{yNM7`AhLWD61t+#c{f ztBs?ZS@5UILYM3E`Kf?R0yj1Dt7Mwhvo=EW$Yz16xEU8r-18k)-Coq9ez(L8FW9`hcJFN zGOwnHF!$K#^z6Xw|k6vRMCDGX8c6#69g}n^V4ZO<+*+3^|=r3*T z%a`MEm;`8>V;D-k3NIJs=B|XGXD77cdlf%~f=?#8M=a;3c4`rBf1C3iRjZAGb#gR4+C;sdRk2I~_YZBQ+P&@}&V32p#$xl| z&R#k8y+Z6|DgF7JB++787;UmDWPVx0)}<7r^{l(#vDanHMjN^TpZNlqzg1CLpuBKa z>%x)#TmrUc?Eg}#+Gd0Tr>=p@S7L!`VD}SQ_%5?WYtPgK>d zs3hRkOn2sGZxPv9)kC!EQ@h{e89;fqiA;3U_ZBzhtLo>jGTP%%88hOz@tfWJAlajT zl_5@Bs`dqcufC{Kz8=5oZXIm)=p+7|tVN=BqP$YG=eGom!Ybxj_;XfMdepIf0Bb;$ zzl5}6E~>k|u85U(iR$T^>hO5~A-k=7jy5Ki>OQYH@RC&^uzc-%xD97({F3VflfdG;KZ z%+G7MPA~m{j$7M%_gC37Y!jl0#UUn?h=U>awH{cQ&Z}2ERZ)=fcSc9kc)qlcGh5_U zS?~&^gM?C>fUHe2b@`9tJVcRM7|XWOS|0>~$Lt)a$4ek8nJK z*@=9#6c0w#jX%Y9sB|aZtGoX+2u`Y#S%yRef3Qw{wlZ&8C+xeQtkSFMI-(P3OEhd+ zZ1zZ1&1D#II(q=|Okzjp3f>qGA!F~!3Gu>po!v`0At?K)*h!h6|K)?3bym9Dzpns3# zzM^wlKDRoEao|1_!Qm!?`5x?d4qyueXlO@ zGRbHqjD;@+4&5!1M6i(%v|i2eWb6+*a{Y&lz5A~=n9HhNj!H?LKCdfEQiMZdc9~8k z^OAO2U@$OGG}Kf(C~Fr z6jnwL3gp)pr4`i$xMw4Qq14jYD~EQ3zN2dU&*SOV2LN#Vn)yP}k%M3O+d4!vmdoor zijUxhfpuhSUjXH!mA&!B%QdJ3Iv!t8pK5B_rq;bC8YOhga+G(%S1p$TJ_fE2_b{2aFF#S_qjL>mWQIA!Z!MKhmG~~ z8r}V%WDuO!H+Et=rEj^3FDU;H7^`%s`))k{wCz{W_mnT z@okmpbtCc*1D&>Feun6leaz$auTOl#$LoCoTBPm4N9SAS&txlJrgN;~2u4o1dLtSC zMU2g?E{iI8>`Su{Ao#0?bbSkQRKY7;vfOVw!jGNsY2K!5HIDnpzIL#vj* z$E-{L@H{J4?+e5?3dy1y%HeuViU%Y!RCzofrGVp{Qtay*|A6;_e#8zYq6jTbQRD8D zplXklRvM<)($SMa$AS6nC|>*AfK}j$K_#a13d)Nwfa-IG z?eA-fRQme!fs|or$My6DJo+|11Nen_+R^3AS#Lc~N+QokDmKQZ8y}df5z@?;_R~)d z!fg7~;ohSR)eWOQ_PM`x_!>)Ywml<-8InLGDGVLaR;D<)1Lysh@hI)h=e4h7W@R;ax5wE~QP0vo}Dnqy0>2V(3OahdR!YT881HAC( zVDtNxoQIN>?;o{}bGZ$m;IF}K?J7Bch^6VpD46+vRNU-s3g_q^2cLg5*5MwNpbDB@ z)rR*^*>husK%X&O{qc%Ojfy|P2DB6%ZzwYzwjWD=j36$Mejc|X-yFQ zKda9l_JAIEeJQj|XpH^pSa+;LRCgcO0as{wg38Sv6kr5-uKwR65I2!t+t#Nco^}{k z%tx{y^d47-N~m}+-?weqccPdY0-$Z^L>=%ND*5h76!7zxVf;>k zURAVuZMcs+&OWS{ynOn@(}mPvPJb$KMq9XRxGxm&Ll>6*Gxh4n{yFOw1KF8?ws^j} zJtHo%BBi0U6;LL+XAS`_p-hc1&B<4 zl6)SSYee{PFN&-w?&dx#Os#qdEGD6ofRcN|tR|-PcHQKDb-TOj;D^>m%;s-3@O?!l zEJTz#&tjW?fb$*2E!rA~1iE~idKW|KA(b?Xgr6GTQ z&rrZp{ZZLFMv<@4fy|qZY%HpBJpbCRyddYse98OXkCH?9`hHoi(aW>Xr$-hAl2HkQ zd<{N*NIM%fw|$h*?Y5duls%IR#fA|9T;>6esR-P(S_~D`EbHA z3irBYs$cQD8~BSy#=I5UQ+q$>y(%7@qLZb9i2YiDEg>lEA{2{r!(!U|F9Lb3yaaC3 zDWCPux1RJhVGV_SucH!Xgs)i`(}$yTVjDNADIWGRSt+q|6;sf0)Oof(Yr>a;U@kbn z15yj)>V;3e;T0LU@tnCIjW)qz^cWS0t}nNOoM5YdKyCEp=~$1zJQUIdj?mkEEr$y0 zj6uSSTfzI_kX(UbTuXLLRzDm>fp5W4YCR6MAw0OiS>mOs{7nL;~kn@<;f z!$bHnGTotuR6K8~6lALXF;K|fA6FG4d@vQERHQ1*_&pNxny{&Y^=<1kT|_D>JqX2a zRSnM1p*4nJ;xPRo6oxvVZy?;G|MP9vvs5ry?I5%ONYH(ou0-CLGwG%aeLLSwl^jGj z;Vb4xPzgVrQ-#mMYM;tg_bmv66-(4t0_VWywF=+JL90NBMY+!3+ju|N)j!s-uFtZy zaaH=l9eEz#gG@zNVhd{Uf$&{Nky&ph+kAGFe0i_WJD^QB-Cz3N3H^JPpJ*cBP`;w? zB`js9V3KbQJ;BQU2gT2MX%k}o>GO*Dl%wB`a0vUlj5t5&fX}Bi(s5U~`ZN`_k%M3& zeNmRA2J+mwp=>Xtot>|D5b>v5TWxL+1*%hgH}ZFh`Gr+%TMK$nk>wcE_wKL4YfUJ~sjfdhU(j*Yb5$S{R)o(A6DH{!>8RY=xqXm~+kwtA^Zj=R?Xg0`M)J>u--r)7FK3-kXo;`U&56hRfequ5NdPZ-y0>`6W#B@9}5)k}!@i zRoXuPojO$ld8llfu7OVWKyF#(cn(>`t}=~%Uj_-!VKEc^=NG*+uGJJcT^|jEtBbRB zCoqia305}HWfavZbE&de`rX6({K}n2F$vw7h))f5JbN+x>r=>5PtoTZvFc>8UlG86 z=%5W4p?P3wska}lPg2EC2|oX3??ez6`~u(c^bD(h`p6SVBO5sG=K+K268&G_m_Tb#DLk|9o+stV`V(jH--+6qZ;~@$2(FpeK_T zq1M%9ePz=xX4urGqEL_5FEFBx{KAV|=F9lt(*zFr`}K0 z2k$*8N(q7(- z3VkG&^N$jhYBmL9zehWMdO`>cL(*0$Yrc3&BAG4=-BCT z3f3tbwR-pNIsq5M!NPM^mZi^%@@6P{S9{m^hhx*s9le4KpMQMh%g5Sns+F;|avf{> z_Npv?3n^~laeOnN^Tu*ea#_J~3FcEwl<=<|rrQ2PknTr()CCp%^Ye$jnc^P{F6>K^ zR|m8Jfe66{6^qID^Ja%;jytfOtNC!x^?nilLvcw!!29UT&L@D!wq@ z6`o+;%~4(^4>hBH!zj_8^Ny+DhKZp8dF#Uh6`u4yvxL%9^K$^7f=<8i{ao%(N13Ji zt+64bd&2}iG}kG7f8DnGKizmO5oY3;Fb>?}_oJUVbI*yiHO zehPWDD=H+U?uz@qPG->Hricma`{38hW13mOphdmYcJ~|gK8)xP$%E7O?NygiNl)mB z)8}d^_)er+CL^X7imysK_{u?L#nYKAdLKzyqR{oTI2o|G{gCY_F~La8)BD~{!QipJ zJf>N%FfsfRd}V?nWTcnuehFcKW}*rScqkcPk3f>spJ9)YAXs;S)W&L+!u5f` zuW;qM`-44wq?;<_FF_lJ%v3R$kGk@KJuU-a6Rqn_}8rB ze_%w54)XwlAqw^Cdv)aw);%mQBpht@2W#zf{kxkjv%niu=B$776lGwHOTG!dityl3 zjE)Kf7zwO&bq9qH6-e;0v-zO;gkT$@P@n5OZ*rXzovZj}1ioOWzHFpHh5V_GP|b}O z)N}QLQ(Ej#e+wQcmMG0cmQ{fZ5|lhVUj|M$IzT$D%l(hK@~NJ4>Zq9uygJ@h+#Lx4 znU}si&F}A_;!|`UbqIEPpQd2?O4nKE9^ZOaCLq~meSby7g1m^m-=)AD%qYX^L3oxK z9a7vi^3+ZDdIq0)j)m$n(+6flS{WYt1tc|{a-VbRoT^e;ChZ8Hm5pYUbaY$0F0*2A zzCLUd-6;qq<||_p4&m4bap8vWzRw#A!+v;fFRY;#3L@wR6wBuc-ZipC zRlleqWm7yaAd=E_n{|+ge_0U|qj=Wq`k6`pj_V5Tqcf+Isyq$99kI4SrxISGuBM8U zba`aocOY(?JJO34hMtD-X-Mq#vmfvKTa$Ic_b|A@FPfDOL|5A z!k(P@$$cB&S2|omw6C92VafjBu3VA)cp-TX=E*dP=ErH2X}nLyNFt&EhCagov2K=cg~FO1dY(XYWU- zO4v!25Cc4XuZvkY39br{swC@cxlh+x4~8}ap?&fe{?1j`N-$K#Obhee{lSS#9;KJGs&PP&2K+8B=n)EGN;}Orh-Dju6NTH~ zC_K4Va9vo%q*+#ae^%V;{JpH&ql>Kv5}zXg=k<9yaod(ITS70UPaS4@A1?x+`c*#9 zQ_8|>AhMSaDRbJqR`&>=P-&QkI!~sc-ia#aWBa=3QIJ>D0ua7>hWpQllKmN44DjIL z*L@(K9`#r#Zo}0LD3SS*H|XGbpyR4y0Bh6HXb#>zxrnwg21*~KQLHNYZPJz4O7yO4dQ!#G74>*TA3 z{2CMrbezbS_-RhUoGPP0$I1H)UC66HPeo9GJtZNnMmd*rjdEv78lk>u6y2SQ_>G(rzL0DBx zj1s;6s3$G`>|ccH1Z3*BjWE%1!s zD>FMeEa+~>2Ms&D5SmAfwMkQ7p{@AxSeQJ2k6me021s%<++auV4KdK2g*j_LBT;ZY4 z3~}~hW7p%U-UExqVUqVh>e>X~N4WzBFGVKjQRsB1%DkdX(?6xPc63gKUxX7w{NuM{ z3mPEeHq&`B9qR#I0{Q4?sjhI{p4LAl#q!&>*M|7?S0lcviIoc08l5-t>We~XngP7a zNOGX?l9UXOQdPfuhN^>iQp)`4V89!O!44yDpOP}1_s@CoiasjJ7Xl;rR3obTsd7=; zQOFHj1?=5hOdak;Vw;1w3;&tOg)N9m4&5c!C4Qg{PhH8h&=E#irhR&xI~S-Atu#Le zHI~T?M2Uqw{jhn8lb(K!jtZN-_40Bj_Ud}N(fVdKk5_p8jsWfn6HPdKenYPSK&AYB z?|Ez4n#PRj1d?3Gi~Z>m;RPWE`BKa`WQyrf(UH~1aeT^R_%i7~>+2CGv->Ftb`mz6 zXFiZBV{6sS@$}yCX>FVXl@uy^d-eW!fkgl$R_tYuipglk_eS*zyOpDP-1t5)TDK_0 z{vg(Vr0w`nK@n>Fyad%e1Gk&cd|(bZ2j9p#R1iCU@jX{07?eSOxi_10(s5vTnjeLO zq&wn#23%xj_wdEpOLfqX`|}9uob3CiFB)+C>1p6ol>538H#))}t5E5!7GH*m zx1iRI$?1#fVn-)yC~RyU+wl0`!&dr1XE8s%w@pQluDJd-E062?Xd~WR5yqOh1Dn3Z zVA;RvC?gfoqU)%aSD(;Z&+J1yy?b2Kk=F^Gg0b!+@hUE5y1E$)6IG1*y^xWsUPuf@ z;KBP`QQv`uoZm6MFXmthE$Fffs^W9|`TSg06zFK~r}U9t_~^R7V==hX+e*IQBWS9; zvfvYD(_v}!n-FpD`YMXZ!{d0JJ1p3Xtr?ERH;A@>i*XCOKQqj`58L%p1=JCGp}))I zG1-R4w{d>W?yD-$7#n&Snd(Up1s{Y>xsF%6fb8Qw2nx&i9Wela2g>TN;im6P5zC{U z+tr7QHKO)gI@K{tO#^w$k_D!MAb9%z^k3>O0RKfkLh06E@~6jFasErbXA_DZ@W>yF z5*82WM=;zFa2`Uga7*p?>N!4EHxhzg9IO4gD7Zbe{g3O6?ShR2Ic22)8M}#^USWU-om-Q0BH9?Js8z|-KamXH_VGxPF6Vh^Y0#G zd>?A(w$C1^R~7k7WCt=F?00XULFku#Kl8l_%%_i$H&x@(&KdrGh2iNC;-h2z_V4M=d0CfK=|HJ?Admfi3d@3?Hgn5yeHTHK)TvxSc9?Kg#f7&N1T z^17p){E9ru2OP=v5MhC=ud5$YACl@@i2QlVkz{gSnxnDySW@xrl!{P2&; zia(6J1krq6mb+l0UT9@iQs)Id?m}4=+ElfbpMN}^36kWvjzmusW?aPWI9$a0AEEpK z%9=6zGyS_NGeRN(2jFlIpZ;zZe$z*LH|HM8=6DvQWu>1G;br)~cnU}mn?aH7)1j~2 zp>36tpg|PJiArtC1uyC$L?7lPY(Xe3>bPX2L7f+#%iUueQP}ny*~dxvZR-S-fP#Y8 zp-h(cX4L?dCDR3CiTH==Dq324TYle);@sOn|IM=6MPGog-|l*#);nK-wLq9)ERM2Y zOWudi74d+9Uss&398~88q@S1RCc_V7P=x(S(@|dfJI?#Um93llqwSSvbRqchcPf;^ zzW;RDRonE2^hTl|)+#!?}am!|Dyp}T*r=?TKQfu5b6t0Vw`j%z{X^#QqcNM}J0xUfUi95;UH~iQ69t;nl)v7vYNAT*3tTfsE#!5K*Bd73SUY6+nn_x%#A)JY4tH8a0t zV|_*a(2GP^8>>I=(;#Gdi>)X{`sh$H2BMo075o>Y70(~737I1(5N*F(nq^d%wQwa5JQZE(A2st1`>hI$O z77yJbP6*BR#)@rH3)ZNbJzrk{;$$~oz447a=+`L909XJ=!+H)_%ixQ z*b?a(->66Qofq6I;M;ch&3Ngz3mM^p!W2eW$MLulYem9~Z6)_Fn^e|u??Y2rfYSF3 zGJzC*R@3DqgH47OYcUE9D*5}TXFknz9? z?){gm@cg2$hYW}JiAce|lOM{W*NK zY@fItbjuPn;(``MJ>PuhnIU8-edAJp(E1xN^QR-JRIQ|u9p584rt^XSwC%6LQ&8pn zOXzM3%a7}NM(B3;W^8)vo6#S7lKBwnj;k0yULOTANrLELeW^*O((G7wol!wqVcPkk zE8oBZ=gT%Pz81Q_idTr^R{dA?!v_qL8o)vEce*b2!X~-h5-{?-+x;sZq{$Ip$%+0m zByDh?9@AV!Rc=hKBd74HuK=du3Ujv!Uc`zDMWJ@MsrfMADk`v7Ny!=~P#*A=S<)nN+}qrdZ~tCoM( zlr{gY#ZWZS)vveTQoencsLZ59P>nA|2B z_obs={W(9kE`)b58sX0+?uU-|E4Mbad%&jiE zOv+^J<5Z<(mFMTv3oj3znMtBg%;d4-r#e@tcQ|y<9=`!0^!1p07j)2-J!5kGN1OTJ>UX2X zdnV~PvzYwn$-*C>-;N?YLiv-9Px-_#a2?nahX?EUKBw25k>`yZhw!lu0Nh9a|I zQ*)lGAQ>%%4LhIy--hQwhp#CgFGR5G$InUZ3slw9@ctjHFPBaP+qJo;EqL<9U0pbY z5mc|UUoqG}=Mt-EtTX6od*3JN<7WI}kLlAq)ICKAN+2$!F}uFE>z3V}DlBF8!@;r2 zs{#-|>Na6|lBVkfo=4?9-EPx$=7}SkgKj_;B!5$IeFj(%W{|LK-o5a-NF>8jS<&ml zI^NgYSr1P2d9(W0Hg0H=>uxsqaA$hFcW)5}mW{k>d(m_tgDSrKj-tEg_g4?PUibB& z-q+z@gYOG}NLB8ed@oBy_&Wz%;)#7&7<3aq*SbPwAEJM{>^xL7bXZu0{{r+w#BO9% z)T*GI*WER;UAzIz;0?q`*Im{T){AT^KE3Wiq^K^NSD1ek=Kzzsw3Ou(19J9x9tv7! zRR3oBdPLxk46D$6kBoL-*OSRjML<;4iZNLcL`xbR%8&oX%bh`=Q1fL43yNh(cbu(_af`BU%rCTu%e4>3AbwVE3t<~eL^r@Bi+0R3I1D~IK62@k@B6(kQy)1I; zr&wG&%uV&k^_-QmaX5Ir{@n?=TiuF;TjW#e$3|@90%G-LD*gNY(1&OT>A%c>P)C`< z{rKZoU$-D_woP9i2BN}O*ELXBR2A^1 zk7tfag&Nm_`CRX zvfN=4&&g19qBwnuGKKFkuZ<~AhiGW?Ms#Q9`xC~TDlo5b!B_XNS)`}dSQ2&q28tb5 zg+&|BQ&paMoIIgmQRBL`wt6{>a2Rahqa^?B@lEKDWUB*3>#0zS(Op>e)sIvq{OOPD z*Xm>>7ENe2T=ushgC@F`BOVo^t}FRAHma)tAHEcbQ7IrLles_Wk7wuGUehzzX@61A zWMro+j{LCR`y01Tzwec2-QEg7dmr@SD*Kni^wy#2E0sRZE1*!KZ2kq?r(=b*vw3w9 zQc|E%I`Fu$Ux6Ma79B$H_{8Cor2|z%*qxM5=NKME!;j!Z`gJ%LP5M`sAe@m-^h%+=ZzxwFF(#}X4M5h^`k;H zHza6%?pHDGQa0F!eHSYAN%LEUSH1@ zAvz3HsYBU&H|Mq(-a1pwKIhaCP#hAvDYWz+q^Z}i=J$m}u>~r;j!!T+5gHumXZM2A z=*wQOLfl0@*7x&XmQGZ*{Y*5&>OAZ+bPa~JR(gNF{g1A?imBUstv)hmFI#>(icl(7 zKR-j=lhGOU8Sbp_w`qpAiE0^zm9NiL*^Z}QESSW9Fj8yS)7Ppiro8R@$-;!GQ^zaf z7T0qd$WSYyWnna7%5RUp(_2MVWen5XgvnvFMxlYA5IP)R30`9HtUSmTtoe>W4Wpkp z>Qt4SomZ-JI%(wUBC-dLdFiMyNc4vgHc7>K+{#WW)szkLLmf~LexwO_^uqcV?(w<3 zz+0=h`psl@t!;ckd)srx+g~^^o)=g|Wb0@kzQE?6elM~tF#QW!Ox_==j29;cW9ZP| zXuPjS$4uE4IsMPKRCohxZT3Uiw?c$>L8^`>U{0(YelIr<6g9-g-1Gt06~dwL&wzV= zU3Xs}|J64!z7#rgAXSQ~J``9MI;7qQ#@=TFv9s;Ty*NOiC@1(p=Qj5J@jTE+-c@;e zzg9=Fm#QS3FnUUQ1I6bgyJtNv`dqL@jE5rpV$J>zRjwE3kqMgSQrQzu=yaGa#3HVd z=8?|)?(fuNe(u$uvwcqLEgdU@@68ysD}DHL>7ysu?{Sz-h58*4FEy2XB(!u-GIa1cK>T-$qC?nH#!H!Gi3%n8MJMN~SIS;_5nGYNM zY>MiPQ2te5`{HCm7*`jzR+~O_<9E_t6vin>A=!0>^yi0Jc;0%mFRd*^xqDO?o3q_7 zzb)IZ5Tv_^Gx5;y4T1)%bQDbt;`1vC%BZLSV1E4|*4wwveMCXHj7YM!bD-~E0BFm6 zjDaqrv9GZnMboGzRyOn~ zQfeyE_vbfuOkr7t4(#J6^7B|eQRE_D#@##)=@0}YrhU5sojmrLtcf2&dUP^B9<9!N z6If6ngQp7h89xx}lt=L;jGI3_+P5g*tsh>Y@W<&#u%|im?xX0Ad~@+PW-J~QH<(X9 zw%5TjWH_*Q$vIx{>xLzW(G~Rd&|z7K@E-FPy5+|5?c*q%AP`ROVNUnpG!C*{IX1n= z;QA_OEY-==`T`YQ2&kv%gYZzQa`XB2hRkqXbNv<9k&^aYnYC zY_p|~crN3TX0#omX)&>M0@_YHoNfY`6&@C)Btg>^&J z$m@l)mJy22`p*Xz=qUQUaZeO3?77^DEwEBFGjRM|sms`hz^+ZjsIsG<=cYi8So zey+AZT`Oy#LbgrW!u3HOCE3k;Q*fd$1^@X~W*45)3&2R*d6w}a@U7dezXwkXYmJSW z*s6U5rRtBLsE4InPB#=aE1x?f-=_yhi>SWA^U-^|N^eGLHn+FEBGyZ~^#rzHlk?^l zYGTYUpT!)EWtO2rUbs`WgJPH>jQbT8#jb1n73j(EDips8^OS&_O}fs9%d3o?+1DtX zKZc0|8M8Cd){jD@&O5w2(l4Q|Wo}>53ny>kvWYi(NY0bNrc0OzDZJPC4ES)Mv)J@g zQBauqi>J38wpJA_sgLM;GvVDrJbNmy&QFIvEd06)iwN+zneP{PuOX>K%?bg|cRcv| zv0tmQ*mQ&yn$h`G5S&aH%7@423g>~4bIkv|vu}?+2(q7dwz9746+Eiclda4e-@D+4 zCaAA#s?U(14m&=@AuyN$Mq>VfnO#SoMEd(0TJgH8Rd9YYsCfA2$(C0L=Y9~KvC(FySrfM{nE0^!D&RF1f3CJM@V7>r7(Uk4^GHBK5{d}r#n^<4w1`kR= zUFRMj^1vdBvf6at7U<*X<3SC>H!b1wb1v_VdU+`sxG&EU&}KVnC-R4)vA!=SM+a5s zKylpr-YVS=mXp8ZI$nC>3sR1R_{R7ADVbk$9Nyicgh+~BmS zjxt}yfK#kqW6-G4jtCsbZgupVwA?zPTlj?gE z$4vlvhw49XH)IU-`5?d1|HFR)67)dEeV-Mb?|623d?jInPie~bN>l8Z2P$Upo~I{P zIT&rC7Vxx+BbL?Y40cujX6MJg0*^a476A>9*MN>Ie3~sBme8?+4$h0O=l3mu0+{Szwv;X~D$FlqVvlLef@ywab_W@|jBh-`>v-YPSi##|u zhwY1pChyd{{9(%|ASRfQzy8pyEV%y$?1=~Rl2Z7K%ri7iffL_P$s_h4nZ2NA_(=D9(Ep6@t)Zcz1mLpSOH z_bA~w`q+j?w;ks2`H94(pvD1KsrI_>^?F$oR8C>wt61*&e5;^kFH0!@!;=$mtTTwi z=BmkYQ_!KPjji}WKLW`QlR-~NM(KCw`{}-29JeuKhi&-0N-=|Zvd&7T$C~=*m-+^h z5H9c8@But{oLMqzLA&7dZr|e_%@*x+8R+|L>Pv;;q7V7@r9}_SvqFHQN!i&) zgjC((L^dJ%{q0-nItHX2RioQ{hJ6UtWmo7dB7Xbz>i`k&q-tyIyI^u)JRTTZ?}J$A z`}s^Ec#H7pgr8Wj_}LK?1_jC(6|^1KwJ{ar^Ze~=y3PZ|NpKYwKBG;}x`V z-z7-r6@$u@d1?gT1@E5)rKPt$PWp7k^_*Ts7qVj9OKiUf$=@!!(^X z#4sKXH8MQEyXqSkt`0tjow#4xK4*4a4LS+n!~oj|O0n-RbZnQ8LQpoI7Ge|K=$^f< zr|M9DImP--dqDF^WW;KYjd8DP7chEDy{E8QyQ zxUg952xNeB8htMIE;h0*-e21=b5*C5>UblX^o#J&&{0t;>>s}~mZE^wl~{PXrr@o5 ziREYv9d`SCu!@3fulj9!g^w5Bm%y>mOVZn=G57UFgDO_s!ckFpTnaR!FUn?WP}p_- zm(ccBf=Bfak{Ei@i?*wP(N4Lp{q0$wql+}?`q_TZ!3UbnSe5Z*V+HuQt}e#g>1_NA zQ}sPawo+7|CupTYS0C@6c!;D`>Qo&CJz9p!wKoKObyUaaZy&KgM|X>RUKt7X$$nXV z){1Qw*VBskgoIRv%01J`&+t(2d*6DrubztUEgmFi=?WF|hqb;kG7$k%f#OgpzK510 zIWcego$LixMo}C3z{|eJRs{1t`rg@ALxb@*j%_+B4lUT?H<$PG=d72k^M3 z@io$8g%GE(=lT3C(9bsqlYJo-`S=z<4v&JPEF(CN79P&Zxc(0Mj_e!Erso0%CUx)a zeK?`N)iUh&h#q%j&(-$TSgpg3pnv+sIUI$9g8tuEe<+mby6C&X;S%g~-JZpMM4$^s ze~9HaB}sV5??HS`U((OjV#3d&38oIuc^kgDg1>qwilOm2pU$V^Ph>GEW4R884*iJz z+w-81!9{YPpQHzgzrnCQmX1yb`}R+LTdgy~;;?fd$b;#RTNxt1t<1z60(ba+g(tnQ zm&&N7%Ou=8+_!Xfnm-ToyowZo_g`MNBQT=1{j!aZj;^la?!dX8v5ddBfL!rfs(Va_ z1-yZem~i#0{CMByybS1zo$h|E=n$ODz9f6N3fs9^f5UkrTZMW+CHJ_FCU^)Q^4R+8 zT{W}&h$*%z>Dsm(rdihC#STdzf2y8|s`>u(?{&y@q@oRnm_Q?`^1BMBZ|FC_?&sCe zKnhgRdePLs)S>!(M;Ye6L%8xtvbo`n+{^m!32S+7ihikQ4}ooYlV`h zPNV&~C`5xru!#&n`4j$&jHd)9F;$BnzobC6Lsuw+uLSFn!sD>!wz2E{@M(ypvdpDG z3y%Wjs*a72qUUAu6{^?gSC?7%j0eV^a5Fv7jeM@|5RMMPpC3gAI~?pqLl(p@fr)2? zcN8bv^}g2;RnOXU_W7IsaL1oyA~4E%{`6j#t~pj+s#BQvR3uYSG(;=1-K=uaf3NPq zWm+gyWqw|lIlC#)WEulH{f1?R^OOtKTjyR^ z$aNC*VRTJbb)V(g1>4P!zD*(}lwIWWsR}n|9a2>+ zc{$!a9gl52x*FlD6w{3oOi``eG06Ix+v8)=A4@>=cR6~qs$MvocEia!4PKusE!?9L zluDd!BA8RmnI2tC+WgJy^GEPdFoHw{Z)u_5gm0C8_f&z=C}I*LgP(lbY`DwYppIRyP@Q?ttF^K)ccPP#`TN-F8hSF!vEff*Q=5gebsmI*kAJ?dJN42K>hL=sT1Y!QWR)kJ-g&GQs@v1e9%W|YE)h41yws=uaGMAD-V*Wfz> zdpctq-3G50-kZwGX<)cO{fq9_TF8hB@nyUuoL8VDuSmkE_C^0-!{avFxENXdfqv(D z`tbVj$F@&zdNQ58wyJ7P6+1d|uG?4zIB`SCxYFr7bMAE<^WE>oTRS*ELSZSagVn6{ z1&oirtRIV{y=sGx_oWnj0tJ4v=WIHfO=UrSbWRgZQ^!}QD05*+2HBMUGm?JLD&o9N zdEw2zf25*$(^CBjWw9TnB6C3EO{kaDp8Ngqss2@9WI)FpU%}x1;(D27F_ixDmWpPe zHn$Oc6-Y%%PjZ(`C%oN{FFMQMk5TXM;(C3Z{U}>HrlVUvo=2%nT*l{zf!N)mXuU<% z2Q8fQ`GL3mm>%t8d!!BDf~LcNM%Ihhh5PnN8lyR?jzBjGBLz0XX(r`~6;`>=$KOzZ z=;c%Oeo`Q0V4DsP1DbRFbe#cCtT^;z@#T;|gzFS&=F8-DJFi96Y~85UzNTLs4s{Qr zrGg7exha178*34TQRy=jZq{@xFYc7CZg#^g+s+G1PgpVEU`;^yB?UR?*_vv{8Sb}d zsP}d7H?>s_!zDsd{@xDqoBPvaY>WvM>Wlfbvbs7L9wa4TrKyJam;K&Q^k`Jamt#DI z*Y*e$#}zPieRr6?FRq^=Y)QhM#tRzg%OCtcL(Ki$^ZBmdgiy{vcgF4q{AcvxXmI7h z%knwSy>HcJiNDR3r0cylm2>Pm3&~-^>UdIhX=7_u@bi3nUqMCx5zaHQn_it)k1=kh zVG!ZnKsK7h)1!JsA8xkjd-+FaD!`|1w#U+_&xHh3&IKX#`JVjwZL2~%wovwzu=eFWU5d%%TAqR*peKd+WH~Ivl!pFZ4F)mo)r}x+)t5 z@U#_$a`Jh_OWDoEK3F+CMs;L;ts%Iof;kuOch;&jK^JyH5;FxoRmSDFm6;y6AM5M? zRlS^`e~~|40lp8W_@25_c-GVP{hl;m>?TneL7x!)x~~6tQ9?#Zsh2Na?SS>j?{wxf zjd*~g7^)B$fC&g?nZUgIQO~NQwvSg(C;sY}MR$13!~^36y-ATS z9!TyUufk}wY=!(-p4F>Zf}na#^-Y4>y2M@|^|5ty*`A``euzWVWei}`dUO5yv8fzY z04zvu>au&`A)~M%a6ALA6{AYJM&vGBn;#kYzI zSC1fXh<(lV|1dwklMh6bY}#po;v4&pa{_*hD4zgw6Xy zdZsEEyZv7JqSGd=OKDsAr=+Gx^!ewlP^J-qsB0-Lr%H}r(We#?E$z$u!-QfNY5~lr z=@4|=$UxOM=uk$lS4SR{k=Yh?$bNYCDxL@^OsB=FqsG&6wrGDt@1|ArL(0cZ!3REjV?F~%sjl$Y>aiH z(ht*f_pJ&8r6H!$fw`LXX>ug^!jHi8{PSlDIGC#hy^(WZy2;2X_BAhtr0e8w4vPdP zDSG0w%&O4fm+Ki1Juf{XpZ7!tVewcC9hVb$Bb?_F6yP%+NY3*h))!c(1

    vQ$ozT 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