From a38f5b5a2c9fa34a7594d1bd5d156113d5ef5827 Mon Sep 17 00:00:00 2001 From: Walter Date: Sat, 21 Mar 2026 11:18:15 +0800 Subject: [PATCH] Release 4.15.0 --- docs/connectors/warehouses-and-lake/paimon.md | 34 +++++++++++++++++- docs/images/paimon_node_advanced_settings.png | Bin 0 -> 36494 bytes docs/release-notes-on-prem.md | 30 ++++++++++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 docs/images/paimon_node_advanced_settings.png diff --git a/docs/connectors/warehouses-and-lake/paimon.md b/docs/connectors/warehouses-and-lake/paimon.md index 2c8f33af..0a2566d2 100644 --- a/docs/connectors/warehouses-and-lake/paimon.md +++ b/docs/connectors/warehouses-and-lake/paimon.md @@ -103,4 +103,36 @@ Add a [Type Modification Processor](../../data-transformation/process-node.md#ty If the test fails, follow the on-screen hints to fix the issue. - ::: \ No newline at end of file + ::: + + + +## Advanced Node Features + +When Paimon is used as the target node in a data replication or transformation task, you can further configure table creation and write-related settings in the node's advanced settings to better balance write performance, table layout, and storage cost. + + +![Paimon Node Advanced Settings](../../images/paimon_node_advanced_settings.png) + + +:::tip + +The table creation settings below mainly take effect when the target table does not exist and is created automatically by Tapdata. If the target table already exists, Tapdata keeps the existing table schema and table options instead of overwriting them. + +::: + +| Configuration | Description | +| --- | --- | +| **Hash Key** | When enabled, if there are many primary key or update-condition fields, Tapdata automatically adds an `_hash_key` field to the Paimon table and uses it as the primary key to reduce write overhead in wide-key scenarios. Enable it only when many key fields are affecting write performance. | +| **Partition Key** | Specifies the partition fields for the target table. Leaving it empty means partitioning is disabled. It is recommended for large tables or scenarios where data needs to be organized by date or business dimension. | +| **Bucket Mode** | Supports **Dynamic** and **Fixed** modes. Dynamic mode is suitable for general scenarios and lets the system assign buckets automatically. Fixed mode usually provides more stable write performance, but it should be used together with **Bucket Count**. | +| **Bucket Count** | Takes effect only when **Bucket Mode** is set to **Fixed**. It defines the number of buckets, with a default value of **4**. Set it based on data volume, write concurrency, and small-file control requirements. | +| **File Format** | Specifies the underlying file format used when the table is created. Supported formats include ORC, Parquet, Avro, CSV, JSON, Lance, and Blob. Choose the format based on query engine compatibility, compression ratio, and read/write performance requirements. | +| **Compression Format** | Specifies the compression format for data files. Supported options include None, Snappy, LZ4, ZSTD, GZIP, and BZIP2. This setting usually involves a trade-off between compression ratio, CPU usage, and read/write performance. | +| **Table Properties** | Lets you append Paimon table properties in key-value form for finer-grained control over table behavior. This is useful when you need to customize table creation parameters further. | +| **Write Buffer Size (MB)** | Controls the in-memory buffer size used for writes. The default value is **256 MB**. Increasing it can improve throughput, but it also increases memory consumption. | +| **Write Threads** | Controls the number of parallel write threads. The default value is **4**. Increasing it can improve write concurrency when enough resources are available, but it also increases resource usage. | +| **Enable Auto Compaction** | Controls whether automatic compaction is enabled. When enabled, it helps reduce small files and improve query performance. When disabled, it reduces compaction overhead but may result in more small files. | +| **Compaction Interval (minutes)** | Takes effect after **Enable Auto Compaction** is enabled. It controls how often automatic compaction runs, with a default value of **30** minutes. | +| **Target File Size (MB)** | Controls the target size of data files. The default value is **128 MB**. Increasing it can help reduce the number of small files, but it also increases the processing cost of each individual file. | +| **Enable Primary Key Update Detection** | When enabled, if a primary key value changes, Tapdata converts the update into a delete of the old record followed by an insert of the new record. This feature requires the source to provide before-update data. If that data is unavailable, the task will fail, and enabling this feature will reduce update performance. | diff --git a/docs/images/paimon_node_advanced_settings.png b/docs/images/paimon_node_advanced_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..e2638bf13e9741d747da335fe16e333f31fe7ca0 GIT binary patch literal 36494 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 z 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 KMNUMnLSTaT?Ft?M literal 0 HcmV?d00001 diff --git a/docs/release-notes-on-prem.md b/docs/release-notes-on-prem.md index 9db376c0..b6179066 100644 --- a/docs/release-notes-on-prem.md +++ b/docs/release-notes-on-prem.md @@ -14,6 +14,36 @@ import TabItem from '@theme/TabItem'; ``` +## 4.15.0 + +### New Features + +- The [Paimon connector](./connectors/warehouses-and-lake/paimon.md#advanced-node-features) now supports per-table partitioning configuration, allowing customization of partition keys, buckets, compression formats, and other attributes to improve data management flexibility. + +### Enhancements + +- Significantly improved the data writing performance of the Paimon connector under multiple update conditions. +- The StarRocks connector now adapts to High Availability (HA) architectures, ensuring continuous and stable data writing. +- Added WSS protocol support for the communication port (8246) between the engine and the management node, enhancing communication security. + +### Bug Fixes + +- Fixed an issue where AVRO formatted data with Debezium structure in Kafka could not be parsed correctly. +- Fixed an issue where the MariaDB to Doris synchronization task failed during the CDC phase after the full sync was completed. +- Fixed a synchronization failure in MySQL tasks caused by a field rename processor exception. +- Fixed a task execution error caused by `BSONRegExp` type data when syncing from MongoDB to MySQL. +- Fixed an issue where PostgreSQL CDC tasks could not be recovered after an engine restart due to cleaned-up WAL logs. +- Fixed a task error when enabling the full breakpoint resume function for TDSQL. +- Fixed an issue where the API Server audit log still contained exception information when the request was successful (Code 200). +- Fixed an issue where duplicate name validation was missing when creating an API. +- Fixed an issue where published API interfaces could not correctly handle parameter filtering. +- Fixed a failure when publishing an API based on MySQL. +- Fixed an issue where the generated API could not query data by primary key after the `_id` field was deleted in the synchronization task. +- Fixed a task startup failure when using MongoDB 8.0 as intermediate storage. +- Fixed a performance degradation in full data batch writing after enabling multi-table concurrent reading. +- Fixed a false alarm stating the tag did not exist when starting a task after modifying the connection's engine tag. +- Fixed the loss of query filter status when returning to the list page from the edit page on the connection management page. +- Fixed an issue where scheduled validation tasks abnormally triggered secondary validations in a loop. ## 4.14.0