Repository navigation
Apache Paimon Rust 0.5.0 is the source release approved from RC2, at commit bb6389a8b430e897e038ff7395b6a7763d785a7a.
Source release
Source archive, signature and SHA-512 checksum · KEYS
The attached source archive, signature and checksum are the exact artifacts approved in the release vote.
Highlights
- Append, primary-key and data-evolution table compaction, including lookup changelog production and incremental primary-key compaction.
- Prepared and captured mutation plans, native MERGE execution, distributed dynamic-bucket input execution, and expanded Arrow row-ID inputs for updates and deletes.
- Native batch and streaming read improvements, REST query authorization filters and masks, catalog branch and version management, and external table engine time travel.
- DataFusion 55.2 integration with expanded SQL functions, JSON operations, lateral collection generators, table and column comments, and tag, branch and consumer procedures.
- Built-in full-text search, BTree-accelerated upsert key lookups, declared global-index maintenance, and scheduled snapshot-scoped hybrid search execution.
- Broader Java-compatible schema evolution, nested Parquet projection, temporal and decimal casts, VARIANT and ROW reads, and manifest codec support.
- Optional node-shared disk block caching, cached Parquet metadata, coalesced local-cache misses, and reuse of data-file, BTree and ROW sidecar metadata.
- Expanded C commit-message transport and schema APIs, Python streaming SQL results, temporal matching kernels and compaction APIs.
Compatibility notes
- The minimum supported Rust version is 1.95.0. This release uses DataFusion 55.2.0, Arrow 59.3.2 and Parquet 59.3.2 in its lockfile.
- Lumina vector-index support has been removed. Use vindex DiskANN through
create_global_indexwithindex_type => 'diskann', and rebuild existing Lumina indexes in the vindex format. - Full-text search is now built in. Remove the former
fulltextCargo feature from downstream dependency feature lists. - Prebuilt Go Linux amd64 libraries require glibc 2.38 or newer, OpenSSL 3, and
libffi.so.8; see the Go prerequisites.
Changes since 0.4.0
- feat(blob): support custom URI readers in native writes (#1065)
- feat(table): add prepared MERGE operations to core updates (#1068)
- Support Paimon table sources in prepared MERGE (#1071)
- chore: bump version to 0.5.0 (#1073)
- feat(auth): apply query-auth row filters on read (#513)
- feat(datafusion): support tag retention in create_tag (#1066)
- feat(table): honor numeric incremental timestamp scan options (#1074)
- [core] Extract shredded Variant fields from typed columns without row-wise decoding (#1069)
- feat(core): add stateful StreamTableScan for Native streaming reads (#1075)
- feat(index): support dry run when dropping global indexes (#1078)
- [core] Reuse supplied REST data token during native table initialization (#1076)
- [core] Align Parquet writer row group and page sizing options with Java (#1072)
- fix(table): validate partial-update delete config and mixed batches (#957)
- feat(core): align batch changelog planning and row-kind normalization (#1079)
- feat(core): support sparse raw Blob column updates (#1081)
- feat(core): support scoped Blob sources in table writes and updates (#1082)
- python: expose SQL execution options (#1084)
- feat(core): support Java scalar partition values in native table IO (#1083)
- fix(core): preserve REST Blob view dependency context (#1085)
- feat: plan source-backed primary-key sorted indexes (#1086)
- feat(python): expose core vector search and scored results (#1087)
- [core] Skip shredded Variant residuals that statistics prove null (#1080)
- feat(auth): apply query-auth masks to non-BLOB columns (#1077)
- feat(python): expose prepared sorted global index builds (#1088)
- fix: repair native vector writes and data evolution read ranges (#1090)
- feat(auth): support query-auth BLOB column masking (#1089)
- Unify global index construction behind a common table builder (#1091)
- Support sparse vindex builds with Java-compatible training semantics (#1093)
- [Core] Honor parallelism in generic global index builds (#1094)
- [Core] Add snapshot-pinned full-text search with scalar filters (#1095)
- fix: preserve Java empty string predicates for search refinement (#1096)
- feat(core): complete native local hybrid search (#1097)
- [Core] Preserve captured snapshot metadata and empty read views (#1098)
- feat: support native shard column updates in core (#1099)
- feat: enable DV merge engine and postpone fixed bucket writes (#1101)
- [core] Align numeric narrowing and timestamp schema evolution with Java (#1102)
- [Core] Support caller snapshot properties in native commits (#1104)
- [Core] Add predicate deletes to TableUpdate (#1105)
- [core] Align BIGINT and timestamp schema evolution with Java (#1107)
- feat(datafusion): route metadata tables to registered table engines (#1100)
- feat(python): support streaming SQL results (#1103)
- [core] Add confirmed snapshot commit callbacks (#1108)
- [docs] Publish 0.4.0 release notes and Go Linux requirements (#1114)
- format_table: fix partition extraction for reordered columns (#1111)
- [core] Accept canonical REST identifier casing (#1110)
- fix(auth): stop BLOB view predicate lookups at LIMIT under query-auth (#1092)
- fix: support REST branches with distinct identities (#1109)
- Align temporal string schema evolution with Java (#1115)
- Align local-zone temporal schema evolution with Java (#1117)
- feat(datafusion): support ALTER TABLE SET options (#1120)
- Align decimal schema evolution with Java (#1118)
- feat(datafusion): support snapshot time travel for external engines (#1113)
- [io] Propagate User-Agent options to Jindo OSS (#1116)
- [read] Support Java-compatible REST query authorization masks (#1122)
- [read] Support Java calendar query authorization masks (#1123)
- feat(datafusion): support timestamp time travel for external engines (#1121)
- [read] Support transformed REST query authorization filters (#1124)
- [read] Complete Java scalar REST authorization casts (#1125)
- Complete Java-compatible schema evolution for native reads (#1128)
- Support explicit partition selectors in native table scans (#1129)
- feat(index): support partition-scoped global index drops (#1106)
- fix(datafusion): resolve temporary objects first in SHOW CREATE TABLE (#1126)
- Support REST authorized stream and combined incremental reads (#1130)
- Support primary-key full-text results through scan and read (#1132)
- Support supplied global-index results in batch scans (#1133)
- Complete native global-index lifecycle and search planning (#1136)
- fix: reject overlapping partial-update sequence groups (#1127)
- fix(io): delete only the named directory in FileIO::delete_dir (#1135)
- feat(datafusion): support SHOW CREATE TABLE for external engines (#1131)
- feat(datafusion): support the delete_branch procedure (#941)
- feat(core): add SystemRead for Native metadata reads (#1137)
- [core] Support filesystem partitions in SystemRead (#1138)
- [core] Improve fixed-bucket pruning and expose scan statistics (#1140)
- [core] Support REST catalog branch management (#1141)
- [core] Support REST catalog version management (#1142)
- [core] Normalize Arrow layouts for upserts and data evolution updates (#1144)
- [core] Support logical Arrow keys and selected upsert values (#1147)
- [core] Extend Arrow input support for row-level updates (#1149)
- [core] Preserve decimal predicates and equivalent Arrow match keys (#1150)
- [core] Fix VARIANT timestamp projection and scalar conversions (#1151)
- [core] Support additional Arrow inputs in row-level updates (#1152)
- Support nested ROW predicates in native table reads (#1153)
- [core] Build deletion-vector row ranges from roaring runs (#1148)
- fix(core): preserve partial-update deletion state (#1139)
- feat(datafusion): support create_tag_from_watermark (#1134)
- Expand native table sources and nullable primary-key writes (#1155)
- Complete authorized native read views and writer file planning (#1157)
- Complete native FUSE writes, postpone planning and MERGE callbacks (#1165)
- Support REST writes on query-authorized tables (#1168)
- Expand native mutation inputs and partial-write support (#1169)
- Complete manifest codec support and typed partition specs (#1170)
- Fix primary-key ROW layout for Variant tables (#1171)
- [core] Read s3.session-token with the same precedence as the access key (#1156)
- [core] Reuse the key buffer and row list across sort-merge keys (#1162)
- perf(variant): Fix slow shredded residual reads (#1166)
- feat(datafusion): support reset_consumer (#1167)
- [core] Read sparse bitmap matches from data evolution ROW sidecars (#1173)
- [core] Align write validation and file metadata with Java (#1172)
- [core] Align delete and update nullability with Java (#1179)
- [ci] Remove unused ROW Variant fixture README (#1181)
- Support append row kinds and historical row updates (#1180)
- [core] Complete historical write, update and reader predicate parity with Java (#1182)
- [core] Add bounded parallel table read execution (#1183)
- feat(core): support structured-data local cache selection (#972)
- feat(core): protect local metadata and global index cache blocks (#1184)
- [core] Add opt-in node-shared disk block cache (#1175)
- [core] Support copying stream scan state in Python bindings (#1187)
- [core] Reduce shared disk cache lock contention (#1186)
- [core] Support scheduled execution of snapshot-scoped search plans (#1191)
- build: update TLS dependencies for RustSec advisories (#1194)
- [core] Preserve append writer configuration per bucket across prepares (#1188)
- [core] Downcast sequence and kind columns once per merge batch (#1193)
- [core] Compare FLOAT/DOUBLE partition values like Java (#1190)
- feat(core): support full-text prefilters on non-DE append tables (#1176)
- [core] Support authorized raw file planning for native scans (#1197)
- [core] Use BTree indexes for upsert key lookups (#1198)
- [core] Expose postpone bucket plans through the write builder (#1200)
- [core] Add captured mutation and index build plans with structured row-id conflicts (#1202)
- [core] Share MERGE action evaluation for distributed execution (#1203)
- [python] Use typed MERGE clauses and named execution factories (#1204)
- [core] Expose phased hybrid search and pure score fusion (#1206)
- [core] Add schema-based bucket routing and postpone input planning (#1207)
- Support distributed dynamic bucket input execution (#1208)
- Support captured row ID routing and read selection (#1209)
- Support Arrow row ID inputs for deletion (#1210)
- fix(table): move BinaryRow import into upsert tests (#1201)
- Update locked ctutils and Tokio security patches (#1212)
- Fix partition field mapping for vector search source plans (#1211)
- perf(core): cache ROW sidecar size and reader metadata (#1196)
- feat(datafusion): support clear_consumers (#1213)
- fix(datafusion): preserve MERGE clause fallthrough for NULL predicates (#1220)
- [core] Coalesce consecutive local cache misses (#1218)
- [datafusion] Expose procedure execution for external integrations (#1217)
- feat(datafusion): support replace_tag (#1214)
- fix(ci): update zstd dependencies for security checks (#1229)
- perf: skip source stat for complete shared-cache small files (#1228)
- perf: reuse known BTree file sizes when opening cached readers (#1227)
- [core] Support configurable sort order for partial-update sequence groups (#1226)
- feat: share parsed Parquet metadata across read contexts (#1223)
- fix(storage): retry temporary S3 failures (#1222)
- fix: prevent concurrent snapshot overwrites (#1231)
- [core] Remove Lumina vector index support (#1233)
- test: replace Spark provisioning with golden fixtures (#1234)
- feat: make full-text search a built-in capability (#1232)
- perf: reuse known sizes when opening data file readers (#1235)
- chore: raise minimum supported Rust version to 1.95 (#1237)
- ci: run Python binding Rust unit tests (#1241)
- perf: stream and spill scalar global-index sorting (#1244)
- fix(read): honor read.batch-size for primary-key sort-merge output (#1239)
- perf: certify full-text Top-K and reuse write buffer settings (#1245)
- fix(table): create branches from tags with expired snapshots (#1221)
- feat(table): add append and primary-key compaction APIs (#1247)
- feat(parquet): project nested map value fields (#1246)
- feat(read): complete nested projection pushdown for Parquet (#1248)
- feat(table): support data evolution compaction (#1249)
- feat(table): support lookup changelog production (#1252)
- feat(python): add batch temporal matching kernels (#1238)
- feat(table): support incremental deduplicate compaction (#1253)
- feat(datafusion): add create_branch SQL procedure (#1250)
- feat(table): cache lookup history for incremental compaction (#1254)
- feat(table): compact primary-key tables with deletion vectors (#1255)
- feat(table): extend incremental primary-key compaction (#1256)
- feat(table): compact after writes when write-only=false (#1259)
- fix(schema): list persisted schemas independently of catalog cache (#1260)
- feat(table): maintain declared global indexes after writes (#1261)
- fix(datafusion): preserve MERGE predicate grouping across clauses (#1263)
- feat(c): support cross-process commit messages (#1257)
- feat(table): unify index options and maintain PK/global indexes (#1264)
- fix(datafusion): preserve string literals when rewriting MERGE references (#1266)
- fix(table): align native vector index configuration semantics (#1270)
- fix(rest): retry GET connection failures with bounded backoff (#1272)
- feat(datafusion): add JSON text extraction and formatting functions (#1279)
- fix(datafusion): resolve registered functions before REST lookup (#1277)
- feat(datafusion): support scoped and filtered metadata listings (#1278)
- feat(datafusion): add common SQL compatibility functions (#1280)
- build(deps): bump astral-sh/setup-uv from 10.0.1 to 10.3.3 (#1295)
- build(deps): bump pypa/gh-action-pypi-publish from 1.14.2 to 1.14.3 (#1294)
- build(deps): bump taiki-e/install-action from 2.87.1 to 2.88.0 (#1293)
- feat(datafusion): support table and column comment DDL (#1287)
- feat(datafusion): evaluate immutable constant CALL arguments (#1290)
- feat(datafusion): add common scalar compatibility functions (#1291)
- feat(datafusion): support binary casts and byte widths (#1288)
- feat(datafusion): support RLIKE and REGEXP operators (#1289)
- feat(datafusion): support lateral collection generators (#1292)
- build(deps): bump crossbeam-channel from 0.5.16 to 0.5.17 (#1296)
- build(deps): bump twox-hash from 2.1.3 to 2.1.5 (#1300)
- build(deps): bump lz4_flex from 0.13.1 to 0.14.0 (#1297)
- build(deps): bump opendal-layer-retry from 0.58.2 to 0.59.5 (#1298)
- feat(datafusion): extend aggregate, JSON and SQL dialect compatibility (#1304)
- feat(datafusion): integrate upstream Spark-compatible functions (#1308)
- feat(datafusion): support CALL sys.compact procedure (#1312)
- feat(datafusion): support binary lengths, slices and split_index (#1311)
- [datafusion] Upgrade to DataFusion 55.2.0 (#1236)
- feat(core): support startup modes in StreamTableScan (#1313)
- [datafusion] Expose range partitioning for table partition keys (#1314)
- [core] Preserve zero-width binary rows in upsert selection (#1317)
- [datafusion] Execute MERGE INTO through the native planner (#1315)
- feat(rest): support server-resolved warehouses (#1305)
- fix(table): move rows to their new bucket when UPDATE changes the bucket key (#1319)
- feat(c): export a pinned table's Arrow schema (#1331)
- feat(c): add bounded commit-message range export (#1330)
- fix(datafusion): reject UPDATE and DELETE on temporary targets (#1325)
- feat(python): expose table compaction through new_compact_builder (#1323)
- [core] Read single-run primary-key sections without sort merge (#1164)
- fix(datafusion): preserve quoted names in temporary views (#1333)
- feat(c): expose TableWrite close for explicit cleanup (#1306)
- [Bug] DROP TABLE deletes the wrong table when targets span multiple catalogs (#1339)
- [Build] Upgrade paimon-full-text to 0.2.0 (#1344)
- fix(datafusion): reject TRUNCATE on temporary targets (#1335)
- feat(datafusion): support branch procedures on REST catalog tables (#1346)
- fix: replace persisted video keyframe indexes with MP4 metadata (#1347)
- fix(datafusion): preserve quoted table names in time-travel queries (#1360)
- perf(core): index nested-key rows by their serialized BinaryRow key (#1354)
- perf(core): keep rbm64 bitset containers as words through unions (#1350)
- [core] Keep the winning cell by reference in pick-value aggregators (#1338)
- fix(write): flush retained input before dictionary encoding exhausts its budget (#1329)
Full changelog: v0.4.0...v0.5.0