From b904f10b4cb3eeb29960e93656879329782d7791 Mon Sep 17 00:00:00 2001 From: caican Date: Tue, 18 Jun 2024 17:07:36 +0800 Subject: [PATCH] [#3885] feat(catalog-lakehouse-paimon): Add a basic code skeleton for Paimon catalog --- build.gradle.kts | 1 + .../catalog-lakehouse-paimon/build.gradle.kts | 111 +++++++++ .../lakehouse/paimon/PaimonCatalog.java | 56 +++++ .../paimon/PaimonCatalogCapability.java | 9 + .../paimon/PaimonCatalogOperations.java | 210 ++++++++++++++++++ .../lakehouse/paimon/PaimonSchema.java | 19 ++ .../catalog/lakehouse/paimon/PaimonTable.java | 24 ++ .../com.datastrato.gravitino.CatalogProvider | 5 + .../META-INF/services/core-site.xml.template | 7 + .../META-INF/services/hdfs-site.xml.template | 6 + .../src/main/resources/lakehouse-paimon.conf | 8 + gradle/libs.versions.toml | 6 + settings.gradle.kts | 2 + 13 files changed, 464 insertions(+) create mode 100644 catalogs/catalog-lakehouse-paimon/build.gradle.kts create mode 100644 catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonCatalog.java create mode 100644 catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonCatalogCapability.java create mode 100644 catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonCatalogOperations.java create mode 100644 catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonSchema.java create mode 100644 catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonTable.java create mode 100644 catalogs/catalog-lakehouse-paimon/src/main/resources/META-INF/services/com.datastrato.gravitino.CatalogProvider create mode 100644 catalogs/catalog-lakehouse-paimon/src/main/resources/META-INF/services/core-site.xml.template create mode 100644 catalogs/catalog-lakehouse-paimon/src/main/resources/META-INF/services/hdfs-site.xml.template create mode 100644 catalogs/catalog-lakehouse-paimon/src/main/resources/lakehouse-paimon.conf diff --git a/build.gradle.kts b/build.gradle.kts index dbceeb5083d..500e5aac41e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -641,6 +641,7 @@ tasks { dependsOn( ":catalogs:catalog-hive:copyLibAndConfig", ":catalogs:catalog-lakehouse-iceberg:copyLibAndConfig", + ":catalogs:catalog-lakehouse-paimon:copyLibAndConfig", ":catalogs:catalog-jdbc-doris:copyLibAndConfig", ":catalogs:catalog-jdbc-mysql:copyLibAndConfig", ":catalogs:catalog-jdbc-postgresql:copyLibAndConfig", diff --git a/catalogs/catalog-lakehouse-paimon/build.gradle.kts b/catalogs/catalog-lakehouse-paimon/build.gradle.kts new file mode 100644 index 00000000000..baca06cf4d0 --- /dev/null +++ b/catalogs/catalog-lakehouse-paimon/build.gradle.kts @@ -0,0 +1,111 @@ +/* + * Copyright 2024 Datastrato Pvt Ltd. + * This software is licensed under the Apache License version 2. + */ +description = "catalog-lakehouse-paimon" + +plugins { + `maven-publish` + id("java") + id("idea") +} + +dependencies { + implementation(project(":api")) + implementation(project(":common")) + implementation(project(":core")) + implementation(libs.bundles.paimon) + implementation(libs.guava) + implementation(libs.hadoop2.common) { + exclude("com.github.spotbugs") + } + implementation(libs.hadoop2.hdfs) + implementation(libs.hive2.exec) { + artifact { + classifier = "core" + } + exclude("com.google.code.findbugs", "jsr305") + exclude("com.google.protobuf") + exclude("org.apache.avro") + exclude("org.apache.calcite") + exclude("org.apache.calcite.avatica") + exclude("org.apache.curator") + exclude("org.apache.hadoop", "hadoop-yarn-server-resourcemanager") + exclude("org.apache.logging.log4j") + exclude("org.apache.zookeeper") + exclude("org.eclipse.jetty.aggregate", "jetty-all") + exclude("org.eclipse.jetty.orbit", "javax.servlet") + exclude("org.openjdk.jol") + exclude("org.pentaho") + exclude("org.slf4j") + } + implementation(libs.hive2.metastore) { + exclude("co.cask.tephra") + exclude("com.github.spotbugs") + exclude("com.google.code.findbugs", "jsr305") + exclude("com.tdunning", "json") + exclude("javax.transaction", "transaction-api") + exclude("org.apache.avro", "avro") + exclude("org.apache.hbase") + exclude("org.apache.hadoop", "hadoop-yarn-api") + exclude("org.apache.hadoop", "hadoop-yarn-server-applicationhistoryservice") + exclude("org.apache.hadoop", "hadoop-yarn-server-common") + exclude("org.apache.hadoop", "hadoop-yarn-server-resourcemanager") + exclude("org.apache.hadoop", "hadoop-yarn-server-web-proxy") + exclude("org.apache.logging.log4j") + exclude("org.apache.parquet", "parquet-hadoop-bundle") + exclude("org.apache.zookeeper") + exclude("org.eclipse.jetty.aggregate", "jetty-all") + exclude("org.eclipse.jetty.orbit", "javax.servlet") + exclude("org.pentaho") // missing dependency + exclude("org.slf4j", "slf4j-log4j12") + exclude("com.zaxxer", "HikariCP") + exclude("com.sun.jersey", "jersey-server") + } + + annotationProcessor(libs.lombok) + compileOnly(libs.lombok) + + testImplementation(libs.junit.jupiter.api) + testImplementation(libs.junit.jupiter.params) + testImplementation(libs.mockito.core) + testImplementation(libs.mockito.inline) + + testRuntimeOnly(libs.junit.jupiter.engine) +} + +tasks { + val runtimeJars by registering(Copy::class) { + from(configurations.runtimeClasspath) + into("build/libs") + } + + val copyCatalogLibs by registering(Copy::class) { + dependsOn("jar", "runtimeJars") + from("build/libs") + into("$rootDir/distribution/package/catalogs/lakehouse-paimon/libs") + } + + val copyCatalogConfig by registering(Copy::class) { + from("src/main/resources") + into("$rootDir/distribution/package/catalogs/lakehouse-paimon/conf") + + include("lakehouse-paimon.conf") + + rename { original -> + if (original.endsWith(".template")) { + original.replace(".template", "") + } else { + original + } + } + + exclude { details -> + details.file.isDirectory() + } + } + + register("copyLibAndConfig", Copy::class) { + dependsOn(copyCatalogLibs, copyCatalogConfig) + } +} diff --git a/catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonCatalog.java b/catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonCatalog.java new file mode 100644 index 00000000000..17059bd896c --- /dev/null +++ b/catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonCatalog.java @@ -0,0 +1,56 @@ +/* + * Copyright 2024 Datastrato Pvt Ltd. + * This software is licensed under the Apache License version 2. + */ +package com.datastrato.gravitino.catalog.lakehouse.paimon; + +import com.datastrato.gravitino.Catalog; +import com.datastrato.gravitino.connector.BaseCatalog; +import com.datastrato.gravitino.connector.CatalogOperations; +import com.datastrato.gravitino.connector.PropertiesMetadata; +import com.datastrato.gravitino.connector.capability.Capability; +import java.util.Map; + +/** Implementation of {@link Catalog} that represents a Paimon catalog in Gravitino. */ +public class PaimonCatalog extends BaseCatalog { + + /** @return The short name of the catalog. */ + @Override + public String shortName() { + return "lakehouse-paimon"; + } + + /** + * Creates a new instance of {@link PaimonCatalogOperations} with the provided configuration. + * + * @param config The configuration map for the Paimon catalog operations. + * @return A new instance of {@link PaimonCatalogOperations}. + */ + @Override + protected CatalogOperations newOps(Map config) { + return new PaimonCatalogOperations(); + } + + @Override + public Capability newCapability() { + return new PaimonCatalogCapability(); + } + + @Override + public PropertiesMetadata tablePropertiesMetadata() throws UnsupportedOperationException { + throw new UnsupportedOperationException( + "The catalog does not support table properties metadata"); + } + + @Override + public PropertiesMetadata catalogPropertiesMetadata() throws UnsupportedOperationException { + throw new UnsupportedOperationException( + "The catalog does not support catalog properties metadata"); + } + + @Override + public PropertiesMetadata schemaPropertiesMetadata() throws UnsupportedOperationException { + throw new UnsupportedOperationException( + "The catalog does not support schema properties metadata"); + } +} diff --git a/catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonCatalogCapability.java b/catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonCatalogCapability.java new file mode 100644 index 00000000000..8421f233034 --- /dev/null +++ b/catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonCatalogCapability.java @@ -0,0 +1,9 @@ +/* + * Copyright 2024 Datastrato Pvt Ltd. + * This software is licensed under the Apache License version 2. + */ +package com.datastrato.gravitino.catalog.lakehouse.paimon; + +import com.datastrato.gravitino.connector.capability.Capability; + +public class PaimonCatalogCapability implements Capability {} diff --git a/catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonCatalogOperations.java b/catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonCatalogOperations.java new file mode 100644 index 00000000000..1e18bd9003c --- /dev/null +++ b/catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonCatalogOperations.java @@ -0,0 +1,210 @@ +/* + * Copyright 2024 Datastrato Pvt Ltd. + * This software is licensed under the Apache License version 2. + */ +package com.datastrato.gravitino.catalog.lakehouse.paimon; + +import com.datastrato.gravitino.NameIdentifier; +import com.datastrato.gravitino.Namespace; +import com.datastrato.gravitino.SchemaChange; +import com.datastrato.gravitino.connector.CatalogInfo; +import com.datastrato.gravitino.connector.CatalogOperations; +import com.datastrato.gravitino.connector.HasPropertyMetadata; +import com.datastrato.gravitino.connector.SupportsSchemas; +import com.datastrato.gravitino.exceptions.NoSuchCatalogException; +import com.datastrato.gravitino.exceptions.NoSuchSchemaException; +import com.datastrato.gravitino.exceptions.NoSuchTableException; +import com.datastrato.gravitino.exceptions.NonEmptySchemaException; +import com.datastrato.gravitino.exceptions.SchemaAlreadyExistsException; +import com.datastrato.gravitino.exceptions.TableAlreadyExistsException; +import com.datastrato.gravitino.rel.Column; +import com.datastrato.gravitino.rel.TableCatalog; +import com.datastrato.gravitino.rel.TableChange; +import com.datastrato.gravitino.rel.expressions.distributions.Distribution; +import com.datastrato.gravitino.rel.expressions.sorts.SortOrder; +import com.datastrato.gravitino.rel.expressions.transforms.Transform; +import com.datastrato.gravitino.rel.indexes.Index; +import java.io.IOException; +import java.util.Map; + +/** + * Implementation of {@link CatalogOperations} that represents operations for interacting with the + * Paimon catalog in Gravitino. + */ +public class PaimonCatalogOperations implements CatalogOperations, SupportsSchemas, TableCatalog { + + /** + * Initializes the Paimon catalog operations with the provided configuration. + * + * @param conf The configuration map for the Paimon catalog operations. + * @param info The catalog info associated with this operations instance. + * @throws RuntimeException if initialization fails. + */ + @Override + public void initialize( + Map conf, CatalogInfo info, HasPropertyMetadata propertiesMetadata) + throws RuntimeException {} + + /** + * Lists the schemas under the specified namespace. + * + * @param namespace The namespace to list the schemas for. + * @return An array of {@link NameIdentifier} representing the schemas in the namespace. + * @throws NoSuchCatalogException If the provided namespace is invalid or does not exist. + */ + @Override + public NameIdentifier[] listSchemas(Namespace namespace) throws NoSuchCatalogException { + throw new UnsupportedOperationException(); + } + + /** + * Creates a new schema with the provided identifier, comment, and metadata. + * + * @param identifier The identifier of the schema to create. + * @param comment The comment for the new schema. + * @param properties The properties for the new schema. + * @return The newly created {@link PaimonSchema} instance. + * @throws NoSuchCatalogException If the provided namespace is invalid or does not exist. + * @throws SchemaAlreadyExistsException If a schema with the same name already exists. + */ + @Override + public PaimonSchema createSchema( + NameIdentifier identifier, String comment, Map properties) + throws NoSuchCatalogException, SchemaAlreadyExistsException { + throw new UnsupportedOperationException(); + } + + /** + * Loads the schema with the provided identifier. + * + * @param identifier The identifier of the schema to load. + * @return The loaded {@link PaimonSchema} representing the schema. + * @throws NoSuchSchemaException If the schema with the provided identifier does not exist. + */ + @Override + public PaimonSchema loadSchema(NameIdentifier identifier) throws NoSuchSchemaException { + throw new UnsupportedOperationException(); + } + + /** + * Alters the schema with the provided identifier according to the specified {@link SchemaChange} + * changes. + * + * @param identifier The identifier of the schema to alter. + * @param changes The changes to apply to the schema. + * @return The altered {@link PaimonSchema} instance. + * @throws NoSuchSchemaException If the schema with the provided identifier does not exist. + */ + @Override + public PaimonSchema alterSchema(NameIdentifier identifier, SchemaChange... changes) + throws NoSuchSchemaException { + throw new UnsupportedOperationException(); + } + + /** + * Drops the schema with the provided identifier. + * + * @param identifier The identifier of the schema to drop. + * @param cascade If set to true, drops all the tables in the schema as well. + * @return true if the schema is dropped successfully, false otherwise. + * @throws NonEmptySchemaException If the schema is not empty and 'cascade' is set to false. + */ + @Override + public boolean dropSchema(NameIdentifier identifier, boolean cascade) + throws NonEmptySchemaException { + throw new UnsupportedOperationException(); + } + + /** + * Lists all the tables under the specified namespace. + * + * @param namespace The namespace to list tables for. + * @return An array of {@link NameIdentifier} representing the tables in the namespace. + * @throws NoSuchSchemaException If the schema with the provided namespace does not exist. + */ + @Override + public NameIdentifier[] listTables(Namespace namespace) throws NoSuchSchemaException { + throw new UnsupportedOperationException(); + } + + /** + * Loads the table with the provided identifier. + * + * @param identifier The identifier of the table to load. + * @return The loaded {@link PaimonTable} instance representing the table. + * @throws NoSuchTableException If the table with the provided identifier does not exist. + */ + @Override + public PaimonTable loadTable(NameIdentifier identifier) throws NoSuchTableException { + throw new UnsupportedOperationException(); + } + + /** + * Creates a new table with the provided identifier, comment, and metadata. + * + * @param identifier The identifier of the table to create. + * @param columns The array of columns for the new table. + * @param comment The comment for the new table. + * @param properties The properties for the new table. + * @param partitioning The partitioning for the new table. + * @param indexes The indexes for the new table. + * @return The newly created {@link PaimonTable} instance. + * @throws NoSuchSchemaException If the schema with the provided namespace does not exist. + * @throws TableAlreadyExistsException If the table with the same identifier already exists. + */ + @Override + public PaimonTable createTable( + NameIdentifier identifier, + Column[] columns, + String comment, + Map properties, + Transform[] partitioning, + Distribution distribution, + SortOrder[] sortOrders, + Index[] indexes) + throws NoSuchSchemaException, TableAlreadyExistsException { + throw new UnsupportedOperationException(); + } + + /** + * Alters the table with the provided identifier according to the specified {@link TableChange} + * changes. + * + * @param identifier The identifier of the table to alter. + * @param changes The changes to apply to the table. + * @return The altered {@link PaimonTable} instance. + * @throws NoSuchTableException If the table with the provided identifier does not exist. + * @throws IllegalArgumentException This exception will not be thrown in this method. + */ + @Override + public PaimonTable alterTable(NameIdentifier identifier, TableChange... changes) + throws NoSuchTableException, IllegalArgumentException { + throw new UnsupportedOperationException(); + } + + /** + * Drops the table with the provided identifier. + * + * @param identifier The identifier of the table to drop. + * @return true if the table is successfully dropped, false if the table does not exist. + */ + @Override + public boolean dropTable(NameIdentifier identifier) { + throw new UnsupportedOperationException(); + } + + /** + * Purges the table with the provided identifier. + * + * @param identifier The identifier of the table to purge. + * @return true if the table is successfully purged, false if the table does not exist. + * @throws UnsupportedOperationException If the table type is EXTERNAL_TABLE, it cannot be purged. + */ + @Override + public boolean purgeTable(NameIdentifier identifier) throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public void close() throws IOException {} +} diff --git a/catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonSchema.java b/catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonSchema.java new file mode 100644 index 00000000000..ec5801e84ff --- /dev/null +++ b/catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonSchema.java @@ -0,0 +1,19 @@ +/* + * Copyright 2023 Datastrato Pvt Ltd. + * This software is licensed under the Apache License version 2. + */ +package com.datastrato.gravitino.catalog.lakehouse.paimon; + +import com.datastrato.gravitino.Schema; +import com.datastrato.gravitino.connector.BaseSchema; +import lombok.ToString; + +/** + * Implementation of {@link Schema} that represents a Paimon Schema (Database) entity in the Paimon + * schema. + */ +@ToString +public class PaimonSchema extends BaseSchema { + + private PaimonSchema() {} +} diff --git a/catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonTable.java b/catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonTable.java new file mode 100644 index 00000000000..12a132aa8bb --- /dev/null +++ b/catalogs/catalog-lakehouse-paimon/src/main/java/com/datastrato/gravitino/catalog/lakehouse/paimon/PaimonTable.java @@ -0,0 +1,24 @@ +/* + * Copyright 2023 Datastrato Pvt Ltd. + * This software is licensed under the Apache License version 2. + */ +package com.datastrato.gravitino.catalog.lakehouse.paimon; + +import com.datastrato.gravitino.connector.BaseTable; +import com.datastrato.gravitino.connector.TableOperations; +import lombok.Getter; +import lombok.ToString; +import org.apache.paimon.table.Table; + +/** Implementation of {@link Table} that represents a Paimon Table entity in the Paimon table. */ +@ToString +@Getter +public class PaimonTable extends BaseTable { + + private PaimonTable() {} + + @Override + protected TableOperations newOps() throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } +} diff --git a/catalogs/catalog-lakehouse-paimon/src/main/resources/META-INF/services/com.datastrato.gravitino.CatalogProvider b/catalogs/catalog-lakehouse-paimon/src/main/resources/META-INF/services/com.datastrato.gravitino.CatalogProvider new file mode 100644 index 00000000000..ef103c4a9d7 --- /dev/null +++ b/catalogs/catalog-lakehouse-paimon/src/main/resources/META-INF/services/com.datastrato.gravitino.CatalogProvider @@ -0,0 +1,5 @@ +# +# Copyright 2024 Datastrato Pvt Ltd. +# This software is licensed under the Apache License version 2. +# +com.datastrato.gravitino.catalog.lakehouse.paimon.PaimonCatalog diff --git a/catalogs/catalog-lakehouse-paimon/src/main/resources/META-INF/services/core-site.xml.template b/catalogs/catalog-lakehouse-paimon/src/main/resources/META-INF/services/core-site.xml.template new file mode 100644 index 00000000000..edcb0bc3f1d --- /dev/null +++ b/catalogs/catalog-lakehouse-paimon/src/main/resources/META-INF/services/core-site.xml.template @@ -0,0 +1,7 @@ +# +# Copyright 2024 Datastrato Pvt Ltd. +# This software is licensed under the Apache License version 2. +# + + + diff --git a/catalogs/catalog-lakehouse-paimon/src/main/resources/META-INF/services/hdfs-site.xml.template b/catalogs/catalog-lakehouse-paimon/src/main/resources/META-INF/services/hdfs-site.xml.template new file mode 100644 index 00000000000..0e3082968e1 --- /dev/null +++ b/catalogs/catalog-lakehouse-paimon/src/main/resources/META-INF/services/hdfs-site.xml.template @@ -0,0 +1,6 @@ +# +# Copyright 2024 Datastrato Pvt Ltd. +# This software is licensed under the Apache License version 2. +# + + \ No newline at end of file diff --git a/catalogs/catalog-lakehouse-paimon/src/main/resources/lakehouse-paimon.conf b/catalogs/catalog-lakehouse-paimon/src/main/resources/lakehouse-paimon.conf new file mode 100644 index 00000000000..231d5b1d72a --- /dev/null +++ b/catalogs/catalog-lakehouse-paimon/src/main/resources/lakehouse-paimon.conf @@ -0,0 +1,8 @@ +# +# Copyright 2024 Datastrato Pvt Ltd. +# This software is licensed under the Apache License version 2. +# + +## This file holds common configurations for lakehouse-paimon catalog. The format of the key is +## 'gravitino.bypass.{paimon-inner-config-key}' and `paimon-inner-config-key` is the +## actual key that pass to lakehouse-paimon catalog. diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 18844962274..602e5ff808d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -30,6 +30,7 @@ caffeine = "2.9.3" rocksdbjni = "7.10.2" iceberg = '1.3.1' # used for Gravitino Iceberg catalog and Iceberg REST service iceberg4spark = "1.4.1" # used for compile spark connector +paimon = '0.8.0' spark33 = "3.3.4" spark34 = "3.4.3" spark35 = "3.5.1" @@ -108,6 +109,7 @@ jersey-test-framework-core = { group = "org.glassfish.jersey.test-framework", na jersey-test-framework-provider-jetty = { group = "org.glassfish.jersey.test-framework.providers", name = "jersey-test-framework-provider-jetty", version.ref = "jersey" } jodd-core = { group = "org.jodd", name = "jodd-core", version.ref = "jodd" } mockito-core = { group = "org.mockito", name = "mockito-core", version.ref = "mockito" } +mockito-inline = { group = "org.mockito", name = "mockito-inline", version.ref = "mockito" } hive2-metastore = { group = "org.apache.hive", name = "hive-metastore", version.ref = "hive2"} hive2-exec = { group = "org.apache.hive", name = "hive-exec", version.ref = "hive2"} hive2-common = { group = "org.apache.hive", name = "hive-common", version.ref = "hive2"} @@ -133,6 +135,9 @@ commons-collections4 = { group = "org.apache.commons", name = "commons-collectio iceberg-core = { group = "org.apache.iceberg", name = "iceberg-core", version.ref = "iceberg" } iceberg-api = { group = "org.apache.iceberg", name = "iceberg-api", version.ref = "iceberg" } iceberg-hive-metastore = { group = "org.apache.iceberg", name = "iceberg-hive-metastore", version.ref = "iceberg" } +paimon-core = { group = "org.apache.paimon", name = "paimon-core", version.ref = "paimon" } +paimon-format = { group = "org.apache.paimon", name = "paimon-format", version.ref = "paimon" } +paimon-hive-catalog = { group = "org.apache.paimon", name = "paimon-hive-catalog", version.ref = "paimon" } trino-spi= { group = "io.trino", name = "trino-spi", version.ref = "trino" } trino-toolkit= { group = "io.trino", name = "trino-plugin-toolkit", version.ref = "trino" } trino-testing= { group = "io.trino", name = "trino-testing", version.ref = "trino" } @@ -184,6 +189,7 @@ log4j = ["slf4j-api", "log4j-slf4j2-impl", "log4j-api", "log4j-core", "log4j-12- jetty = ["jetty-server", "jetty-servlet", "jetty-webapp", "jetty-servlets"] jersey = ["jersey-server", "jersey-container-servlet-core", "jersey-container-jetty-http", "jersey-media-json-jackson", "jersey-hk2"] iceberg = ["iceberg-core", "iceberg-api"] +paimon = ["paimon-core", "paimon-format", "paimon-hive-catalog"] jwt = ["jwt-api", "jwt-impl", "jwt-gson"] metrics = ["metrics-core", "metrics-jersey2", "metrics-jvm", "metrics-jmx", "metrics-servlets"] prometheus = ["prometheus-servlet", "prometheus-dropwizard", "prometheus-client"] diff --git a/settings.gradle.kts b/settings.gradle.kts index 7dc36f9a3b2..611b640751d 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -15,6 +15,7 @@ include("api", "common", "core", "meta", "server", "integration-test", "server-c include("catalogs:bundled-catalog") include("catalogs:catalog-hive") include("catalogs:catalog-lakehouse-iceberg") +include("catalogs:catalog-lakehouse-paimon") include( "catalogs:catalog-jdbc-common", "catalogs:catalog-jdbc-doris", @@ -47,3 +48,4 @@ include("flink-connector") include("web") include("docs") include("integration-test-common") +include("catalog-lakehouse-paimon")