Repository navigation
Description
Background
Apache Doris already supports reading Apache Paimon tables through External Catalog. To complete the read/write experience for lakehouse workloads, we are adding support for writing data from Doris into Paimon tables, so users can write query results and computed data into Paimon tables using standard Doris SQL.
This issue tracks the feature requirements and implementation plan for Paimon write support.
Goals
- Support
INSERT INTOfor Paimon tables. - Support
INSERT OVERWRITEfor Paimon tables. - Support append-only tables and primary-key tables.
- Support partitioned, fixed bucket, and unaware bucket tables.
- Support primitive types and complex types (ARRAY, MAP, STRUCT).
- Align Doris transaction semantics with Paimon commit and abort.
- Preserve correctness for failure, retry, and rollback scenarios.
Current Status
Core Paimon JNI write support and the main merged follow-up work are implemented on branch-4.1:
- branch-4.1: [feature](paimon) Support table writes via JNI and schema evolution #65868: core JNI write path and schema evolution.
- [test](paimon) Add P0 write correctness and snapshot reference coverage #66325: P0 write correctness and snapshot-reference coverage.
- branch-4.1: [feature](paimon) Support row-level UPDATE, DELETE, and MERGE #66498: row-level
UPDATE,DELETE, andMERGE. - branch-4.1: [feature](external) support partition- and bucket-aware concurrent writes #66685: partition- and bucket-aware concurrent writes for supported routing modes.
- branch-4.1: [fix](paimon) Keep write cache coherent and extend coverage #67023: write-cache coherence fixes and extended regression coverage.
Status legend:
- ✅ Implemented
- 🚧 Partially implemented; remaining modes are follow-up work
- ➡️ Follow-up work
Feature Checklist
Write Path & DML
| Feature | Status |
|---|---|
INSERT INTO ... SELECT ... |
✅ |
INSERT INTO ... VALUES ... |
✅ |
Non-partitioned INSERT OVERWRITE |
✅ |
| Static partition overwrite | ✅ |
| Partial static partition overwrite | ✅ |
| Dynamic partition overwrite | ✅ |
| Empty-input overwrite | ✅ |
Row-level UPDATE / DELETE / MERGE SQL |
✅ |
Table Types & Write Semantics
| Feature | Status |
|---|---|
| Append-only tables | ✅ |
| Primary-key full-row writes | ✅ |
| Deduplicate merge engine | ✅ |
| Partial-update merge engine | ✅ |
| Aggregation merge engine | ✅ |
| First-row merge engine | ✅ |
| Omitted-column schema defaults | ✅ |
Partitioning & Bucketing
| Feature | Status |
|---|---|
| Non-partitioned tables | ✅ |
| Partitioned tables | ✅ |
| Fixed bucket | ✅ |
| Unaware bucket | ✅ |
| Postpone bucket | ✅ |
| Hash dynamic bucket | ✅ |
| Key dynamic bucket | ✅ |
| Bucket-aware parallel distribution | 🚧 |
Fixed-bucket tables now use Paimon-compatible (partition, bucket) routing so each bucket has one stable writer within a write job. Bucket-unaware tables retain concurrent random distribution. Hash-dynamic, key-dynamic, custom bucket functions, and unsupported partition or bucket key types continue to use the correctness-first single-writer fallback.
Data Types
| Feature | Status |
|---|---|
| Primitive types | ✅ |
| DECIMAL, DATE, TIMESTAMP | ✅ |
| ARRAY, MAP, STRUCT | ✅ |
| Nested NULL handling | ✅ |
Commit & Transaction
| Feature | Status |
|---|---|
| FE-coordinated atomic commit | ✅ |
| Multiple-writer commit aggregation | ✅ |
| Commit idempotency and reconciliation | ✅ |
| Abort and rollback cleanup | ✅ |
| Commit-message deduplication | ✅ |
| Empty overwrite commit | ✅ |
Write Backend
| Feature | Status |
|---|---|
| Java SDK backend through JNI | ✅ |
| Rust SDK backend through FFI | ➡️ Follow-up PR |
Changelog & Compaction
| Feature | Status |
|---|---|
| Changelog producer: None | ✅ |
| Changelog producer: Input | ✅ |
| Changelog producer: Lookup | ✅ |
| Changelog producer: FullCompaction | ✅ |
| Automatic write-time compaction correctness | ✅ |
Catalog & Storage
| Feature | Status |
|---|---|
| Filesystem catalog | ✅ |
| HDFS | ✅ |
| Object storage | ✅ |
| HMS catalog suite | ✅ |
| REST catalog suite | ✅ |
The HMS and REST catalog write suites have been added under external_table_p2.
Schema & DDL
| Feature | Status |
|---|---|
| Paimon CREATE TABLE | ✅ |
| CREATE properties and write integration | ✅ |
| ADD/DROP/RENAME/MODIFY COLUMN | ✅ |
| Column reorder | ✅ |
| Schema-change and write integration | ✅ |
| Latest remote-schema projection | ✅ |
| Typed partition metadata | ✅ |
Remaining Follow-up Work
- Bucket-aware parallel routing for hash-dynamic, key-dynamic, custom bucket functions, and currently unsupported key types.
- Rust FFI write backend.
- Paimon Branch/Tag lifecycle and branch writes: [Feature](paimon) Support Branch/Tag lifecycle and branch writes #67336
- Paimon maintenance procedures and actions: [Feature](catalog) Support Paimon maintenance procedures and actions #67337
Activity
[test](paimon) Add Paimon write unit coverage
[test](paimon) Add Paimon write unit coverage
[test](paimon) Add Paimon write unit coverage
[-]Support writing to Apache Paimon tables[/-][+]Tracking: Paimon table write support[/+][refactor](paimon) Enforce writer lifecycle invariants
[refactor](paimon) Enforce writer lifecycle invariants
[refactor](paimon) Clarify SDK writer boundary and extend coverage
[doc](paimon) Clarify JNI write architecture
branch-4.1: [feature](paimon) Support table writes via JNI and schema…
suxiaogang223 commentedon Jul 31, 2026
Variant V2 write support is tracked in #66321. It covers lossless value/metadata transport, nested Variant values, V2-only analysis checks, and Paimon Parquet shredding/unshredding regression coverage.
suxiaogang223 commentedon Aug 6, 2026
upgrade paimon 1.4.2 to support variant write #66346
282 remaining items
[fix](fe) Fix short-circuit test import order
[fix](fe) Enforce connector changelog write contracts
[refactor](fe) Infer connector DELETE deduplication from plan
[feature](external) Add generic connector write framework prerequisit…
[chore](paimon) Upgrade Paimon to 1.4.2
[feature](paimon) Add Paimon table write runtime
[feature](paimon) Route Paimon writes by native bucket semantics
[feature](paimon) Add connector transaction and write planning
[improvement](paimon) Read Variant through Paimon JNI
[fix](paimon) Keep write table cache coherent
[test](paimon) Forward-port table write coverage
[fix](be) Align Paimon partitioners with master compile checks
[fix](paimon) Fix table options test compilation
[fix](paimon) Adapt Paimon writes to current master APIs
[fix](build) Accept bundled Paimon dependency licenses