You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@paimon.apache.org by ni...@apache.org on 2023/03/24 13:29:00 UTC
[incubator-paimon] branch master updated: [core] Public API and add partitionKeys,primaryKeys,options to table (#711)
This is an automated email from the ASF dual-hosted git repository.
nicholasjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-paimon.git
The following commit(s) were added to refs/heads/master by this push:
new 6afecb90f [core] Public API and add partitionKeys,primaryKeys,options to table (#711)
6afecb90f is described below
commit 6afecb90fa77eaf5c37139487432a1e02cab579d
Author: Jingsong Lee <ji...@gmail.com>
AuthorDate: Fri Mar 24 21:28:54 2023 +0800
[core] Public API and add partitionKeys,primaryKeys,options to table (#711)
---
.../java/org/apache/paimon/annotation/Public.java | 19 ++++++++-------
.../org/apache/paimon/catalog/CatalogContext.java | 4 ++--
.../java/org/apache/paimon/data/BinaryArray.java | 4 ++--
.../java/org/apache/paimon/data/BinaryMap.java | 4 ++--
.../java/org/apache/paimon/data/BinaryRow.java | 4 ++--
.../java/org/apache/paimon/data/BinaryString.java | 4 ++--
.../java/org/apache/paimon/data/DataGetters.java | 4 ++--
.../main/java/org/apache/paimon/data/Decimal.java | 4 ++--
.../java/org/apache/paimon/data/GenericArray.java | 4 ++--
.../java/org/apache/paimon/data/GenericMap.java | 4 ++--
.../java/org/apache/paimon/data/GenericRow.java | 4 ++--
.../java/org/apache/paimon/data/InternalArray.java | 4 ++--
.../java/org/apache/paimon/data/InternalMap.java | 4 ++--
.../java/org/apache/paimon/data/InternalRow.java | 4 ++--
.../java/org/apache/paimon/data/JoinedRow.java | 4 ++--
.../java/org/apache/paimon/data/Timestamp.java | 4 ++--
.../src/main/java/org/apache/paimon/fs/FileIO.java | 4 ++--
.../java/org/apache/paimon/fs/FileIOLoader.java | 4 ++--
.../main/java/org/apache/paimon/fs/FileStatus.java | 4 ++--
.../src/main/java/org/apache/paimon/fs/Path.java | 4 ++--
.../org/apache/paimon/fs/PositionOutputStream.java | 4 ++--
.../org/apache/paimon/fs/SeekableInputStream.java | 4 ++--
.../paimon/fs/UnsupportedSchemeException.java | 4 ++--
.../org/apache/paimon/memory/MemorySegment.java | 4 ++--
.../apache/paimon/memory/MemorySegmentSource.java | 4 ++--
.../org/apache/paimon/options/ConfigOption.java | 4 ++--
.../org/apache/paimon/options/ConfigOptions.java | 4 ++--
.../java/org/apache/paimon/options/MemorySize.java | 4 ++--
.../java/org/apache/paimon/options/Options.java | 4 ++--
.../paimon/options/description/Description.java | 4 ++--
.../org/apache/paimon/predicate/Predicate.java | 4 ++--
.../apache/paimon/predicate/PredicateBuilder.java | 4 ++--
.../org/apache/paimon/reader/RecordReader.java | 4 ++--
.../java/org/apache/paimon/types/ArrayType.java | 4 ++--
.../java/org/apache/paimon/types/BigIntType.java | 4 ++--
.../java/org/apache/paimon/types/BinaryType.java | 4 ++--
.../java/org/apache/paimon/types/BooleanType.java | 4 ++--
.../java/org/apache/paimon/types/CharType.java | 4 ++--
.../java/org/apache/paimon/types/DataField.java | 4 ++--
.../java/org/apache/paimon/types/DataType.java | 4 ++--
.../paimon/types/DataTypeDefaultVisitor.java | 4 ++--
.../org/apache/paimon/types/DataTypeFamily.java | 4 ++--
.../java/org/apache/paimon/types/DataTypeRoot.java | 4 ++--
.../org/apache/paimon/types/DataTypeVisitor.java | 4 ++--
.../java/org/apache/paimon/types/DataTypes.java | 4 ++--
.../java/org/apache/paimon/types/DateType.java | 4 ++--
.../java/org/apache/paimon/types/DecimalType.java | 4 ++--
.../java/org/apache/paimon/types/DoubleType.java | 4 ++--
.../java/org/apache/paimon/types/FloatType.java | 4 ++--
.../main/java/org/apache/paimon/types/IntType.java | 4 ++--
.../paimon/types/LocalZonedTimestampType.java | 4 ++--
.../main/java/org/apache/paimon/types/MapType.java | 4 ++--
.../java/org/apache/paimon/types/MultisetType.java | 4 ++--
.../main/java/org/apache/paimon/types/RowKind.java | 4 ++--
.../main/java/org/apache/paimon/types/RowType.java | 4 ++--
.../java/org/apache/paimon/types/SmallIntType.java | 4 ++--
.../java/org/apache/paimon/types/TimeType.java | 4 ++--
.../org/apache/paimon/types/TimestampType.java | 4 ++--
.../java/org/apache/paimon/types/TinyIntType.java | 4 ++--
.../org/apache/paimon/types/VarBinaryType.java | 4 ++--
.../java/org/apache/paimon/types/VarCharType.java | 4 ++--
.../org/apache/paimon/utils/CloseableIterator.java | 4 ++--
.../java/org/apache/paimon/catalog/Catalog.java | 4 ++--
.../org/apache/paimon/catalog/CatalogFactory.java | 4 ++--
.../org/apache/paimon/catalog/CatalogLock.java | 4 ++--
.../java/org/apache/paimon/catalog/Identifier.java | 4 ++--
.../org/apache/paimon/disk/BufferFileReader.java | 4 ++--
.../org/apache/paimon/disk/BufferFileWriter.java | 4 ++--
.../java/org/apache/paimon/disk/FileIOChannel.java | 4 ++--
.../java/org/apache/paimon/disk/IOManager.java | 4 ++--
.../main/java/org/apache/paimon/memory/Buffer.java | 4 ++--
.../apache/paimon/memory/MemorySegmentPool.java | 4 ++--
.../java/org/apache/paimon/operation/Lock.java | 4 ++--
.../main/java/org/apache/paimon/schema/Schema.java | 4 ++--
.../org/apache/paimon/schema/SchemaChange.java | 4 ++--
.../paimon/table/AbstractFileStoreTable.java | 13 ++++++-----
.../java/org/apache/paimon/table/DataTable.java | 2 +-
.../org/apache/paimon/table/FileStoreTable.java | 18 ++++++++++++++-
.../org/apache/paimon/table/ReadonlyTable.java | 20 ++++++++++++++++
.../org/apache/paimon/table/SupportsPartition.java | 27 ----------------------
.../main/java/org/apache/paimon/table/Table.java | 18 +++++++++++++--
.../apache/paimon/table/sink/BatchTableCommit.java | 4 ++--
.../apache/paimon/table/sink/BatchTableWrite.java | 4 ++--
.../paimon/table/sink/BatchWriteBuilder.java | 4 ++--
.../apache/paimon/table/sink/CommitMessage.java | 4 ++--
.../paimon/table/sink/StreamTableCommit.java | 4 ++--
.../apache/paimon/table/sink/StreamTableWrite.java | 4 ++--
.../paimon/table/sink/StreamWriteBuilder.java | 4 ++--
.../org/apache/paimon/table/sink/TableCommit.java | 4 ++--
.../org/apache/paimon/table/sink/TableWrite.java | 4 ++--
.../org/apache/paimon/table/sink/WriteBuilder.java | 4 ++--
.../paimon/table/source/EndOfScanException.java | 4 ++--
.../apache/paimon/table/source/ReadBuilder.java | 4 ++--
.../java/org/apache/paimon/table/source/Split.java | 4 ++--
.../paimon/table/source/StreamTableScan.java | 4 ++--
.../org/apache/paimon/table/source/TableRead.java | 4 ++--
.../org/apache/paimon/table/source/TableScan.java | 6 ++---
.../apache/paimon/table/system/AuditLogTable.java | 20 ++++++++++++++--
.../apache/paimon/table/system/BucketsTable.java | 14 +++++++++--
.../org/apache/paimon/table/system/FilesTable.java | 5 ++++
.../apache/paimon/table/system/OptionsTable.java | 6 +++++
.../apache/paimon/table/system/SchemasTable.java | 6 +++++
.../apache/paimon/table/system/SnapshotsTable.java | 6 +++++
.../java/org/apache/paimon/utils/Restorable.java | 4 ++++
.../table/ChangelogWithKeyFileStoreTableTest.java | 2 +-
.../paimon/table/FileStoreTableTestBase.java | 4 ++--
.../CompactionChangelogFollowUpScannerTest.java | 2 +-
.../org/apache/paimon/flink/sink/FlinkSink.java | 6 ++---
.../apache/paimon/flink/sink/FlinkSinkBuilder.java | 2 +-
.../paimon/flink/sink/StoreCompactOperator.java | 2 +-
.../paimon/flink/sink/cdc/FlinkCdcSinkBuilder.java | 2 +-
.../sink/cdc/SchemaAwareStoreWriteOperator.java | 2 +-
.../flink/source/ContinuousFileStoreSource.java | 6 ++---
.../paimon/flink/source/DataTableSource.java | 2 +-
.../paimon/flink/source/StaticFileStoreSource.java | 2 +-
.../flink/sink/FileStoreShuffleBucketTest.java | 2 +-
.../java/org/apache/paimon/spark/SparkTable.java | 15 ++++--------
117 files changed, 332 insertions(+), 257 deletions(-)
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/source/StreamTableScan.java b/paimon-common/src/main/java/org/apache/paimon/annotation/Public.java
similarity index 65%
copy from paimon-core/src/main/java/org/apache/paimon/table/source/StreamTableScan.java
copy to paimon-common/src/main/java/org/apache/paimon/annotation/Public.java
index 6b8ad64cc..d6a1be30e 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/source/StreamTableScan.java
+++ b/paimon-common/src/main/java/org/apache/paimon/annotation/Public.java
@@ -7,7 +7,7 @@
* "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
+ * 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,
@@ -16,15 +16,18 @@
* limitations under the License.
*/
-package org.apache.paimon.table.source;
+package org.apache.paimon.annotation;
-import org.apache.paimon.annotation.Experimental;
-import org.apache.paimon.utils.Restorable;
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Target;
/**
- * {@link TableScan} for streaming, supports {@link #checkpoint} and {@link #restore}.
+ * Annotation for marking classes as public, stable interfaces.
*
- * @since 0.4.0
+ * <p>API classes or methods need to be marked with modified versions.
*/
-@Experimental
-public interface StreamTableScan extends TableScan, Restorable<Long> {}
+@Documented
+@Target(ElementType.TYPE)
+@Public
+public @interface Public {}
diff --git a/paimon-common/src/main/java/org/apache/paimon/catalog/CatalogContext.java b/paimon-common/src/main/java/org/apache/paimon/catalog/CatalogContext.java
index 1b22fc184..a876f32c9 100644
--- a/paimon-common/src/main/java/org/apache/paimon/catalog/CatalogContext.java
+++ b/paimon-common/src/main/java/org/apache/paimon/catalog/CatalogContext.java
@@ -18,7 +18,7 @@
package org.apache.paimon.catalog;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.fs.FileIOLoader;
import org.apache.paimon.fs.Path;
import org.apache.paimon.fs.hadoop.HadoopFileIOLoader;
@@ -37,7 +37,7 @@ import static org.apache.paimon.options.CatalogOptions.WAREHOUSE;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class CatalogContext {
private final Options options;
diff --git a/paimon-common/src/main/java/org/apache/paimon/data/BinaryArray.java b/paimon-common/src/main/java/org/apache/paimon/data/BinaryArray.java
index d92516857..981c8ecd6 100644
--- a/paimon-common/src/main/java/org/apache/paimon/data/BinaryArray.java
+++ b/paimon-common/src/main/java/org/apache/paimon/data/BinaryArray.java
@@ -18,7 +18,7 @@
package org.apache.paimon.data;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.memory.MemorySegment;
import org.apache.paimon.memory.MemorySegmentUtils;
import org.apache.paimon.types.DataType;
@@ -41,7 +41,7 @@ import static org.apache.paimon.memory.MemorySegment.UNSAFE;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class BinaryArray extends BinarySection implements InternalArray, DataSetters {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/data/BinaryMap.java b/paimon-common/src/main/java/org/apache/paimon/data/BinaryMap.java
index 7752cb471..c3c7745d2 100644
--- a/paimon-common/src/main/java/org/apache/paimon/data/BinaryMap.java
+++ b/paimon-common/src/main/java/org/apache/paimon/data/BinaryMap.java
@@ -18,7 +18,7 @@
package org.apache.paimon.data;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.memory.MemorySegment;
import org.apache.paimon.memory.MemorySegmentUtils;
import org.apache.paimon.types.DataType;
@@ -35,7 +35,7 @@ import static org.apache.paimon.utils.Preconditions.checkArgument;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class BinaryMap extends BinarySection implements InternalMap {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/data/BinaryRow.java b/paimon-common/src/main/java/org/apache/paimon/data/BinaryRow.java
index 78c1063d1..e5f3e1b7d 100644
--- a/paimon-common/src/main/java/org/apache/paimon/data/BinaryRow.java
+++ b/paimon-common/src/main/java/org/apache/paimon/data/BinaryRow.java
@@ -17,7 +17,7 @@
package org.apache.paimon.data;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.memory.MemorySegment;
import org.apache.paimon.memory.MemorySegmentUtils;
import org.apache.paimon.types.DataType;
@@ -53,7 +53,7 @@ import static org.apache.paimon.utils.Preconditions.checkArgument;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class BinaryRow extends BinarySection implements InternalRow, DataSetters {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/data/BinaryString.java b/paimon-common/src/main/java/org/apache/paimon/data/BinaryString.java
index 8a533d597..6ccecc925 100644
--- a/paimon-common/src/main/java/org/apache/paimon/data/BinaryString.java
+++ b/paimon-common/src/main/java/org/apache/paimon/data/BinaryString.java
@@ -18,7 +18,7 @@
package org.apache.paimon.data;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.memory.MemorySegment;
import org.apache.paimon.memory.MemorySegmentUtils;
@@ -38,7 +38,7 @@ import static org.apache.paimon.utils.Preconditions.checkArgument;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class BinaryString extends BinarySection implements Comparable<BinaryString> {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/data/DataGetters.java b/paimon-common/src/main/java/org/apache/paimon/data/DataGetters.java
index 8e838fc7b..1dc107c5c 100644
--- a/paimon-common/src/main/java/org/apache/paimon/data/DataGetters.java
+++ b/paimon-common/src/main/java/org/apache/paimon/data/DataGetters.java
@@ -18,14 +18,14 @@
package org.apache.paimon.data;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
/**
* Getters to get data.
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface DataGetters {
/** Returns true if the element is null at the given position. */
diff --git a/paimon-common/src/main/java/org/apache/paimon/data/Decimal.java b/paimon-common/src/main/java/org/apache/paimon/data/Decimal.java
index 9c8e15021..71a484665 100644
--- a/paimon-common/src/main/java/org/apache/paimon/data/Decimal.java
+++ b/paimon-common/src/main/java/org/apache/paimon/data/Decimal.java
@@ -18,7 +18,7 @@
package org.apache.paimon.data;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.types.DecimalType;
import javax.annotation.Nonnull;
@@ -39,7 +39,7 @@ import static org.apache.paimon.utils.Preconditions.checkArgument;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class Decimal implements Comparable<Decimal>, Serializable {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/data/GenericArray.java b/paimon-common/src/main/java/org/apache/paimon/data/GenericArray.java
index 54616b8aa..c95ad6525 100644
--- a/paimon-common/src/main/java/org/apache/paimon/data/GenericArray.java
+++ b/paimon-common/src/main/java/org/apache/paimon/data/GenericArray.java
@@ -18,7 +18,7 @@
package org.apache.paimon.data;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.types.ArrayType;
import org.apache.paimon.utils.ArrayUtils;
@@ -37,7 +37,7 @@ import java.util.Objects;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class GenericArray implements InternalArray, Serializable {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/data/GenericMap.java b/paimon-common/src/main/java/org/apache/paimon/data/GenericMap.java
index 8f89b3b2e..0b196c075 100644
--- a/paimon-common/src/main/java/org/apache/paimon/data/GenericMap.java
+++ b/paimon-common/src/main/java/org/apache/paimon/data/GenericMap.java
@@ -18,7 +18,7 @@
package org.apache.paimon.data;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.types.MapType;
import org.apache.paimon.types.MultisetType;
@@ -40,7 +40,7 @@ import java.util.Objects;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class GenericMap implements InternalMap, Serializable {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/data/GenericRow.java b/paimon-common/src/main/java/org/apache/paimon/data/GenericRow.java
index 354a96232..929d51b05 100644
--- a/paimon-common/src/main/java/org/apache/paimon/data/GenericRow.java
+++ b/paimon-common/src/main/java/org/apache/paimon/data/GenericRow.java
@@ -18,7 +18,7 @@
package org.apache.paimon.data;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.types.RowKind;
import org.apache.paimon.types.RowType;
@@ -44,7 +44,7 @@ import static org.apache.paimon.utils.Preconditions.checkNotNull;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class GenericRow implements InternalRow, Serializable {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/data/InternalArray.java b/paimon-common/src/main/java/org/apache/paimon/data/InternalArray.java
index f23574e26..f8b3257a4 100644
--- a/paimon-common/src/main/java/org/apache/paimon/data/InternalArray.java
+++ b/paimon-common/src/main/java/org/apache/paimon/data/InternalArray.java
@@ -18,7 +18,7 @@
package org.apache.paimon.data;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.types.ArrayType;
import org.apache.paimon.types.DataType;
@@ -39,7 +39,7 @@ import static org.apache.paimon.types.DataTypeChecks.getScale;
* @see GenericArray
* @since 0.4.0
*/
-@Experimental
+@Public
public interface InternalArray extends DataGetters {
/** Returns the number of elements in this array. */
diff --git a/paimon-common/src/main/java/org/apache/paimon/data/InternalMap.java b/paimon-common/src/main/java/org/apache/paimon/data/InternalMap.java
index 068e72141..d8b62381f 100644
--- a/paimon-common/src/main/java/org/apache/paimon/data/InternalMap.java
+++ b/paimon-common/src/main/java/org/apache/paimon/data/InternalMap.java
@@ -18,7 +18,7 @@
package org.apache.paimon.data;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.types.MapType;
import org.apache.paimon.types.MultisetType;
@@ -33,7 +33,7 @@ import org.apache.paimon.types.MultisetType;
* @see GenericMap
* @since 0.4.0
*/
-@Experimental
+@Public
public interface InternalMap {
/** Returns the number of key-value mappings in this map. */
diff --git a/paimon-common/src/main/java/org/apache/paimon/data/InternalRow.java b/paimon-common/src/main/java/org/apache/paimon/data/InternalRow.java
index 8f384d6ea..d64bbb7de 100644
--- a/paimon-common/src/main/java/org/apache/paimon/data/InternalRow.java
+++ b/paimon-common/src/main/java/org/apache/paimon/data/InternalRow.java
@@ -18,7 +18,7 @@
package org.apache.paimon.data;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.types.DataType;
import org.apache.paimon.types.DataTypeChecks;
import org.apache.paimon.types.RowKind;
@@ -83,7 +83,7 @@ import static org.apache.paimon.types.DataTypeChecks.getScale;
* @see JoinedRow
* @since 0.4.0
*/
-@Experimental
+@Public
public interface InternalRow extends DataGetters {
/**
diff --git a/paimon-common/src/main/java/org/apache/paimon/data/JoinedRow.java b/paimon-common/src/main/java/org/apache/paimon/data/JoinedRow.java
index 26933fee1..736745131 100644
--- a/paimon-common/src/main/java/org/apache/paimon/data/JoinedRow.java
+++ b/paimon-common/src/main/java/org/apache/paimon/data/JoinedRow.java
@@ -18,7 +18,7 @@
package org.apache.paimon.data;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.types.RowKind;
import javax.annotation.Nullable;
@@ -32,7 +32,7 @@ import java.util.Objects;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class JoinedRow implements InternalRow {
private RowKind rowKind = RowKind.INSERT;
diff --git a/paimon-common/src/main/java/org/apache/paimon/data/Timestamp.java b/paimon-common/src/main/java/org/apache/paimon/data/Timestamp.java
index 7302033ec..1fe066077 100644
--- a/paimon-common/src/main/java/org/apache/paimon/data/Timestamp.java
+++ b/paimon-common/src/main/java/org/apache/paimon/data/Timestamp.java
@@ -18,7 +18,7 @@
package org.apache.paimon.data;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.types.LocalZonedTimestampType;
import org.apache.paimon.types.TimestampType;
import org.apache.paimon.utils.Preconditions;
@@ -39,7 +39,7 @@ import java.time.LocalTime;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class Timestamp implements Comparable<Timestamp>, Serializable {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/fs/FileIO.java b/paimon-common/src/main/java/org/apache/paimon/fs/FileIO.java
index 30a5e089e..08b62d65b 100644
--- a/paimon-common/src/main/java/org/apache/paimon/fs/FileIO.java
+++ b/paimon-common/src/main/java/org/apache/paimon/fs/FileIO.java
@@ -18,7 +18,7 @@
package org.apache.paimon.fs;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.catalog.CatalogContext;
import org.apache.paimon.fs.local.LocalFileIO;
@@ -44,7 +44,7 @@ import java.util.UUID;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface FileIO extends Serializable {
Logger LOG = LoggerFactory.getLogger(FileIO.class);
diff --git a/paimon-common/src/main/java/org/apache/paimon/fs/FileIOLoader.java b/paimon-common/src/main/java/org/apache/paimon/fs/FileIOLoader.java
index 74321e606..44d66ae89 100644
--- a/paimon-common/src/main/java/org/apache/paimon/fs/FileIOLoader.java
+++ b/paimon-common/src/main/java/org/apache/paimon/fs/FileIOLoader.java
@@ -18,14 +18,14 @@
package org.apache.paimon.fs;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
/**
* Loader to load {@link FileIO}.
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface FileIOLoader {
String getScheme();
diff --git a/paimon-common/src/main/java/org/apache/paimon/fs/FileStatus.java b/paimon-common/src/main/java/org/apache/paimon/fs/FileStatus.java
index 63f48358f..53eb6023f 100644
--- a/paimon-common/src/main/java/org/apache/paimon/fs/FileStatus.java
+++ b/paimon-common/src/main/java/org/apache/paimon/fs/FileStatus.java
@@ -18,14 +18,14 @@
package org.apache.paimon.fs;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
/**
* Interface that represents the client side information for a file independent of the file system.
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface FileStatus {
/**
diff --git a/paimon-common/src/main/java/org/apache/paimon/fs/Path.java b/paimon-common/src/main/java/org/apache/paimon/fs/Path.java
index c135c311b..7f5acb18f 100644
--- a/paimon-common/src/main/java/org/apache/paimon/fs/Path.java
+++ b/paimon-common/src/main/java/org/apache/paimon/fs/Path.java
@@ -22,7 +22,7 @@
package org.apache.paimon.fs;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.utils.StringUtils;
import java.io.Serializable;
@@ -35,7 +35,7 @@ import java.util.regex.Pattern;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class Path implements Comparable<Path>, Serializable {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/fs/PositionOutputStream.java b/paimon-common/src/main/java/org/apache/paimon/fs/PositionOutputStream.java
index cc7296711..4811913fd 100644
--- a/paimon-common/src/main/java/org/apache/paimon/fs/PositionOutputStream.java
+++ b/paimon-common/src/main/java/org/apache/paimon/fs/PositionOutputStream.java
@@ -18,7 +18,7 @@
package org.apache.paimon.fs;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.io.IOException;
import java.io.OutputStream;
@@ -28,7 +28,7 @@ import java.io.OutputStream;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public abstract class PositionOutputStream extends OutputStream {
/**
diff --git a/paimon-common/src/main/java/org/apache/paimon/fs/SeekableInputStream.java b/paimon-common/src/main/java/org/apache/paimon/fs/SeekableInputStream.java
index e3cffac13..8249ea57c 100644
--- a/paimon-common/src/main/java/org/apache/paimon/fs/SeekableInputStream.java
+++ b/paimon-common/src/main/java/org/apache/paimon/fs/SeekableInputStream.java
@@ -18,7 +18,7 @@
package org.apache.paimon.fs;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.io.IOException;
import java.io.InputStream;
@@ -28,7 +28,7 @@ import java.io.InputStream;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public abstract class SeekableInputStream extends InputStream {
/**
diff --git a/paimon-common/src/main/java/org/apache/paimon/fs/UnsupportedSchemeException.java b/paimon-common/src/main/java/org/apache/paimon/fs/UnsupportedSchemeException.java
index d0a181266..2be3738e0 100644
--- a/paimon-common/src/main/java/org/apache/paimon/fs/UnsupportedSchemeException.java
+++ b/paimon-common/src/main/java/org/apache/paimon/fs/UnsupportedSchemeException.java
@@ -18,7 +18,7 @@
package org.apache.paimon.fs;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.io.IOException;
@@ -27,7 +27,7 @@ import java.io.IOException;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class UnsupportedSchemeException extends IOException {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/memory/MemorySegment.java b/paimon-common/src/main/java/org/apache/paimon/memory/MemorySegment.java
index 1f7281a91..81672426b 100644
--- a/paimon-common/src/main/java/org/apache/paimon/memory/MemorySegment.java
+++ b/paimon-common/src/main/java/org/apache/paimon/memory/MemorySegment.java
@@ -18,7 +18,7 @@
package org.apache.paimon.memory;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import javax.annotation.Nullable;
@@ -39,7 +39,7 @@ import static org.apache.paimon.memory.MemoryUtils.getByteBufferAddress;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class MemorySegment {
public static final sun.misc.Unsafe UNSAFE = MemoryUtils.UNSAFE;
diff --git a/paimon-common/src/main/java/org/apache/paimon/memory/MemorySegmentSource.java b/paimon-common/src/main/java/org/apache/paimon/memory/MemorySegmentSource.java
index cc4ceebd7..0f9701150 100644
--- a/paimon-common/src/main/java/org/apache/paimon/memory/MemorySegmentSource.java
+++ b/paimon-common/src/main/java/org/apache/paimon/memory/MemorySegmentSource.java
@@ -18,14 +18,14 @@
package org.apache.paimon.memory;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
/**
* Interface describing entities that can provide memory segments.
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface MemorySegmentSource {
/**
diff --git a/paimon-common/src/main/java/org/apache/paimon/options/ConfigOption.java b/paimon-common/src/main/java/org/apache/paimon/options/ConfigOption.java
index 5d212c020..6299056fc 100644
--- a/paimon-common/src/main/java/org/apache/paimon/options/ConfigOption.java
+++ b/paimon-common/src/main/java/org/apache/paimon/options/ConfigOption.java
@@ -18,7 +18,7 @@
package org.apache.paimon.options;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.options.description.Description;
import java.util.Arrays;
@@ -39,7 +39,7 @@ import static org.apache.paimon.utils.Preconditions.checkNotNull;
* @param <T> The type of value associated with the configuration option.
* @since 0.4.0
*/
-@Experimental
+@Public
public class ConfigOption<T> {
private static final FallbackKey[] EMPTY = new FallbackKey[0];
diff --git a/paimon-common/src/main/java/org/apache/paimon/options/ConfigOptions.java b/paimon-common/src/main/java/org/apache/paimon/options/ConfigOptions.java
index 8c568d384..72f561335 100644
--- a/paimon-common/src/main/java/org/apache/paimon/options/ConfigOptions.java
+++ b/paimon-common/src/main/java/org/apache/paimon/options/ConfigOptions.java
@@ -18,7 +18,7 @@
package org.apache.paimon.options;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.options.description.Description;
import java.time.Duration;
@@ -68,7 +68,7 @@ import static org.apache.paimon.utils.Preconditions.checkNotNull;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class ConfigOptions {
/**
diff --git a/paimon-common/src/main/java/org/apache/paimon/options/MemorySize.java b/paimon-common/src/main/java/org/apache/paimon/options/MemorySize.java
index f85d68ce0..9296a7054 100644
--- a/paimon-common/src/main/java/org/apache/paimon/options/MemorySize.java
+++ b/paimon-common/src/main/java/org/apache/paimon/options/MemorySize.java
@@ -18,7 +18,7 @@
package org.apache.paimon.options;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.math.BigDecimal;
import java.util.Arrays;
@@ -47,7 +47,7 @@ import static org.apache.paimon.utils.Preconditions.checkNotNull;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class MemorySize implements java.io.Serializable, Comparable<MemorySize> {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/options/Options.java b/paimon-common/src/main/java/org/apache/paimon/options/Options.java
index 80c8e3579..a6b82fd37 100644
--- a/paimon-common/src/main/java/org/apache/paimon/options/Options.java
+++ b/paimon-common/src/main/java/org/apache/paimon/options/Options.java
@@ -18,7 +18,7 @@
package org.apache.paimon.options;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import javax.annotation.concurrent.ThreadSafe;
@@ -41,7 +41,7 @@ import static org.apache.paimon.options.OptionsUtils.removePrefixMap;
*
* @since 0.4.0
*/
-@Experimental
+@Public
@ThreadSafe
public class Options implements Serializable {
diff --git a/paimon-common/src/main/java/org/apache/paimon/options/description/Description.java b/paimon-common/src/main/java/org/apache/paimon/options/description/Description.java
index 1b56f357c..4a57d89ec 100644
--- a/paimon-common/src/main/java/org/apache/paimon/options/description/Description.java
+++ b/paimon-common/src/main/java/org/apache/paimon/options/description/Description.java
@@ -18,7 +18,7 @@
package org.apache.paimon.options.description;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.util.ArrayList;
import java.util.List;
@@ -29,7 +29,7 @@ import java.util.List;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class Description {
private final List<BlockElement> blocks;
diff --git a/paimon-common/src/main/java/org/apache/paimon/predicate/Predicate.java b/paimon-common/src/main/java/org/apache/paimon/predicate/Predicate.java
index 91dc058d9..699efd7b8 100644
--- a/paimon-common/src/main/java/org/apache/paimon/predicate/Predicate.java
+++ b/paimon-common/src/main/java/org/apache/paimon/predicate/Predicate.java
@@ -18,7 +18,7 @@
package org.apache.paimon.predicate;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.format.FieldStats;
import java.io.Serializable;
@@ -30,7 +30,7 @@ import java.util.Optional;
* @see PredicateBuilder
* @since 0.4.0
*/
-@Experimental
+@Public
public interface Predicate extends Serializable {
/**
diff --git a/paimon-common/src/main/java/org/apache/paimon/predicate/PredicateBuilder.java b/paimon-common/src/main/java/org/apache/paimon/predicate/PredicateBuilder.java
index 8d5b7ffa5..03391496d 100644
--- a/paimon-common/src/main/java/org/apache/paimon/predicate/PredicateBuilder.java
+++ b/paimon-common/src/main/java/org/apache/paimon/predicate/PredicateBuilder.java
@@ -18,7 +18,7 @@
package org.apache.paimon.predicate;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.data.BinaryString;
import org.apache.paimon.data.Decimal;
import org.apache.paimon.data.Timestamp;
@@ -53,7 +53,7 @@ import static java.util.Collections.singletonList;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class PredicateBuilder {
private final RowType rowType;
diff --git a/paimon-common/src/main/java/org/apache/paimon/reader/RecordReader.java b/paimon-common/src/main/java/org/apache/paimon/reader/RecordReader.java
index 8ef2aeb72..b02075b91 100644
--- a/paimon-common/src/main/java/org/apache/paimon/reader/RecordReader.java
+++ b/paimon-common/src/main/java/org/apache/paimon/reader/RecordReader.java
@@ -18,7 +18,7 @@
package org.apache.paimon.reader;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.utils.CloseableIterator;
import javax.annotation.Nullable;
@@ -34,7 +34,7 @@ import java.util.function.Function;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface RecordReader<T> extends Closeable {
/**
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/ArrayType.java b/paimon-common/src/main/java/org/apache/paimon/types/ArrayType.java
index 4c46dbac2..54e1311b0 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/ArrayType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/ArrayType.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.utils.Preconditions;
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonGenerator;
@@ -34,7 +34,7 @@ import java.util.Set;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class ArrayType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/BigIntType.java b/paimon-common/src/main/java/org/apache/paimon/types/BigIntType.java
index 897eff7cc..564133551 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/BigIntType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/BigIntType.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
/**
* Data type of an 8-byte signed integer with values from -9,223,372,036,854,775,808 to
@@ -26,7 +26,7 @@ import org.apache.paimon.annotation.Experimental;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class BigIntType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/BinaryType.java b/paimon-common/src/main/java/org/apache/paimon/types/BinaryType.java
index 7e2d1b8d0..c50d463c8 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/BinaryType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/BinaryType.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.util.Objects;
@@ -27,7 +27,7 @@ import java.util.Objects;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class BinaryType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/BooleanType.java b/paimon-common/src/main/java/org/apache/paimon/types/BooleanType.java
index aa55dd56a..fe97717b9 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/BooleanType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/BooleanType.java
@@ -18,14 +18,14 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
/**
* Data type of a boolean with a (possibly) three-valued logic of {@code TRUE, FALSE, UNKNOWN}.
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class BooleanType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/CharType.java b/paimon-common/src/main/java/org/apache/paimon/types/CharType.java
index f762d1474..efba0cd44 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/CharType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/CharType.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.util.Objects;
@@ -29,7 +29,7 @@ import java.util.Objects;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class CharType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/DataField.java b/paimon-common/src/main/java/org/apache/paimon/types/DataField.java
index 2370b0603..8b4e32865 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/DataField.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/DataField.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonGenerator;
@@ -36,7 +36,7 @@ import static org.apache.paimon.utils.EncodingUtils.escapeSingleQuotes;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class DataField implements Serializable {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/DataType.java b/paimon-common/src/main/java/org/apache/paimon/types/DataType.java
index 70d16c1d7..165d48245 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/DataType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/DataType.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.utils.Preconditions;
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonGenerator;
@@ -37,7 +37,7 @@ import java.util.Set;
* @see DataTypes
* @since 0.4.0
*/
-@Experimental
+@Public
public abstract class DataType implements Serializable {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/DataTypeDefaultVisitor.java b/paimon-common/src/main/java/org/apache/paimon/types/DataTypeDefaultVisitor.java
index f3a67f45b..ca39d43cf 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/DataTypeDefaultVisitor.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/DataTypeDefaultVisitor.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
/**
* Implementation of {@link DataTypeVisitor} that redirects all calls to {@link
@@ -26,7 +26,7 @@ import org.apache.paimon.annotation.Experimental;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public abstract class DataTypeDefaultVisitor<R> implements DataTypeVisitor<R> {
@Override
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/DataTypeFamily.java b/paimon-common/src/main/java/org/apache/paimon/types/DataTypeFamily.java
index edefcd19f..7f966e32f 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/DataTypeFamily.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/DataTypeFamily.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
/**
* An enumeration of Data type families for clustering {@link DataTypeRoot}s into categories.
@@ -29,7 +29,7 @@ import org.apache.paimon.annotation.Experimental;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public enum DataTypeFamily {
PREDEFINED,
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/DataTypeRoot.java b/paimon-common/src/main/java/org/apache/paimon/types/DataTypeRoot.java
index ef1000af8..d014a10cc 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/DataTypeRoot.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/DataTypeRoot.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.util.Collections;
import java.util.EnumSet;
@@ -45,7 +45,7 @@ import java.util.Set;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public enum DataTypeRoot {
CHAR(DataTypeFamily.PREDEFINED, DataTypeFamily.CHARACTER_STRING),
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/DataTypeVisitor.java b/paimon-common/src/main/java/org/apache/paimon/types/DataTypeVisitor.java
index 41e714af4..c83fcdbac 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/DataTypeVisitor.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/DataTypeVisitor.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
/**
* The visitor definition of {@link DataType}. The visitor transforms a data type into instances of
@@ -27,7 +27,7 @@ import org.apache.paimon.annotation.Experimental;
* @param <R> result type
* @since 0.4.0
*/
-@Experimental
+@Public
public interface DataTypeVisitor<R> {
R visit(CharType charType);
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/DataTypes.java b/paimon-common/src/main/java/org/apache/paimon/types/DataTypes.java
index de5a35467..2ae97cccd 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/DataTypes.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/DataTypes.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.util.Arrays;
@@ -27,7 +27,7 @@ import java.util.Arrays;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class DataTypes {
public static IntType INT() {
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/DateType.java b/paimon-common/src/main/java/org/apache/paimon/types/DateType.java
index 9f4578132..e82c3de2e 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/DateType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/DateType.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
/**
* Data type of a date consisting of {@code year-month-day} with values ranging from {@code
@@ -29,7 +29,7 @@ import org.apache.paimon.annotation.Experimental;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class DateType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/DecimalType.java b/paimon-common/src/main/java/org/apache/paimon/types/DecimalType.java
index 06e3c92cd..7c2e46499 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/DecimalType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/DecimalType.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.util.Objects;
@@ -27,7 +27,7 @@ import java.util.Objects;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class DecimalType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/DoubleType.java b/paimon-common/src/main/java/org/apache/paimon/types/DoubleType.java
index 81442e76b..8a18ba2c4 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/DoubleType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/DoubleType.java
@@ -18,14 +18,14 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
/**
* Data type of an 8-byte double precision floating point number.
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class DoubleType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/FloatType.java b/paimon-common/src/main/java/org/apache/paimon/types/FloatType.java
index 854f4fd56..0575cb52e 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/FloatType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/FloatType.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
/**
* Data type of a 4-byte single precision floating point number. Compared to the SQL standard, the
@@ -26,7 +26,7 @@ import org.apache.paimon.annotation.Experimental;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class FloatType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/IntType.java b/paimon-common/src/main/java/org/apache/paimon/types/IntType.java
index 1bb71d205..9f99267d8 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/IntType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/IntType.java
@@ -18,14 +18,14 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
/**
* Data type of a 4-byte signed integer with values from -2,147,483,648 to 2,147,483,647.
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class IntType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/LocalZonedTimestampType.java b/paimon-common/src/main/java/org/apache/paimon/types/LocalZonedTimestampType.java
index a64e31221..d5d1eb11d 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/LocalZonedTimestampType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/LocalZonedTimestampType.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.util.Objects;
@@ -37,7 +37,7 @@ import java.util.Objects;
* @see TimestampType
* @since 0.4.0
*/
-@Experimental
+@Public
public final class LocalZonedTimestampType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/MapType.java b/paimon-common/src/main/java/org/apache/paimon/types/MapType.java
index 47f53b9a4..202ae8151 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/MapType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/MapType.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.utils.Preconditions;
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonGenerator;
@@ -35,7 +35,7 @@ import java.util.Set;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class MapType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/MultisetType.java b/paimon-common/src/main/java/org/apache/paimon/types/MultisetType.java
index 653bfacba..4caa601d9 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/MultisetType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/MultisetType.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.utils.Preconditions;
import org.apache.flink.shaded.jackson2.com.fasterxml.jackson.core.JsonGenerator;
@@ -38,7 +38,7 @@ import java.util.Set;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class MultisetType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/RowKind.java b/paimon-common/src/main/java/org/apache/paimon/types/RowKind.java
index c70704a8e..3089ba5b0 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/RowKind.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/RowKind.java
@@ -18,14 +18,14 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
/**
* Lists all kinds of changes that a row can describe in a changelog.
*
* @since 0.4.0
*/
-@Experimental
+@Public
public enum RowKind {
// Note: Enums have no stable hash code across different JVMs, use toByteValue() for
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/RowType.java b/paimon-common/src/main/java/org/apache/paimon/types/RowType.java
index c7f6fe7a8..beeb70f3b 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/RowType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/RowType.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.utils.Preconditions;
import org.apache.paimon.utils.StringUtils;
@@ -43,7 +43,7 @@ import java.util.stream.Collectors;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class RowType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/SmallIntType.java b/paimon-common/src/main/java/org/apache/paimon/types/SmallIntType.java
index 1f637f623..b63800deb 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/SmallIntType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/SmallIntType.java
@@ -18,14 +18,14 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
/**
* Data type of a 2-byte signed integer with values from -32,768 to 32,767.
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class SmallIntType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/TimeType.java b/paimon-common/src/main/java/org/apache/paimon/types/TimeType.java
index 59235c729..781194b42 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/TimeType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/TimeType.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.util.Objects;
@@ -34,7 +34,7 @@ import java.util.Objects;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class TimeType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/TimestampType.java b/paimon-common/src/main/java/org/apache/paimon/types/TimestampType.java
index 3c0b2651b..07e0fcdb6 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/TimestampType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/TimestampType.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.util.Objects;
@@ -32,7 +32,7 @@ import java.util.Objects;
* @see LocalZonedTimestampType
* @since 0.4.0
*/
-@Experimental
+@Public
public class TimestampType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/TinyIntType.java b/paimon-common/src/main/java/org/apache/paimon/types/TinyIntType.java
index b42d2a25a..a7be5ae62 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/TinyIntType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/TinyIntType.java
@@ -18,14 +18,14 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
/**
* Data type of a 1-byte signed integer with values from -128 to 127.
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class TinyIntType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/VarBinaryType.java b/paimon-common/src/main/java/org/apache/paimon/types/VarBinaryType.java
index 6612b24af..7331172f7 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/VarBinaryType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/VarBinaryType.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.util.Objects;
@@ -27,7 +27,7 @@ import java.util.Objects;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class VarBinaryType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/types/VarCharType.java b/paimon-common/src/main/java/org/apache/paimon/types/VarCharType.java
index b17f7bb87..9585ecd8f 100644
--- a/paimon-common/src/main/java/org/apache/paimon/types/VarCharType.java
+++ b/paimon-common/src/main/java/org/apache/paimon/types/VarCharType.java
@@ -18,7 +18,7 @@
package org.apache.paimon.types;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.util.Objects;
@@ -29,7 +29,7 @@ import java.util.Objects;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public final class VarCharType extends DataType {
private static final long serialVersionUID = 1L;
diff --git a/paimon-common/src/main/java/org/apache/paimon/utils/CloseableIterator.java b/paimon-common/src/main/java/org/apache/paimon/utils/CloseableIterator.java
index 36db657ef..0e24aea7b 100644
--- a/paimon-common/src/main/java/org/apache/paimon/utils/CloseableIterator.java
+++ b/paimon-common/src/main/java/org/apache/paimon/utils/CloseableIterator.java
@@ -18,7 +18,7 @@
package org.apache.paimon.utils;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import javax.annotation.Nonnull;
@@ -41,7 +41,7 @@ import static java.util.Arrays.asList;
* @param <T> the type of iterated elements.
* @since 0.4.0
*/
-@Experimental
+@Public
public interface CloseableIterator<T> extends Iterator<T>, AutoCloseable {
CloseableIterator<?> EMPTY_INSTANCE =
diff --git a/paimon-core/src/main/java/org/apache/paimon/catalog/Catalog.java b/paimon-core/src/main/java/org/apache/paimon/catalog/Catalog.java
index 8e2814e0a..16545250a 100644
--- a/paimon-core/src/main/java/org/apache/paimon/catalog/Catalog.java
+++ b/paimon-core/src/main/java/org/apache/paimon/catalog/Catalog.java
@@ -18,7 +18,7 @@
package org.apache.paimon.catalog;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.schema.Schema;
import org.apache.paimon.schema.SchemaChange;
import org.apache.paimon.table.Table;
@@ -33,7 +33,7 @@ import java.util.Optional;
* @see CatalogFactory
* @since 0.4.0
*/
-@Experimental
+@Public
public interface Catalog extends AutoCloseable {
String DEFAULT_DATABASE = "default";
diff --git a/paimon-core/src/main/java/org/apache/paimon/catalog/CatalogFactory.java b/paimon-core/src/main/java/org/apache/paimon/catalog/CatalogFactory.java
index 25717c6cb..5ea94c0ec 100644
--- a/paimon-core/src/main/java/org/apache/paimon/catalog/CatalogFactory.java
+++ b/paimon-core/src/main/java/org/apache/paimon/catalog/CatalogFactory.java
@@ -18,7 +18,7 @@
package org.apache.paimon.catalog;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.fs.FileIO;
import org.apache.paimon.fs.Path;
import org.apache.paimon.utils.Preconditions;
@@ -39,7 +39,7 @@ import static org.apache.paimon.utils.Preconditions.checkArgument;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface CatalogFactory {
String identifier();
diff --git a/paimon-core/src/main/java/org/apache/paimon/catalog/CatalogLock.java b/paimon-core/src/main/java/org/apache/paimon/catalog/CatalogLock.java
index 89555bf9a..278b3ad63 100644
--- a/paimon-core/src/main/java/org/apache/paimon/catalog/CatalogLock.java
+++ b/paimon-core/src/main/java/org/apache/paimon/catalog/CatalogLock.java
@@ -18,7 +18,7 @@
package org.apache.paimon.catalog;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.io.Closeable;
import java.io.Serializable;
@@ -29,7 +29,7 @@ import java.util.concurrent.Callable;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface CatalogLock extends Closeable {
/** Run with catalog lock. The caller should tell catalog the database and table name. */
diff --git a/paimon-core/src/main/java/org/apache/paimon/catalog/Identifier.java b/paimon-core/src/main/java/org/apache/paimon/catalog/Identifier.java
index a1240fb2d..126849c4b 100644
--- a/paimon-core/src/main/java/org/apache/paimon/catalog/Identifier.java
+++ b/paimon-core/src/main/java/org/apache/paimon/catalog/Identifier.java
@@ -18,7 +18,7 @@
package org.apache.paimon.catalog;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.fs.Path;
import org.apache.paimon.utils.StringUtils;
@@ -33,7 +33,7 @@ import static org.apache.paimon.utils.Preconditions.checkArgument;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class Identifier implements Serializable {
private static final long serialVersionUID = 1L;
diff --git a/paimon-core/src/main/java/org/apache/paimon/disk/BufferFileReader.java b/paimon-core/src/main/java/org/apache/paimon/disk/BufferFileReader.java
index b44c40fe6..13cccfd14 100644
--- a/paimon-core/src/main/java/org/apache/paimon/disk/BufferFileReader.java
+++ b/paimon-core/src/main/java/org/apache/paimon/disk/BufferFileReader.java
@@ -18,7 +18,7 @@
package org.apache.paimon.disk;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.memory.Buffer;
import java.io.IOException;
@@ -28,7 +28,7 @@ import java.io.IOException;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface BufferFileReader extends FileIOChannel {
void readInto(Buffer buffer) throws IOException;
diff --git a/paimon-core/src/main/java/org/apache/paimon/disk/BufferFileWriter.java b/paimon-core/src/main/java/org/apache/paimon/disk/BufferFileWriter.java
index 0f32189cb..c03b64f97 100644
--- a/paimon-core/src/main/java/org/apache/paimon/disk/BufferFileWriter.java
+++ b/paimon-core/src/main/java/org/apache/paimon/disk/BufferFileWriter.java
@@ -18,7 +18,7 @@
package org.apache.paimon.disk;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.memory.Buffer;
import org.apache.paimon.memory.MemorySegment;
@@ -29,7 +29,7 @@ import java.io.IOException;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface BufferFileWriter extends FileIOChannel {
/**
diff --git a/paimon-core/src/main/java/org/apache/paimon/disk/FileIOChannel.java b/paimon-core/src/main/java/org/apache/paimon/disk/FileIOChannel.java
index c9fe2fdf7..5c9a262df 100644
--- a/paimon-core/src/main/java/org/apache/paimon/disk/FileIOChannel.java
+++ b/paimon-core/src/main/java/org/apache/paimon/disk/FileIOChannel.java
@@ -18,7 +18,7 @@
package org.apache.paimon.disk;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.utils.StringUtils;
import java.io.File;
@@ -34,7 +34,7 @@ import java.util.concurrent.atomic.AtomicInteger;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface FileIOChannel {
/**
diff --git a/paimon-core/src/main/java/org/apache/paimon/disk/IOManager.java b/paimon-core/src/main/java/org/apache/paimon/disk/IOManager.java
index 8e71c3706..5b618f99b 100644
--- a/paimon-core/src/main/java/org/apache/paimon/disk/IOManager.java
+++ b/paimon-core/src/main/java/org/apache/paimon/disk/IOManager.java
@@ -18,7 +18,7 @@
package org.apache.paimon.disk;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.disk.FileIOChannel.Enumerator;
import org.apache.paimon.disk.FileIOChannel.ID;
@@ -29,7 +29,7 @@ import java.io.IOException;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface IOManager extends AutoCloseable {
ID createChannel();
diff --git a/paimon-core/src/main/java/org/apache/paimon/memory/Buffer.java b/paimon-core/src/main/java/org/apache/paimon/memory/Buffer.java
index 0bd395dbd..cf0cef648 100644
--- a/paimon-core/src/main/java/org/apache/paimon/memory/Buffer.java
+++ b/paimon-core/src/main/java/org/apache/paimon/memory/Buffer.java
@@ -18,7 +18,7 @@
package org.apache.paimon.memory;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.nio.ByteBuffer;
@@ -27,7 +27,7 @@ import java.nio.ByteBuffer;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class Buffer {
private final MemorySegment segment;
diff --git a/paimon-core/src/main/java/org/apache/paimon/memory/MemorySegmentPool.java b/paimon-core/src/main/java/org/apache/paimon/memory/MemorySegmentPool.java
index 5f731a266..9ea5fa3f6 100644
--- a/paimon-core/src/main/java/org/apache/paimon/memory/MemorySegmentPool.java
+++ b/paimon-core/src/main/java/org/apache/paimon/memory/MemorySegmentPool.java
@@ -18,7 +18,7 @@
package org.apache.paimon.memory;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.options.MemorySize;
import java.util.List;
@@ -28,7 +28,7 @@ import java.util.List;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface MemorySegmentPool extends MemorySegmentSource {
int DEFAULT_PAGE_SIZE = 32 * 1024;
diff --git a/paimon-core/src/main/java/org/apache/paimon/operation/Lock.java b/paimon-core/src/main/java/org/apache/paimon/operation/Lock.java
index 606ebf249..499a7ca6a 100644
--- a/paimon-core/src/main/java/org/apache/paimon/operation/Lock.java
+++ b/paimon-core/src/main/java/org/apache/paimon/operation/Lock.java
@@ -18,7 +18,7 @@
package org.apache.paimon.operation;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.catalog.CatalogLock;
import org.apache.paimon.catalog.Identifier;
@@ -32,7 +32,7 @@ import java.util.concurrent.Callable;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface Lock extends AutoCloseable {
/** Run with lock. */
diff --git a/paimon-core/src/main/java/org/apache/paimon/schema/Schema.java b/paimon-core/src/main/java/org/apache/paimon/schema/Schema.java
index 9d0c1feae..cd90a5d51 100644
--- a/paimon-core/src/main/java/org/apache/paimon/schema/Schema.java
+++ b/paimon-core/src/main/java/org/apache/paimon/schema/Schema.java
@@ -18,7 +18,7 @@
package org.apache.paimon.schema;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.types.DataField;
import org.apache.paimon.types.DataType;
import org.apache.paimon.types.RowType;
@@ -41,7 +41,7 @@ import java.util.stream.Collectors;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class Schema {
private final List<DataField> fields;
diff --git a/paimon-core/src/main/java/org/apache/paimon/schema/SchemaChange.java b/paimon-core/src/main/java/org/apache/paimon/schema/SchemaChange.java
index 93061b2d3..ff30d48ef 100644
--- a/paimon-core/src/main/java/org/apache/paimon/schema/SchemaChange.java
+++ b/paimon-core/src/main/java/org/apache/paimon/schema/SchemaChange.java
@@ -18,7 +18,7 @@
package org.apache.paimon.schema;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.types.DataType;
import javax.annotation.Nullable;
@@ -32,7 +32,7 @@ import java.util.Objects;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface SchemaChange extends Serializable {
static SchemaChange setOption(String key, String value) {
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/AbstractFileStoreTable.java b/paimon-core/src/main/java/org/apache/paimon/table/AbstractFileStoreTable.java
index 40fbd0178..4e83ed8e6 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/AbstractFileStoreTable.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/AbstractFileStoreTable.java
@@ -71,7 +71,7 @@ public abstract class AbstractFileStoreTable implements FileStoreTable {
return new SnapshotSplitReaderImpl(
store().newScan(),
tableSchema,
- options(),
+ coreOptions(),
snapshotManager(),
splitGenerator(),
nonPartitionFilterConsumer());
@@ -79,13 +79,14 @@ public abstract class AbstractFileStoreTable implements FileStoreTable {
@Override
public BatchDataTableScan newScan() {
- return new BatchDataTableScanImpl(options(), newSnapshotSplitReader(), snapshotManager());
+ return new BatchDataTableScanImpl(
+ coreOptions(), newSnapshotSplitReader(), snapshotManager());
}
@Override
public StreamDataTableScan newStreamScan() {
return new StreamDataTableScanImpl(
- options(),
+ coreOptions(),
newSnapshotSplitReader(),
snapshotManager(),
supportStreamingReadOverwrite());
@@ -153,7 +154,7 @@ public abstract class AbstractFileStoreTable implements FileStoreTable {
}
@Override
- public CoreOptions options() {
+ public CoreOptions coreOptions() {
return store().options();
}
@@ -181,8 +182,8 @@ public abstract class AbstractFileStoreTable implements FileStoreTable {
public TableCommitImpl newCommit(String commitUser) {
return new TableCommitImpl(
store().newCommit(commitUser),
- options().writeOnly() ? null : store().newExpire(),
- options().writeOnly() ? null : store().newPartitionExpire(commitUser));
+ coreOptions().writeOnly() ? null : store().newExpire(),
+ coreOptions().writeOnly() ? null : store().newPartitionExpire(commitUser));
}
private Optional<TableSchema> tryTimeTravel(Options options) {
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/DataTable.java b/paimon-core/src/main/java/org/apache/paimon/table/DataTable.java
index 3e24ca03b..f3b7f92af 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/DataTable.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/DataTable.java
@@ -37,7 +37,7 @@ public interface DataTable extends InnerTable {
@Override
StreamDataTableScan newStreamScan();
- CoreOptions options();
+ CoreOptions coreOptions();
SnapshotManager snapshotManager();
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/FileStoreTable.java b/paimon-core/src/main/java/org/apache/paimon/table/FileStoreTable.java
index f217ef016..a864f3e4d 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/FileStoreTable.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/FileStoreTable.java
@@ -29,12 +29,13 @@ import org.apache.paimon.types.RowType;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
/**
* An abstraction layer above {@link FileStore} to provide reading and writing of {@link
* InternalRow}.
*/
-public interface FileStoreTable extends DataTable, SupportsPartition {
+public interface FileStoreTable extends DataTable {
@Override
default String name() {
@@ -51,6 +52,21 @@ public interface FileStoreTable extends DataTable, SupportsPartition {
return schema().partitionKeys();
}
+ @Override
+ default List<String> primaryKeys() {
+ return schema().primaryKeys();
+ }
+
+ @Override
+ default Map<String, String> options() {
+ return schema().options();
+ }
+
+ @Override
+ default Optional<String> comment() {
+ return Optional.ofNullable(schema().comment());
+ }
+
TableSchema schema();
@Override
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/ReadonlyTable.java b/paimon-core/src/main/java/org/apache/paimon/table/ReadonlyTable.java
index 479d930f6..77b32a273 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/ReadonlyTable.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/ReadonlyTable.java
@@ -24,9 +24,29 @@ import org.apache.paimon.table.sink.InnerTableWrite;
import org.apache.paimon.table.sink.StreamWriteBuilder;
import org.apache.paimon.table.source.InnerStreamTableScan;
+import java.util.Collections;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+
/** Readonly table which only provide implementation for scan and read. */
public interface ReadonlyTable extends InnerTable {
+ @Override
+ default List<String> partitionKeys() {
+ return Collections.emptyList();
+ }
+
+ @Override
+ default Map<String, String> options() {
+ return Collections.emptyMap();
+ }
+
+ @Override
+ default Optional<String> comment() {
+ return Optional.empty();
+ }
+
@Override
default BatchWriteBuilder newBatchWriteBuilder() {
throw new UnsupportedOperationException(
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/SupportsPartition.java b/paimon-core/src/main/java/org/apache/paimon/table/SupportsPartition.java
deleted file mode 100644
index 9a13d8d13..000000000
--- a/paimon-core/src/main/java/org/apache/paimon/table/SupportsPartition.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.paimon.table;
-
-import java.util.List;
-
-/** An interface for {@link Table} partition support. */
-public interface SupportsPartition {
-
- List<String> partitionKeys();
-}
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/Table.java b/paimon-core/src/main/java/org/apache/paimon/table/Table.java
index a798f6394..cf58f48f0 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/Table.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/Table.java
@@ -18,21 +18,23 @@
package org.apache.paimon.table;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.table.sink.BatchWriteBuilder;
import org.apache.paimon.table.sink.StreamWriteBuilder;
import org.apache.paimon.table.source.ReadBuilder;
import org.apache.paimon.types.RowType;
import java.io.Serializable;
+import java.util.List;
import java.util.Map;
+import java.util.Optional;
/**
* A table provides basic abstraction for table type and table scan and table read.
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface Table extends Serializable {
/** A name to identify this table. */
@@ -41,6 +43,18 @@ public interface Table extends Serializable {
/** Returns the row type of this table. */
RowType rowType();
+ /** Partition keys of this table. */
+ List<String> partitionKeys();
+
+ /** Primary keys of this table. */
+ List<String> primaryKeys();
+
+ /** Options of this table. */
+ Map<String, String> options();
+
+ /** Optional comment of this table. */
+ Optional<String> comment();
+
/** Copy this table with adding dynamic options. */
Table copy(Map<String, String> dynamicOptions);
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/sink/BatchTableCommit.java b/paimon-core/src/main/java/org/apache/paimon/table/sink/BatchTableCommit.java
index 242263f64..894aec3e5 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/sink/BatchTableCommit.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/sink/BatchTableCommit.java
@@ -18,7 +18,7 @@
package org.apache.paimon.table.sink;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.util.List;
@@ -27,7 +27,7 @@ import java.util.List;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface BatchTableCommit extends TableCommit {
/**
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/sink/BatchTableWrite.java b/paimon-core/src/main/java/org/apache/paimon/table/sink/BatchTableWrite.java
index 30c05ee99..9e545e9b0 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/sink/BatchTableWrite.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/sink/BatchTableWrite.java
@@ -18,7 +18,7 @@
package org.apache.paimon.table.sink;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.util.List;
@@ -27,7 +27,7 @@ import java.util.List;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface BatchTableWrite extends TableWrite {
/**
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/sink/BatchWriteBuilder.java b/paimon-core/src/main/java/org/apache/paimon/table/sink/BatchWriteBuilder.java
index c2e725adc..abcab70c9 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/sink/BatchWriteBuilder.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/sink/BatchWriteBuilder.java
@@ -18,7 +18,7 @@
package org.apache.paimon.table.sink;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.data.InternalRow;
import javax.annotation.Nullable;
@@ -51,7 +51,7 @@ import java.util.Map;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface BatchWriteBuilder extends WriteBuilder {
long COMMIT_IDENTIFIER = Long.MAX_VALUE;
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/sink/CommitMessage.java b/paimon-core/src/main/java/org/apache/paimon/table/sink/CommitMessage.java
index b969bb18d..32a8d66aa 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/sink/CommitMessage.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/sink/CommitMessage.java
@@ -18,7 +18,7 @@
package org.apache.paimon.table.sink;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.data.BinaryRow;
import java.io.Serializable;
@@ -28,7 +28,7 @@ import java.io.Serializable;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface CommitMessage extends Serializable {
/** Partition of this commit message. */
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/sink/StreamTableCommit.java b/paimon-core/src/main/java/org/apache/paimon/table/sink/StreamTableCommit.java
index 068f6430c..6a4dc4a25 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/sink/StreamTableCommit.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/sink/StreamTableCommit.java
@@ -18,7 +18,7 @@
package org.apache.paimon.table.sink;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.util.List;
import java.util.Set;
@@ -29,7 +29,7 @@ import java.util.Set;
* @since 0.4.0
* @see StreamWriteBuilder
*/
-@Experimental
+@Public
public interface StreamTableCommit extends TableCommit {
/**
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/sink/StreamTableWrite.java b/paimon-core/src/main/java/org/apache/paimon/table/sink/StreamTableWrite.java
index b5545eb18..bc1741e5a 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/sink/StreamTableWrite.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/sink/StreamTableWrite.java
@@ -18,7 +18,7 @@
package org.apache.paimon.table.sink;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.util.List;
@@ -28,7 +28,7 @@ import java.util.List;
* @since 0.4.0
* @see StreamWriteBuilder
*/
-@Experimental
+@Public
public interface StreamTableWrite extends TableWrite {
/**
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/sink/StreamWriteBuilder.java b/paimon-core/src/main/java/org/apache/paimon/table/sink/StreamWriteBuilder.java
index f147a17c3..c5465de2d 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/sink/StreamWriteBuilder.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/sink/StreamWriteBuilder.java
@@ -18,7 +18,7 @@
package org.apache.paimon.table.sink;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.data.InternalRow;
/**
@@ -39,7 +39,7 @@ import org.apache.paimon.data.InternalRow;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface StreamWriteBuilder extends WriteBuilder {
/** Get commit user, set by {@link #withCommitUser}. */
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/sink/TableCommit.java b/paimon-core/src/main/java/org/apache/paimon/table/sink/TableCommit.java
index 7cf82242f..2694d66b0 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/sink/TableCommit.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/sink/TableCommit.java
@@ -18,7 +18,7 @@
package org.apache.paimon.table.sink;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.table.Table;
/**
@@ -30,5 +30,5 @@ import org.apache.paimon.table.Table;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface TableCommit extends AutoCloseable {}
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/sink/TableWrite.java b/paimon-core/src/main/java/org/apache/paimon/table/sink/TableWrite.java
index 7fcc20c78..3e1506fd3 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/sink/TableWrite.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/sink/TableWrite.java
@@ -18,7 +18,7 @@
package org.apache.paimon.table.sink;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.data.BinaryRow;
import org.apache.paimon.data.InternalRow;
import org.apache.paimon.disk.IOManager;
@@ -29,7 +29,7 @@ import org.apache.paimon.table.Table;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface TableWrite extends AutoCloseable {
/** With {@link IOManager}, this is needed if 'write-buffer-spillable' is set to true. */
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/sink/WriteBuilder.java b/paimon-core/src/main/java/org/apache/paimon/table/sink/WriteBuilder.java
index 944600cce..c80929d65 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/sink/WriteBuilder.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/sink/WriteBuilder.java
@@ -18,7 +18,7 @@
package org.apache.paimon.table.sink;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.data.InternalRow;
import org.apache.paimon.types.RowType;
@@ -29,7 +29,7 @@ import java.io.Serializable;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface WriteBuilder extends Serializable {
/** A name to identify this table. */
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/source/EndOfScanException.java b/paimon-core/src/main/java/org/apache/paimon/table/source/EndOfScanException.java
index 167de5907..edb5e49c4 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/source/EndOfScanException.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/source/EndOfScanException.java
@@ -18,14 +18,14 @@
package org.apache.paimon.table.source;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
/**
* Signals that an end of scanning has been reached unexpectedly during input.
*
* @since 0.4.0
*/
-@Experimental
+@Public
public class EndOfScanException extends RuntimeException {
private static final long serialVersionUID = 1L;
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/source/ReadBuilder.java b/paimon-core/src/main/java/org/apache/paimon/table/source/ReadBuilder.java
index ba3b720f1..4991275fb 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/source/ReadBuilder.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/source/ReadBuilder.java
@@ -18,7 +18,7 @@
package org.apache.paimon.table.source;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.data.InternalRow;
import org.apache.paimon.predicate.Predicate;
import org.apache.paimon.predicate.PredicateBuilder;
@@ -67,7 +67,7 @@ import java.util.List;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface ReadBuilder extends Serializable {
/** A name to identify the table. */
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/source/Split.java b/paimon-core/src/main/java/org/apache/paimon/table/source/Split.java
index 8bc4ff034..b4cbbbd4e 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/source/Split.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/source/Split.java
@@ -18,7 +18,7 @@
package org.apache.paimon.table.source;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import java.io.Serializable;
@@ -27,7 +27,7 @@ import java.io.Serializable;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface Split extends Serializable {
long rowCount();
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/source/StreamTableScan.java b/paimon-core/src/main/java/org/apache/paimon/table/source/StreamTableScan.java
index 6b8ad64cc..82d4d7d38 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/source/StreamTableScan.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/source/StreamTableScan.java
@@ -18,7 +18,7 @@
package org.apache.paimon.table.source;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.utils.Restorable;
/**
@@ -26,5 +26,5 @@ import org.apache.paimon.utils.Restorable;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface StreamTableScan extends TableScan, Restorable<Long> {}
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/source/TableRead.java b/paimon-core/src/main/java/org/apache/paimon/table/source/TableRead.java
index 2fa89c737..f496e574a 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/source/TableRead.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/source/TableRead.java
@@ -18,7 +18,7 @@
package org.apache.paimon.table.source;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.data.InternalRow;
import org.apache.paimon.mergetree.compact.ConcatRecordReader;
import org.apache.paimon.operation.FileStoreRead;
@@ -33,7 +33,7 @@ import java.util.List;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface TableRead {
RecordReader<InternalRow> createReader(Split split) throws IOException;
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/source/TableScan.java b/paimon-core/src/main/java/org/apache/paimon/table/source/TableScan.java
index 5a39ce586..193d6e8be 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/source/TableScan.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/source/TableScan.java
@@ -18,7 +18,7 @@
package org.apache.paimon.table.source;
-import org.apache.paimon.annotation.Experimental;
+import org.apache.paimon.annotation.Public;
import org.apache.paimon.table.Table;
import java.util.List;
@@ -28,7 +28,7 @@ import java.util.List;
*
* @since 0.4.0
*/
-@Experimental
+@Public
public interface TableScan {
/** Plan splits, throws {@link EndOfScanException} if the scan is ended. */
@@ -39,7 +39,7 @@ public interface TableScan {
*
* @since 0.4.0
*/
- @Experimental
+ @Public
interface Plan {
List<Split> splits();
}
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/system/AuditLogTable.java b/paimon-core/src/main/java/org/apache/paimon/table/system/AuditLogTable.java
index 2d03a1885..9f1202d40 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/system/AuditLogTable.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/system/AuditLogTable.java
@@ -58,6 +58,7 @@ import javax.annotation.Nullable;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -105,6 +106,21 @@ public class AuditLogTable implements DataTable, ReadonlyTable {
return new RowType(fields);
}
+ @Override
+ public List<String> partitionKeys() {
+ return dataTable.partitionKeys();
+ }
+
+ @Override
+ public Map<String, String> options() {
+ return dataTable.options();
+ }
+
+ @Override
+ public List<String> primaryKeys() {
+ return Collections.emptyList();
+ }
+
@Override
public SnapshotSplitReader newSnapshotSplitReader() {
return new AuditLogDataSplitReader(dataTable.newSnapshotSplitReader());
@@ -121,8 +137,8 @@ public class AuditLogTable implements DataTable, ReadonlyTable {
}
@Override
- public CoreOptions options() {
- return dataTable.options();
+ public CoreOptions coreOptions() {
+ return dataTable.coreOptions();
}
@Override
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/system/BucketsTable.java b/paimon-core/src/main/java/org/apache/paimon/table/system/BucketsTable.java
index abf5c2c42..819454e78 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/system/BucketsTable.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/system/BucketsTable.java
@@ -104,6 +104,16 @@ public class BucketsTable implements DataTable, ReadonlyTable {
return new RowType(fields);
}
+ @Override
+ public Map<String, String> options() {
+ return wrapped.options();
+ }
+
+ @Override
+ public List<String> primaryKeys() {
+ return Collections.emptyList();
+ }
+
@Override
public SnapshotSplitReader newSnapshotSplitReader() {
return wrapped.newSnapshotSplitReader();
@@ -120,8 +130,8 @@ public class BucketsTable implements DataTable, ReadonlyTable {
}
@Override
- public CoreOptions options() {
- return wrapped.options();
+ public CoreOptions coreOptions() {
+ return wrapped.coreOptions();
}
@Override
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/system/FilesTable.java b/paimon-core/src/main/java/org/apache/paimon/table/system/FilesTable.java
index 8ddd2c341..2d2eaad7e 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/system/FilesTable.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/system/FilesTable.java
@@ -116,6 +116,11 @@ public class FilesTable implements ReadonlyTable {
return TABLE_TYPE;
}
+ @Override
+ public List<String> primaryKeys() {
+ return Collections.singletonList("file_path");
+ }
+
@Override
public InnerTableScan newScan() {
return new FilesScan(storeTable);
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/system/OptionsTable.java b/paimon-core/src/main/java/org/apache/paimon/table/system/OptionsTable.java
index 1063b24a7..975fb8cfc 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/system/OptionsTable.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/system/OptionsTable.java
@@ -43,6 +43,7 @@ import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -80,6 +81,11 @@ public class OptionsTable implements ReadonlyTable {
return TABLE_TYPE;
}
+ @Override
+ public List<String> primaryKeys() {
+ return Collections.singletonList("key");
+ }
+
@Override
public InnerTableScan newScan() {
return new OptionsScan();
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/system/SchemasTable.java b/paimon-core/src/main/java/org/apache/paimon/table/system/SchemasTable.java
index b7f04e984..c855f4f4e 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/system/SchemasTable.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/system/SchemasTable.java
@@ -48,6 +48,7 @@ import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -90,6 +91,11 @@ public class SchemasTable implements ReadonlyTable {
return TABLE_TYPE;
}
+ @Override
+ public List<String> primaryKeys() {
+ return Collections.singletonList("schema_id");
+ }
+
@Override
public InnerTableScan newScan() {
return new SchemasScan();
diff --git a/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java b/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java
index 5b947532e..216ca052d 100644
--- a/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java
+++ b/paimon-core/src/main/java/org/apache/paimon/table/system/SnapshotsTable.java
@@ -51,6 +51,7 @@ import java.time.ZoneId;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -97,6 +98,11 @@ public class SnapshotsTable implements ReadonlyTable {
return TABLE_TYPE;
}
+ @Override
+ public List<String> primaryKeys() {
+ return Collections.singletonList("snapshot_id");
+ }
+
@Override
public InnerTableScan newScan() {
return new SnapshotsScan();
diff --git a/paimon-core/src/main/java/org/apache/paimon/utils/Restorable.java b/paimon-core/src/main/java/org/apache/paimon/utils/Restorable.java
index 4ca8b7637..7e820e326 100644
--- a/paimon-core/src/main/java/org/apache/paimon/utils/Restorable.java
+++ b/paimon-core/src/main/java/org/apache/paimon/utils/Restorable.java
@@ -18,12 +18,16 @@
package org.apache.paimon.utils;
+import org.apache.paimon.annotation.Public;
+
/**
* Operations implementing this interface can checkpoint and restore their states between different
* instances.
*
* @param <S> type of state
+ * @since 0.4.0
*/
+@Public
public interface Restorable<S> {
/** Extract state of the current operation instance. */
diff --git a/paimon-core/src/test/java/org/apache/paimon/table/ChangelogWithKeyFileStoreTableTest.java b/paimon-core/src/test/java/org/apache/paimon/table/ChangelogWithKeyFileStoreTableTest.java
index d1d8e72a9..fac1be471 100644
--- a/paimon-core/src/test/java/org/apache/paimon/table/ChangelogWithKeyFileStoreTableTest.java
+++ b/paimon-core/src/test/java/org/apache/paimon/table/ChangelogWithKeyFileStoreTableTest.java
@@ -504,7 +504,7 @@ public class ChangelogWithKeyFileStoreTableTest extends FileStoreTableTestBase {
@Test
public void testReadFilter() throws Exception {
FileStoreTable table = createFileStoreTable();
- if (table.options().fileFormat().getFormatIdentifier().equals("parquet")) {
+ if (table.coreOptions().fileFormat().getFormatIdentifier().equals("parquet")) {
// TODO support parquet reader filter push down
return;
}
diff --git a/paimon-core/src/test/java/org/apache/paimon/table/FileStoreTableTestBase.java b/paimon-core/src/test/java/org/apache/paimon/table/FileStoreTableTestBase.java
index ddd94224c..39da2b48d 100644
--- a/paimon-core/src/test/java/org/apache/paimon/table/FileStoreTableTestBase.java
+++ b/paimon-core/src/test/java/org/apache/paimon/table/FileStoreTableTestBase.java
@@ -253,7 +253,7 @@ public abstract class FileStoreTableTestBase {
@Test
public void testReadFilter() throws Exception {
FileStoreTable table = createFileStoreTable();
- if (table.options().fileFormat().getFormatIdentifier().equals("parquet")) {
+ if (table.coreOptions().fileFormat().getFormatIdentifier().equals("parquet")) {
// TODO support parquet reader filter push down
return;
}
@@ -387,7 +387,7 @@ public abstract class FileStoreTableTestBase {
SchemaManager schemaManager = new SchemaManager(table.fileIO(), table.location());
schemaManager.commitChanges(SchemaChange.addColumn("added", DataTypes.INT()));
table = table.copyWithLatestSchema();
- assertThat(table.options().snapshotNumRetainMax()).isEqualTo(100);
+ assertThat(table.coreOptions().snapshotNumRetainMax()).isEqualTo(100);
write = table.newWrite(commitUser);
write.write(new JoinedRow(rowData(1, 30, 300L), GenericRow.of(3000)));
diff --git a/paimon-core/src/test/java/org/apache/paimon/table/source/snapshot/CompactionChangelogFollowUpScannerTest.java b/paimon-core/src/test/java/org/apache/paimon/table/source/snapshot/CompactionChangelogFollowUpScannerTest.java
index 55014f2e2..43568f72e 100644
--- a/paimon-core/src/test/java/org/apache/paimon/table/source/snapshot/CompactionChangelogFollowUpScannerTest.java
+++ b/paimon-core/src/test/java/org/apache/paimon/table/source/snapshot/CompactionChangelogFollowUpScannerTest.java
@@ -64,7 +64,7 @@ public class CompactionChangelogFollowUpScannerTest extends ScannerTestBase {
assertThat(snapshotManager.latestSnapshotId()).isEqualTo(5);
- snapshotSplitReader.withLevelFilter(level -> level == table.options().numLevels() - 1);
+ snapshotSplitReader.withLevelFilter(level -> level == table.coreOptions().numLevels() - 1);
TableRead read = table.newRead();
CompactionChangelogFollowUpScanner scanner = new CompactionChangelogFollowUpScanner();
diff --git a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/FlinkSink.java b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/FlinkSink.java
index 0e12cbef5..d9565f9af 100644
--- a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/FlinkSink.java
+++ b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/FlinkSink.java
@@ -60,9 +60,9 @@ public abstract class FlinkSink<T> implements Serializable {
}
protected StoreSinkWrite.Provider createWriteProvider(String initialCommitUser) {
- if (!table.options().writeOnly()) {
- Options options = table.options().toConfiguration();
- switch (table.options().changelogProducer()) {
+ if (!table.coreOptions().writeOnly()) {
+ Options options = table.coreOptions().toConfiguration();
+ switch (table.coreOptions().changelogProducer()) {
case FULL_COMPACTION:
long fullCompactionThresholdMs =
options.get(CHANGELOG_PRODUCER_FULL_COMPACTION_TRIGGER_INTERVAL)
diff --git a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/FlinkSinkBuilder.java b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/FlinkSinkBuilder.java
index 4e7a8deb0..6a645d082 100644
--- a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/FlinkSinkBuilder.java
+++ b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/FlinkSinkBuilder.java
@@ -87,7 +87,7 @@ public class FlinkSinkBuilder {
BucketStreamPartitioner partitioner =
new BucketStreamPartitioner(
table.schema(),
- table.options()
+ table.coreOptions()
.toConfiguration()
.get(FlinkConnectorOptions.SINK_SHUFFLE_BY_PARTITION));
PartitionTransformation<RowData> partitioned =
diff --git a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/StoreCompactOperator.java b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/StoreCompactOperator.java
index 13fc24edc..89ab1e721 100644
--- a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/StoreCompactOperator.java
+++ b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/StoreCompactOperator.java
@@ -58,7 +58,7 @@ public class StoreCompactOperator extends PrepareCommitOperator<RowData> {
StoreSinkWrite.Provider storeSinkWriteProvider,
boolean isStreaming) {
Preconditions.checkArgument(
- !table.options().writeOnly(),
+ !table.coreOptions().writeOnly(),
CoreOptions.WRITE_ONLY.key() + " should not be true for StoreCompactOperator.");
this.table = table;
this.storeSinkWriteProvider = storeSinkWriteProvider;
diff --git a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/cdc/FlinkCdcSinkBuilder.java b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/cdc/FlinkCdcSinkBuilder.java
index 190deb464..43e940b3b 100644
--- a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/cdc/FlinkCdcSinkBuilder.java
+++ b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/cdc/FlinkCdcSinkBuilder.java
@@ -100,7 +100,7 @@ public class FlinkCdcSinkBuilder<T> {
CdcBucketStreamPartitioner partitioner =
new CdcBucketStreamPartitioner(
table.schema(),
- table.options()
+ table.coreOptions()
.toConfiguration()
.get(FlinkConnectorOptions.SINK_SHUFFLE_BY_PARTITION));
PartitionTransformation<CdcRecord> partitioned =
diff --git a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/cdc/SchemaAwareStoreWriteOperator.java b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/cdc/SchemaAwareStoreWriteOperator.java
index d529c7089..261a0f9dc 100644
--- a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/cdc/SchemaAwareStoreWriteOperator.java
+++ b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/sink/cdc/SchemaAwareStoreWriteOperator.java
@@ -58,7 +58,7 @@ public class SchemaAwareStoreWriteOperator extends AbstractStoreWriteOperator<Cd
@Nullable LogSinkFunction logSinkFunction,
StoreSinkWrite.Provider storeSinkWriteProvider) {
super(table, logSinkFunction, storeSinkWriteProvider);
- retrySleepMillis = table.options().toConfiguration().get(RETRY_SLEEP_TIME).toMillis();
+ retrySleepMillis = table.coreOptions().toConfiguration().get(RETRY_SLEEP_TIME).toMillis();
}
@Override
diff --git a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/source/ContinuousFileStoreSource.java b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/source/ContinuousFileStoreSource.java
index 45de25ee5..719477542 100644
--- a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/source/ContinuousFileStoreSource.java
+++ b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/source/ContinuousFileStoreSource.java
@@ -84,19 +84,19 @@ public class ContinuousFileStoreSource extends FlinkSource {
context,
splits,
nextSnapshotId,
- table.options().continuousDiscoveryInterval().toMillis(),
+ table.coreOptions().continuousDiscoveryInterval().toMillis(),
scanFactory.create(table, nextSnapshotId).withFilter(predicate)::plan);
}
@Override
public FileStoreSourceReader<?> createSourceReader(
SourceReaderContext context, TableRead read, @Nullable Long limit) {
- return table.options().toConfiguration().get(STREAMING_READ_ATOMIC)
+ return table.coreOptions().toConfiguration().get(STREAMING_READ_ATOMIC)
? new FileStoreSourceReader<>(RecordsFunction.forSingle(), context, read, limit)
: new FileStoreSourceReader<>(RecordsFunction.forIterate(), context, read, limit);
}
private boolean isBounded() {
- return table.options().scanBoundedWatermark() != null;
+ return table.coreOptions().scanBoundedWatermark() != null;
}
}
diff --git a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/source/DataTableSource.java b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/source/DataTableSource.java
index 65030d91e..121156dec 100644
--- a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/source/DataTableSource.java
+++ b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/source/DataTableSource.java
@@ -164,7 +164,7 @@ public class DataTableSource extends FlinkTableSource
}
WatermarkStrategy<RowData> watermarkStrategy = this.watermarkStrategy;
- Options options = table.options().toConfiguration();
+ Options options = table.coreOptions().toConfiguration();
if (watermarkStrategy != null) {
WatermarkEmitStrategy emitStrategy = options.get(SCAN_WATERMARK_EMIT_STRATEGY);
if (emitStrategy == WatermarkEmitStrategy.ON_EVENT) {
diff --git a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/source/StaticFileStoreSource.java b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/source/StaticFileStoreSource.java
index bef56959f..ae601717a 100644
--- a/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/source/StaticFileStoreSource.java
+++ b/paimon-flink/paimon-flink-common/src/main/java/org/apache/paimon/flink/source/StaticFileStoreSource.java
@@ -99,7 +99,7 @@ public class StaticFileStoreSource extends FlinkSource {
context,
snapshot,
splits,
- table.options()
+ table.coreOptions()
.toConfiguration()
.get(FlinkConnectorOptions.SCAN_SPLIT_ENUMERATOR_BATCH_SIZE));
}
diff --git a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/sink/FileStoreShuffleBucketTest.java b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/sink/FileStoreShuffleBucketTest.java
index e1d671964..a5e240c12 100644
--- a/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/sink/FileStoreShuffleBucketTest.java
+++ b/paimon-flink/paimon-flink-common/src/test/java/org/apache/paimon/flink/sink/FileStoreShuffleBucketTest.java
@@ -82,7 +82,7 @@ public class FileStoreShuffleBucketTest extends CatalogITCaseBase {
public void testShuffleByBucketPartition() throws Exception {
FileStoreTable originalTable =
FileStoreTableFactory.create(LocalFileIO.create(), getTableDirectory("T"));
- Map<String, String> dynamicOptions = originalTable.options().toMap();
+ Map<String, String> dynamicOptions = originalTable.coreOptions().toMap();
dynamicOptions.put(FlinkConnectorOptions.SINK_SHUFFLE_BY_PARTITION.key(), "true");
FileStoreTable table = originalTable.copy(dynamicOptions);
diff --git a/paimon-spark/paimon-spark-common/src/main/java/org/apache/paimon/spark/SparkTable.java b/paimon-spark/paimon-spark-common/src/main/java/org/apache/paimon/spark/SparkTable.java
index c462eb56d..eef1b5c0d 100644
--- a/paimon-spark/paimon-spark-common/src/main/java/org/apache/paimon/spark/SparkTable.java
+++ b/paimon-spark/paimon-spark-common/src/main/java/org/apache/paimon/spark/SparkTable.java
@@ -21,7 +21,6 @@ package org.apache.paimon.spark;
import org.apache.paimon.operation.Lock;
import org.apache.paimon.predicate.Predicate;
import org.apache.paimon.table.DataTable;
-import org.apache.paimon.table.SupportsPartition;
import org.apache.paimon.table.Table;
import org.apache.paimon.table.TableUtils;
@@ -87,14 +86,10 @@ public class SparkTable
@Override
public Transform[] partitioning() {
- if (table instanceof SupportsPartition) {
- return ((SupportsPartition) table)
- .partitionKeys().stream()
- .map(FieldReference::apply)
- .map(IdentityTransform::apply)
- .toArray(Transform[]::new);
- }
- return new Transform[0];
+ return table.partitionKeys().stream()
+ .map(FieldReference::apply)
+ .map(IdentityTransform::apply)
+ .toArray(Transform[]::new);
}
@Override
@@ -120,7 +115,7 @@ public class SparkTable
@Override
public Map<String, String> properties() {
if (table instanceof DataTable) {
- return ((DataTable) table).options().toMap();
+ return ((DataTable) table).coreOptions().toMap();
} else {
return Collections.emptyMap();
}