Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/publish-snapshot-spark4.yml
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ jobs:
echo "<password>$ASF_PASSWORD</password>" >> $tmp_settings
echo "</server></servers></settings>" >> $tmp_settings

mvn --settings $tmp_settings -ntp clean install -Dgpg.skip -Drat.skip -DskipTests -Papache-release,spark4,flink1 -pl org.apache.paimon:paimon-spark-4.0_2.13,org.apache.paimon:paimon-spark-4.1_2.13 -am
mvn --settings $tmp_settings -ntp clean install -Dgpg.skip -Drat.skip -DskipTests -Papache-release,spark4,flink1 -pl org.apache.paimon:paimon-spark-4.0_2.13,org.apache.paimon:paimon-spark-4.1_2.13,org.apache.paimon:paimon-spark-4.2_2.13 -am
# skip deploy paimon-spark-common_2.13 since they are already deployed in publish-snapshot.yml
mvn --settings $tmp_settings -ntp clean deploy -Dgpg.skip -Drat.skip -DskipTests -Papache-release,spark4,flink1 -pl org.apache.paimon:paimon-spark4-common_2.13,org.apache.paimon:paimon-spark-ut_2.13,org.apache.paimon:paimon-spark-ut-4.0_2.13,org.apache.paimon:paimon-spark-4.0_2.13,org.apache.paimon:paimon-spark-4.1_2.13
mvn --settings $tmp_settings -ntp clean deploy -Dgpg.skip -Drat.skip -DskipTests -Papache-release,spark4,flink1 -pl org.apache.paimon:paimon-spark4-common_2.13,org.apache.paimon:paimon-spark-ut_2.13,org.apache.paimon:paimon-spark-ut-4.0_2.13,org.apache.paimon:paimon-spark-ut-4.1_2.13,org.apache.paimon:paimon-spark-4.0_2.13,org.apache.paimon:paimon-spark-4.1_2.13,org.apache.paimon:paimon-spark-4.2_2.13

rm $tmp_settings
8 changes: 4 additions & 4 deletions .github/workflows/release-java.yml
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ jobs:
mvn -ntp -B "${enforcer_goal}" \
-Denforcer.rules="${enforcer_rules}" \
-Papache-release,docs-and-source,spark4 \
-pl org.apache.paimon:paimon-spark-common_2.13,org.apache.paimon:paimon-spark4-common_2.13,org.apache.paimon:paimon-spark-4.0_2.13,org.apache.paimon:paimon-spark-4.1_2.13 \
-pl org.apache.paimon:paimon-spark-common_2.13,org.apache.paimon:paimon-spark4-common_2.13,org.apache.paimon:paimon-spark-4.0_2.13,org.apache.paimon:paimon-spark-4.1_2.13,org.apache.paimon:paimon-spark-4.2_2.13 \
-am
;;
*)
Expand Down Expand Up @@ -186,22 +186,22 @@ jobs:
jdk17)
capture_expected_projects \
-Papache-release,docs-and-source,spark4 \
-pl org.apache.paimon:paimon-spark-common_2.13,org.apache.paimon:paimon-spark4-common_2.13,org.apache.paimon:paimon-spark-4.0_2.13,org.apache.paimon:paimon-spark-4.1_2.13
-pl org.apache.paimon:paimon-spark-common_2.13,org.apache.paimon:paimon-spark4-common_2.13,org.apache.paimon:paimon-spark-4.0_2.13,org.apache.paimon:paimon-spark-4.1_2.13,org.apache.paimon:paimon-spark-4.2_2.13
# This install only supplies reactor dependencies for the deploy
# below. Their Javadocs are built by the owning release lane.
mvn clean install -ntp -B \
-Pdocs-and-source,spark4 \
-DskipTests -Dmaven.javadoc.skip=true \
-Dstyle.color=never \
-pl paimon-spark/paimon-spark-4.0,paimon-spark/paimon-spark-4.1 \
-pl paimon-spark/paimon-spark-4.0,paimon-spark/paimon-spark-4.1,paimon-spark/paimon-spark-4.2 \
-am \
2>&1 | tee "${log}"
mvn deploy -ntp -B \
-Papache-release,docs-and-source,spark4 \
-DskipTests -Dgpg.skip=true -Dstyle.color=never \
-DdeployAtEnd=true \
-DaltDeploymentRepository="${alt_repository}" \
-pl org.apache.paimon:paimon-spark-common_2.13,org.apache.paimon:paimon-spark4-common_2.13,org.apache.paimon:paimon-spark-4.0_2.13,org.apache.paimon:paimon-spark-4.1_2.13 \
-pl org.apache.paimon:paimon-spark-common_2.13,org.apache.paimon:paimon-spark4-common_2.13,org.apache.paimon:paimon-spark-4.0_2.13,org.apache.paimon:paimon-spark-4.1_2.13,org.apache.paimon:paimon-spark-4.2_2.13 \
2>&1 | tee -a "${log}"
;;
*)
Expand Down
2 changes: 1 addition & 1 deletion docs/docs/ecosystem/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ release cycle, embedded Paimon version, and feature limits.
| Integration | Version selection | Access to Paimon tables |
| --- | --- | --- |
| [Flink](../flink/installation) | 1.16–1.20 and 2.0–2.2 | Batch and streaming reads/writes; [DDL](../flink/sql-ddl) and [row changes](../flink/sql-write) have version-specific requirements. |
| [Spark](../spark/quick-start) | 3.2–3.5, 4.0, and 4.1; match the Scala binary version | Batch reads/writes, [DDL](../spark/sql-ddl), and [row changes](../spark/sql-write); [streaming](../spark/structured-streaming) requires Spark 3.3+. |
| [Spark](../spark/quick-start) | 3.2–3.5, 4.0, 4.1, and 4.2; match the Scala binary version | Batch reads/writes, [DDL](../spark/sql-ddl), and [row changes](../spark/sql-write); [streaming](../spark/structured-streaming) requires Spark 3.3+. |
| [Hive](./hive#version) | 2.1, 2.2, 2.3, 3.1, and 2.1-cdh-6.3 | Batch reads, table creation, and `INSERT INTO`; writes require MapReduce. |
| [Trino](./trino#version) | Match the independently released Paimon connector to Trino | Batch reads; supported connectors also provide DDL, inserts, and time travel. See the guide's table-layout limits. |
| [Presto](https://github.com/apache/paimon-presto) | Follow the separate connector's version requirements | See the connector repository for installation and supported operations. |
Expand Down
2 changes: 1 addition & 1 deletion docs/docs/iceberg/data-types.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ compatibility publishes only millisecond time values.
**Note on Geospatial Types:**
- `GEOMETRY` and `GEOGRAPHY` values use OGC Well-Known Binary (WKB). The default CRS is `OGC:CRS84`, and the default geography edge algorithm is `spherical`.
- Geospatial columns require Parquet for data, per-level, and changelog files. When Iceberg metadata is enabled, set `metadata.iceberg.format-version` to `3`.
- Spark SQL supports geospatial columns in Spark 4.1 when `spark.sql.geospatial.enabled=true`, for CRSs recognized by Spark, with the `spherical` geography edge algorithm. Spark 3.x, Spark 4.0, and Flink SQL reject these columns instead of exposing them as binary and losing the CRS or edge algorithm.
- Spark SQL supports geospatial columns in Spark 4.1 and later, for CRSs recognized by Spark, with the `spherical` geography edge algorithm. Spark 4.1 keeps them behind `spark.sql.geospatial.enabled=true` outside its own test environment; Spark 4.2 enables them by default. Spark 3.x, Spark 4.0, and Flink SQL reject these columns instead of exposing them as binary and losing the CRS or edge algorithm.
- When Iceberg metadata is enabled, a `GEOGRAPHY` CRS cannot contain a comma, including in nested columns, because Iceberg's geospatial type grammar uses commas to separate parameters.
- Iceberg REST catalog publication does not yet support geospatial columns. Use `table-location`, `hadoop-catalog`, or `hive-catalog` metadata storage instead.

Expand Down
2 changes: 2 additions & 0 deletions docs/docs/project/download.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,7 @@ signed Apache release.
| Flink 1.17 | [paimon-flink-1.17-@@VERSION@@.jar](https://repository.apache.org/snapshots/org/apache/paimon/paimon-flink-1.17/@@VERSION@@/) |
| Flink 1.16 | [paimon-flink-1.16-@@VERSION@@.jar](https://repository.apache.org/snapshots/org/apache/paimon/paimon-flink-1.16/@@VERSION@@/) |
| Flink Action | [paimon-flink-action-@@VERSION@@.jar](https://repository.apache.org/snapshots/org/apache/paimon/paimon-flink-action/@@VERSION@@/) |
| Spark 4.2 | [paimon-spark-4.2_2.13-@@VERSION@@.jar](https://repository.apache.org/snapshots/org/apache/paimon/paimon-spark-4.2_2.13/@@VERSION@@/) |
| Spark 4.1 | [paimon-spark-4.1_2.13-@@VERSION@@.jar](https://repository.apache.org/snapshots/org/apache/paimon/paimon-spark-4.1_2.13/@@VERSION@@/) |
| Spark 4.0 | [paimon-spark-4.0_2.13-@@VERSION@@.jar](https://repository.apache.org/snapshots/org/apache/paimon/paimon-spark-4.0_2.13/@@VERSION@@/) |
| Spark 3.5 | [paimon-spark-3.5_2.12-@@VERSION@@.jar](https://repository.apache.org/snapshots/org/apache/paimon/paimon-spark-3.5_2.12/@@VERSION@@/) |
Expand Down Expand Up @@ -103,6 +104,7 @@ signed Apache release.
| Flink 1.17 | [paimon-flink-1.17-@@VERSION@@.jar](https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-flink-1.17/@@VERSION@@/paimon-flink-1.17-@@VERSION@@.jar) |
| Flink 1.16 | [paimon-flink-1.16-@@VERSION@@.jar](https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-flink-1.16/@@VERSION@@/paimon-flink-1.16-@@VERSION@@.jar) |
| Flink Action | [paimon-flink-action-@@VERSION@@.jar](https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-flink-action/@@VERSION@@/paimon-flink-action-@@VERSION@@.jar) |
| Spark 4.2 | [paimon-spark-4.2_2.13-@@VERSION@@.jar](https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-spark-4.2_2.13/@@VERSION@@/paimon-spark-4.2_2.13-@@VERSION@@.jar) |
| Spark 4.1 | [paimon-spark-4.1_2.13-@@VERSION@@.jar](https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-spark-4.1_2.13/@@VERSION@@/paimon-spark-4.1_2.13-@@VERSION@@.jar) |
| Spark 4.0 | [paimon-spark-4.0_2.13-@@VERSION@@.jar](https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-spark-4.0_2.13/@@VERSION@@/paimon-spark-4.0_2.13-@@VERSION@@.jar) |
| Spark 3.5 | [paimon-spark-3.5_2.12-@@VERSION@@.jar](https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-spark-3.5_2.12/@@VERSION@@/paimon-spark-3.5_2.12-@@VERSION@@.jar) |
Expand Down
2 changes: 1 addition & 1 deletion docs/docs/project/verifying-a-release-candidate.md
Original file line number Diff line number Diff line change
Expand Up @@ -264,7 +264,7 @@ the packaging-equivalent build without reproducing the full JDK 17 test lane:
(
cd "paimon-${PAIMON_VERSION}"
mvn -ntp clean install -DskipTests -Pdocs-and-source,spark4 \
-pl paimon-spark/paimon-spark-4.0,paimon-spark/paimon-spark-4.1 \
-pl paimon-spark/paimon-spark-4.0,paimon-spark/paimon-spark-4.1,paimon-spark/paimon-spark-4.2 \
-am
)
```
Expand Down
6 changes: 3 additions & 3 deletions docs/docs/spark/data-types.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,8 @@ types Spark can read as `BinaryType`; it does not imply a unique mapping in both
| `TimestampNTZType (Spark 3.4+)` | `TimestampType` | true |
| `DecimalType(precision, scale)` | `DecimalType(precision, scale)` | true |
| `BinaryType` | `VarBinaryType`, `BinaryType` | true |
| `GeometryType (Spark 4.1)` | `GeometryType` | true |
| `GeographyType (Spark 4.1)` | `GeographyType` | true |
| `GeometryType (Spark 4.1+)` | `GeometryType` | true |
| `GeographyType (Spark 4.1+)` | `GeographyType` | true |
| `VariantType (Spark 4.0+)` | `VariantType` | true |

## Timestamps
Expand All @@ -66,4 +66,4 @@ Spark 3.4 and later distinguish the two timestamp types.

## Geospatial Types

Native `GeometryType` and `GeographyType` conversion is supported only in Spark 4.1 and only for CRSs recognized by Spark. Enable it explicitly in production with `--conf spark.sql.geospatial.enabled=true`; Spark enables it automatically only in its test environment. Spark 4.1 supports only the `spherical` geography edge algorithm, so Paimon geography types using `vincenty`, `thomas`, `andoyer`, or `karney` cannot be converted. Spark 3.x and Spark 4.0 reject Paimon geospatial columns instead of exposing them as `BinaryType`, which would lose the CRS or edge algorithm. Paimon does not support Spark geospatial types with mixed SRIDs.
Native `GeometryType` and `GeographyType` conversion is supported only in Spark 4.1 and later, and only for CRSs recognized by Spark. Spark 4.1 keeps the types behind `--conf spark.sql.geospatial.enabled=true` outside its own test environment; Spark 4.2 enables them by default. Spark 4.1 and 4.2 define `spherical` as their only geography edge algorithm, so Paimon geography types using `vincenty`, `thomas`, `andoyer`, or `karney` cannot be converted. Spark 3.x and Spark 4.0 reject Paimon geospatial columns instead of exposing them as `BinaryType`, which would lose the CRS or edge algorithm. Paimon does not support Spark geospatial types with mixed SRIDs.
7 changes: 6 additions & 1 deletion docs/docs/spark/installation.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ Match the connector to the Spark minor version and Scala binary version of your
The Java versions below describe how the connector artifacts are built; your Spark distribution
may require a newer Java runtime. Check its runtime requirements before starting Spark.

- Spark 4.x (including 4.1, 4.0) : Pre-built with Java 17 and Scala 2.13
- Spark 4.x (including 4.2, 4.1, 4.0) : Pre-built with Java 17 and Scala 2.13

- Spark 3.x (including 3.5, 3.4, 3.3, 3.2) : Pre-built with Java 8 and Scala 2.12/2.13

Expand All @@ -42,6 +42,7 @@ Choose the JAR matching your Spark and Scala versions:

| Version | Jar (Scala 2.12) | Jar (Scala 2.13) |
|-----------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Spark 4.2 | - | [JAR](https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-spark-4.2_2.13/@@VERSION@@/paimon-spark-4.2_2.13-@@VERSION@@.jar) |
| Spark 4.1 | - | [JAR](https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-spark-4.1_2.13/@@VERSION@@/paimon-spark-4.1_2.13-@@VERSION@@.jar) |
| Spark 4.0 | - | [JAR](https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-spark-4.0_2.13/@@VERSION@@/paimon-spark-4.0_2.13-@@VERSION@@.jar) |
| Spark 3.5 | [JAR](https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-spark-3.5_2.12/@@VERSION@@/paimon-spark-3.5_2.12-@@VERSION@@.jar) | [JAR](https://repo.maven.apache.org/maven2/org/apache/paimon/paimon-spark-3.5_2.13/@@VERSION@@/paimon-spark-3.5_2.13-@@VERSION@@.jar) |
Expand All @@ -55,6 +56,7 @@ Choose the JAR matching your Spark and Scala versions:

| Version | Jar (Scala 2.12) | Jar (Scala 2.13) |
|-----------|-----------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|
| Spark 4.2 | - | [JAR](https://repository.apache.org/snapshots/org/apache/paimon/paimon-spark-4.2_2.13/@@VERSION@@/) |
| Spark 4.1 | - | [JAR](https://repository.apache.org/snapshots/org/apache/paimon/paimon-spark-4.1_2.13/@@VERSION@@/) |
| Spark 4.0 | - | [JAR](https://repository.apache.org/snapshots/org/apache/paimon/paimon-spark-4.0_2.13/@@VERSION@@/) |
| Spark 3.5 | [JAR](https://repository.apache.org/snapshots/org/apache/paimon/paimon-spark-3.5_2.12/@@VERSION@@/) | [JAR](https://repository.apache.org/snapshots/org/apache/paimon/paimon-spark-3.5_2.13/@@VERSION@@/) |
Expand Down Expand Up @@ -82,6 +84,9 @@ mvn clean package -DskipTests -pl paimon-spark/paimon-spark-4.0 -am -Pspark4

# build paimon spark 4.1
mvn clean package -DskipTests -pl paimon-spark/paimon-spark-4.1 -am -Pspark4

# build paimon spark 4.2
mvn clean package -DskipTests -pl paimon-spark/paimon-spark-4.2 -am -Pspark4
```

For Spark 3.5, you can find the bundled jar in `./paimon-spark/paimon-spark-3.5/target/paimon-spark-3.5_2.12-@@VERSION@@.jar`.
Expand Down
20 changes: 11 additions & 9 deletions paimon-spark/paimon-spark-4.0/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,12 @@ under the License.

<properties>
<spark.version>4.0.3</spark.version>
<!-- Spark 4.x uses SLF4J 2.x (`org.slf4j.spi.LoggingEventBuilder` is 2.x-only). Override
the Paimon parent pom's default `slf4j.version=1.7.32` so the classpath is uniformly
2.x; otherwise `log4j-slf4j2-impl` + `slf4j-api:1.7.32` mix produces
`NoClassDefFoundError: org/slf4j/spi/LoggingEventBuilder` at test startup. -->
<!-- This module resolves `log4j-slf4j2-impl` onto the test classpath, and that binding
needs SLF4J 2.x (`org.slf4j.spi.LoggingEventBuilder` is 2.x-only). Override the Paimon
parent pom's default `slf4j.version=1.7.32` so the classpath is uniformly 2.x;
otherwise the mix produces `NoClassDefFoundError:
org/slf4j/spi/LoggingEventBuilder` at test startup. `paimon-spark-4.2` resolves no
`log4j-slf4j2-impl` and needs no override. -->
<slf4j.version>2.0.16</slf4j.version>
<!-- Spark 4 only supports Scala 2.13. Pin it locally so this _2.13 module resolves its
dependencies to _2.13 even when the spark4 profile is inactive (see issue #6682);
Expand Down Expand Up @@ -64,7 +66,7 @@ under the License.

<!--
`paimon-spark4-common` transitively pulls in `spark-sql-api` at the version set by
`paimon-spark-common.spark.version` (4.1.2 under the `spark4` profile). Spark 4.1's
`paimon-spark-common.spark.version` (4.2.0 under the `spark4` profile). Spark 4.1's
`SqlApiConf` added abstract `manageParserCaches()`, which Spark 4.0's concrete
anonymous subclasses (e.g. `WithTestConf$$anon$4`) don't implement. Mixing those
jars produces `AbstractMethodError` at parser configuration time. Pin
Expand Down Expand Up @@ -124,10 +126,10 @@ under the License.

<!-- test -->

<!-- The 4.0-compiled build of `paimon-spark-ut`'s test sources. The baseline build cannot be
used here: it is compiled against the `spark4` profile baseline, so its classfiles can
reference Spark symbols that a 4.0 runtime does not have. See
`paimon-spark-ut-4.0/pom.xml`. -->
<!-- The 4.0-compiled build of `paimon-spark-ut`'s test sources. The baseline build cannot
be used here: Spark 4.2 turned `QueryTest` into a trait (SPARK-55910), so a
4.2-compiled `PaimonSparkTestBase` carries it as an interface and fails to load on a
4.0/4.1 runtime. See `paimon-spark-ut-4.0/pom.xml`. -->
<dependency>
<groupId>org.apache.paimon</groupId>
<artifactId>paimon-spark-ut-4.0_${scala.binary.version}</artifactId>
Expand Down
Loading
Loading