You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[rust/python] Writing to datalake-enabled Iceberg tables fails: "KeyEncoder for Iceberg format is not yet implemented" #3818
I searched in the issues and found nothing similar.
Fluss version
0.9.1-incubating (server), pyfluss 0.1.0 (client). The gap is still present on current main.
Please describe the bug 🐞
Any write to a primary-key table with table.datalake.enabled = 'true' and Iceberg as the
cluster's datalake format fails from the Python client (pyfluss, backed by fluss-rust)
with:
KeyEncoder for Iceberg format is not yet implemented
The same write against the same table succeeds with the Java client / Flink connector, so
the table itself is fine — the limitation is client-side.
Root cause: in fluss-rust/crates/fluss/src/row/encode/mod.rs, the key-encoder factory
implements Paimon and Lance but explicitly rejects Iceberg:
match data_lake_format {Some(DataLakeFormat::Paimon) => {Ok(Box::new(PaimonKeyEncoder::new(row_type, key_fields)?))}Some(DataLakeFormat::Lance) => Ok(Box::new(CompactedKeyEncoder::create_key_encoder(
row_type, key_fields,)?)),Some(DataLakeFormat::Iceberg) => Err(Error::UnsupportedOperation{message:"KeyEncoder for Iceberg format is not yet implemented".to_string(),}),None => Ok(Box::new(CompactedKeyEncoder::create_key_encoder(
row_type, key_fields,)?)),}
The Java client encodes keys for Iceberg-enabled tables (bucket-id computation compatible
with Iceberg's bucket transform), so the Rust client needs the equivalent encoder to reach
parity.
Impact
This blocks Python-based pipelines (e.g. CDC ingestion via pyfluss) from writing to any
datalake-enabled table on Iceberg clusters — the datalake feature and the Python client are
mutually exclusive today. Reported by a production user running Fluss 0.9.1-incubating with
pyfluss 0.1.0.
Steps to reproduce
Run a Fluss cluster with datalake.format: iceberg.
Create a primary-key table with 'table.datalake.enabled' = 'true'.
From Python: connect with pyfluss 0.1.0 and attempt any upsert into the table.
The write fails with UnsupportedOperation: KeyEncoder for Iceberg format is not yet implemented.
Expected behavior
The Rust/Python client can write to Iceberg datalake-enabled tables, matching the Java
client's behavior — i.e. an Iceberg-compatible KeyEncoder implementation in fluss-rust/crates/fluss/src/row/encode/.
Yes, I also noticed the same when playing with python recently as it is not yet implemented, i recall there was a PR in old repo, will take a look, and if stale, I can quickly create a new PR to add this if you don't plan to contribute.
Activity
charlesdong1991 commentedon Aug 2, 2026
Yes, I also noticed the same when playing with python recently as it is not yet implemented, i recall there was a PR in old repo, will take a look, and if stale, I can quickly create a new PR to add this if you don't plan to contribute.
charlesdong1991 commentedon Aug 2, 2026
are you planning to give it another push on apache/fluss-rust#308? @zuston
if not, i am happy to continue your work there and push it through, since it can help unblock further work with iceberg on rust binding side
zuston commentedon Aug 3, 2026
Oh. Yes, I have implemented this features in our internal forked version, let me submit the PR into the fluss main repo