[KYUUBI #7772][SPARK] List Paimon persistent views through GetTables by wayne-x-wang · Pull Request #7793 · apache/kyuubi · GitHub
Skip to content

[KYUUBI #7772][SPARK] List Paimon persistent views through GetTables - #7793

Open
wayne-x-wang wants to merge 1 commit into
apache:masterfrom
wayne-x-wang:kyuubi-7772-master-repro
Open

wayne-x-wang wants to merge 1 commit into
apache:masterfrom
wayne-x-wang:kyuubi-7772-master-repro

Conversation

@wayne-x-wang

Copy link
Copy Markdown
Contributor

Why are the changes needed?

Paimon persistent views can be queried through Kyuubi, but JDBC GetTables omits them because the non-session catalog path only calls TableCatalog.listTables. A VIEW-only request also returns ordinary tables on this path.

Discover Paimon's optional SupportView interface through the catalog's class hierarchy and use its listViews/loadView methods to return persistent views as VIEW rows with their comments. Apply the existing name-pattern and namespace handling, and honor table-type filters when ignoreTableProperties=false. The adapter does not introduce a Paimon runtime dependency and preserves the original causes of connector errors.

Keep the existing ignoreTableProperties=true fast path: ignore table-type criteria, return TABLE rows with empty comments, and skip Paimon view enumeration. Persistent Paimon view listing is therefore supported when this configuration is false, which is the default.

The table-type filtering correction applies to non-session TableCatalog implementations generally; Paimon-specific view discovery only applies to catalogs exposing SupportView.

How was this patch tested?

Added PaimonMetadataSuite with a local SQLite-backed Paimon JDBC catalog. Its 13 tests cover table/view type filters, null and lowercase types, JDBC name patterns, quoted names, namespaces, comments and absent comments, the identities-only fast path, optional-interface absence, connector failures, and filtering before loading view metadata.

Added 7 JDBC tests to the default-source SparkCatalogDatabaseOperationSuite using a non-Paimon TableCatalog fixture. They check returned catalog/schema/name/type/comment, matching and unsupported types, null and empty types, metadata-loading errors, and the identities-only fast path. A catalog that throws from loadTable verifies that the fast path skips metadata loading while still ignoring type criteria and applying name patterns. The suite now has 10 tests.

The Paimon suite is wired into a dedicated step in the existing Spark 3.5 / Java 17 CI job. That step explicitly disables jdbc-shaded because shaded JDBC classes are produced during package, whereas this step uses a test reactor.

The engine's regular Scalastyle configuration explicitly includes both src/test/scala and src/test/scala-paimon. The existing Style CI therefore checks the Paimon test source even without activating the connector test profile.

With Java 17 and Scala 2.12, run the ordinary V2 tests without the Paimon profile:

./build/mvn -B -ntp test \
  -pl externals/kyuubi-spark-sql-engine -am \
  -P'spark-3.5,scala-2.12,spark-provided,flink-provided,hive-provided,!jdbc-shaded' \
  -Dtest=none \
  -DwildcardSuites=org.apache.kyuubi.engine.spark.operation.SparkCatalogDatabaseOperationSuite

Run the Paimon tests:

./build/mvn -B -ntp test \
  -pl externals/kyuubi-spark-sql-engine -am \
  -P'spark-3.5,scala-2.12,spark-provided,flink-provided,hive-provided,paimon-view-tests,!jdbc-shaded' \
  -Dtest=none \
  -DwildcardSuites=org.apache.kyuubi.engine.spark.operation.PaimonMetadataSuite

Run Scalastyle and Spotless without the Paimon test profile:

./build/mvn -B -ntp scalastyle:check spotless:check \
  -pl externals/kyuubi-spark-sql-engine -am \
  -Pspark-3.5,scala-2.12,spark-provided,flink-provided,hive-provided

Current local validation on Spark 3.5.8, Java 17, Scala 2.12:

  • Ordinary V2 catalog suite without the Paimon profile: 10 passed.
  • Paimon metadata suite with Paimon 2.0.0: 13 passed.
  • Final isolation review: both suites ran in the same test JVM, Paimon first and ordinary V2 second; all 23 tests passed.
  • Negative checks on Spark 3.5.6: bypassing table-type filtering fails the VIEW-only and unsupported-type tests; forcing metadata loading in the fast path fails its dedicated test. The production source was restored byte-for-byte before the final passing runs.
  • Spotless, Scalastyle, and actionlint checks passed. A local matrix check confirms that the new Paimon step selects the intended Spark 3.5 / Java 17 cell.
  • Scalastyle coverage was verified without the Paimon test profile: temporary println violations in both test directories produced the two expected errors. After restoring both files byte-for-byte, Scalastyle checked 109 engine files with zero errors, and Spotless passed.

Earlier validation of the same production patch on Spark 3.5.6:

  • Restoring the original catalog-listing logic caused 7 Paimon tests to fail, with 6 passing.
  • The distribution build completed successfully and compiled the Scala 2.12 and 2.13 engine artifacts. This was a fast-profile build; test execution is accounted for separately above.
  • End-to-end validation used Java 8, Spark 3.5.6, Scala 2.12, Paimon 2.0.0, and a SQLite-backed JDBC catalog. The existing JDBC regression passed all 5 cases, and the original JDBC probe returned the persistent view as VIEW with its comment using the existing Kyuubi 1.10.2 client.

Runtime validation does not establish support across other Spark/Paimon combinations or Hive/REST metastores.

Was this patch assisted by generative AI tooling?

Assisted-by: Codex (GPT-6)

…ables

Discover Paimon's optional SupportView API without a runtime dependency
and return persistent views and their comments through JDBC metadata.

Honor table-type filters for non-session catalogs and preserve the
identities-only fast path. Cover Paimon and ordinary V2 catalog metadata,
run connector regressions in Spark 3.5 CI, and include the Paimon test
directory in Scalastyle checks.
@github-actions github-actions Bot added kind:infra license, community building, project builds, asf infra related, etc. module:spark kind:build labels Oct 21, 2026
@github-actions

Copy link
Copy Markdown

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

kind:build kind:infra license, community building, project builds, asf infra related, etc. module:spark

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant