This is an automated email from the ASF dual-hosted git repository.

yihua pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/hudi.git


The following commit(s) were added to refs/heads/asf-site by this push:
     new dc7a2e5ad39d docs: improve the writing of the hudi-rs quick start and 
release post (#20511)
dc7a2e5ad39d is described below

commit dc7a2e5ad39dd5ea589e7ed6b1d05a04ec6ce1da
Author: Y Ethan Guo <[email protected]>
AuthorDate: Tue Nov 3 13:55:25 2026 -0800

    docs: improve the writing of the hudi-rs quick start and release post 
(#20511)
---
 ...-11-03-apache-hudi-rs-0-6-0-release-announcement.mdx |  4 ++--
 website/docs/python-rust-quick-start-guide.md           | 17 +++++++++++------
 .../version-1.2.0/python-rust-quick-start-guide.md      | 17 +++++++++++------
 .../version-1.2.1/python-rust-quick-start-guide.md      | 17 +++++++++++------
 4 files changed, 35 insertions(+), 20 deletions(-)

diff --git 
a/website/blog/2026-11-03-apache-hudi-rs-0-6-0-release-announcement.mdx 
b/website/blog/2026-11-03-apache-hudi-rs-0-6-0-release-announcement.mdx
index cbb2bee7ff6b..3ccde5f174c3 100644
--- a/website/blog/2026-11-03-apache-hudi-rs-0-6-0-release-announcement.mdx
+++ b/website/blog/2026-11-03-apache-hudi-rs-0-6-0-release-announcement.mdx
@@ -14,7 +14,7 @@ tags:
 - record level index
 ---
 
-The Apache Hudi community is excited to announce the release of [hudi-rs 
0.6.0](https://github.com/apache/hudi-rs/releases/tag/release-0.6.0), the 
native Rust implementation of [Apache Hudi](/) with 
[Python](https://pypi.org/project/hudi/0.6.0/) and 
[C++](https://github.com/apache/hudi-rs/tree/release-0.6.0/cpp) bindings. Until 
now, hudi-rs has been a reader: a fast, JVM-free way to query Hudi tables from 
Rust, Python, 
[DataFusion](https://github.com/apache/hudi-rs/blob/release-0.6.0/REA [...]
+The Apache Hudi community is excited to announce the release of [hudi-rs 
0.6.0](https://github.com/apache/hudi-rs/releases/tag/release-0.6.0), the 
native Rust implementation of [Apache Hudi](/) with 
[Python](https://pypi.org/project/hudi/0.6.0/) and 
[C++](https://github.com/apache/hudi-rs/tree/release-0.6.0/cpp) bindings. Hudi 
is the open lakehouse platform that brings indexing, upserts and incremental 
processing to data lakes, and hudi-rs brings it to programs that run without a 
JVM. Un [...]
 
 Many of today's pipelines that update tables run in a plain Python process or 
in a non-JVM engine. A retrieval pipeline embeds documents and has to keep its 
knowledge base current as sources are added, edited and removed. A model team 
curates a fine-tuning set between training runs, correcting and rejecting 
examples, and has to reproduce the exact version each model was trained on. A 
service or an agent corrects records in a dataset as it finds errors. Each of 
them changes a small slice  [...]
 
@@ -102,7 +102,7 @@ The same workloads, run through 
[delta-rs](https://github.com/delta-io/delta-rs)
   <img 
src="/assets/images/blog/2026-11-03-apache-hudi-rs-0-6-0-release-announcement/3-write-latency.png"
 alt="Seconds per upsert and delete commit on five workloads: hudi-rs 0.6.0 
Merge-on-Read with the record-level index against delta-rs and PyIceberg, with 
hudi-rs 1.2 to 12 times faster on upserts and 4.8 to 24 times faster on 
deletes, except tpcds-web-returns, where hudi-rs and delta-rs are comparable" 
width="1000"/>
 </div>
 
-The upserts are fast because of the low write amplification and record-level 
index. A commit on a Merge-on-Read table appends only the changed records to 
log files, and the record-level index points each key at its file group, so an 
upsert commit in hudi-rs writes 4 to 200 times fewer bytes than the same commit 
in the other two libraries. Neither delta-rs nor PyIceberg writes deletion 
vectors in their latest releases ([delta-rs 
1.6.6](https://github.com/delta-io/delta-rs/releases/tag/pyt [...]
+The upserts are fast because of the low write amplification and record-level 
index. A commit on a Merge-on-Read table appends only the changed records to 
log files, and the record-level index points each key at its file group, so an 
upsert commit in hudi-rs writes 4 to 200 times fewer bytes than the same commit 
in the other two libraries. Neither delta-rs nor PyIceberg writes deletion 
vectors in their latest releases ([delta-rs 
1.6.6](https://github.com/delta-io/delta-rs/releases/tag/pyt [...]
 
 <div style={{ textAlign: 'center' }}>
   <img 
src="/assets/images/blog/2026-11-03-apache-hudi-rs-0-6-0-release-announcement/4-write-bytes.png"
 alt="MiB written per upsert and delete commit: hudi-rs writes 4 to 200 times 
fewer bytes per upsert commit than delta-rs and PyIceberg" width="1000"/>
diff --git a/website/docs/python-rust-quick-start-guide.md 
b/website/docs/python-rust-quick-start-guide.md
index 140efe2fa8e5..90bd1d1911ad 100644
--- a/website/docs/python-rust-quick-start-guide.md
+++ b/website/docs/python-rust-quick-start-guide.md
@@ -7,10 +7,12 @@ import Tabs from '@theme/Tabs';
 import TabItem from '@theme/TabItem';
 
 [hudi-rs](https://github.com/apache/hudi-rs) is the native Rust implementation 
of Apache Hudi with Python bindings.
-It creates Hudi tables and runs upserts, updates, and deletes on them from a 
single process, with no JVM and no
-Spark. Every write maintains the table's metadata table and record-level 
index, so updating or deleting a handful
-of rows in a large table costs a few index lookups and the rewrite of the file 
groups that hold those rows, not a
-scan of the table.
+With `pip install hudi`, a single Python process creates Hudi tables and 
upserts, updates and deletes rows in them,
+with no JVM and no Spark, and the same tables are read by Spark, Trino, 
DuckDB, Polars, DataFusion and every other
+engine supporting Hudi. Upserts, updates and deletes stay under a second on a 
single node as tables grow into the
+millions of rows. Every write maintains the table's metadata table and 
record-level index, so updating or deleting
+a handful of rows in a large table costs a few index lookups and the rewrite 
of the file groups that hold those
+rows, not a scan of the table.
 
 This page gets you from `pip install` to a table you can upsert into, delete 
from, and read incrementally, then
 shows how to query it from Python, Rust, DuckDB, Polars, and DataFusion.
@@ -250,8 +252,11 @@ across the table, so each Copy-on-Write commit rewrites 
nearly all of it: per up
   <img src="/assets/images/docs/python-rust-quick-start/write-bytes.png" 
alt="MiB written per upsert and delete commit on the same five workloads" 
width="1000"/>
 </div>
 
-Loading the 10M-row table in Hudi takes 5.7 s, about 2.4 s of which builds the 
metadata table and its record-level
-index, an investment that pays off in the latency of every later upsert and 
delete.
+The trade-off shows up in the bulk load. Loading the 10M-row `uuid` table 
takes 5.7 s in Hudi against 2.8 s for
+delta-rs and 1.3 s for PyIceberg, because about 2.4 s of it builds the 
metadata table and its record-level index up
+front, an investment that pays off in the latency of every later upsert and 
delete. The initial load is likewise
+slower on `nyc-taxi` and `tpcds-web-returns`, and on par or faster on the two 
1M-row workloads, `rag-chunks` and
+`training-set`.
 {/* BENCHMARK_TABLE_END */}
 
 **Reproduce it.** [This 
guide](https://gist.github.com/yihua/66ad80224f8e50020025dc76d138dd0a) pins the 
hudi-rs
diff --git 
a/website/versioned_docs/version-1.2.0/python-rust-quick-start-guide.md 
b/website/versioned_docs/version-1.2.0/python-rust-quick-start-guide.md
index 140efe2fa8e5..90bd1d1911ad 100644
--- a/website/versioned_docs/version-1.2.0/python-rust-quick-start-guide.md
+++ b/website/versioned_docs/version-1.2.0/python-rust-quick-start-guide.md
@@ -7,10 +7,12 @@ import Tabs from '@theme/Tabs';
 import TabItem from '@theme/TabItem';
 
 [hudi-rs](https://github.com/apache/hudi-rs) is the native Rust implementation 
of Apache Hudi with Python bindings.
-It creates Hudi tables and runs upserts, updates, and deletes on them from a 
single process, with no JVM and no
-Spark. Every write maintains the table's metadata table and record-level 
index, so updating or deleting a handful
-of rows in a large table costs a few index lookups and the rewrite of the file 
groups that hold those rows, not a
-scan of the table.
+With `pip install hudi`, a single Python process creates Hudi tables and 
upserts, updates and deletes rows in them,
+with no JVM and no Spark, and the same tables are read by Spark, Trino, 
DuckDB, Polars, DataFusion and every other
+engine supporting Hudi. Upserts, updates and deletes stay under a second on a 
single node as tables grow into the
+millions of rows. Every write maintains the table's metadata table and 
record-level index, so updating or deleting
+a handful of rows in a large table costs a few index lookups and the rewrite 
of the file groups that hold those
+rows, not a scan of the table.
 
 This page gets you from `pip install` to a table you can upsert into, delete 
from, and read incrementally, then
 shows how to query it from Python, Rust, DuckDB, Polars, and DataFusion.
@@ -250,8 +252,11 @@ across the table, so each Copy-on-Write commit rewrites 
nearly all of it: per up
   <img src="/assets/images/docs/python-rust-quick-start/write-bytes.png" 
alt="MiB written per upsert and delete commit on the same five workloads" 
width="1000"/>
 </div>
 
-Loading the 10M-row table in Hudi takes 5.7 s, about 2.4 s of which builds the 
metadata table and its record-level
-index, an investment that pays off in the latency of every later upsert and 
delete.
+The trade-off shows up in the bulk load. Loading the 10M-row `uuid` table 
takes 5.7 s in Hudi against 2.8 s for
+delta-rs and 1.3 s for PyIceberg, because about 2.4 s of it builds the 
metadata table and its record-level index up
+front, an investment that pays off in the latency of every later upsert and 
delete. The initial load is likewise
+slower on `nyc-taxi` and `tpcds-web-returns`, and on par or faster on the two 
1M-row workloads, `rag-chunks` and
+`training-set`.
 {/* BENCHMARK_TABLE_END */}
 
 **Reproduce it.** [This 
guide](https://gist.github.com/yihua/66ad80224f8e50020025dc76d138dd0a) pins the 
hudi-rs
diff --git 
a/website/versioned_docs/version-1.2.1/python-rust-quick-start-guide.md 
b/website/versioned_docs/version-1.2.1/python-rust-quick-start-guide.md
index 140efe2fa8e5..90bd1d1911ad 100644
--- a/website/versioned_docs/version-1.2.1/python-rust-quick-start-guide.md
+++ b/website/versioned_docs/version-1.2.1/python-rust-quick-start-guide.md
@@ -7,10 +7,12 @@ import Tabs from '@theme/Tabs';
 import TabItem from '@theme/TabItem';
 
 [hudi-rs](https://github.com/apache/hudi-rs) is the native Rust implementation 
of Apache Hudi with Python bindings.
-It creates Hudi tables and runs upserts, updates, and deletes on them from a 
single process, with no JVM and no
-Spark. Every write maintains the table's metadata table and record-level 
index, so updating or deleting a handful
-of rows in a large table costs a few index lookups and the rewrite of the file 
groups that hold those rows, not a
-scan of the table.
+With `pip install hudi`, a single Python process creates Hudi tables and 
upserts, updates and deletes rows in them,
+with no JVM and no Spark, and the same tables are read by Spark, Trino, 
DuckDB, Polars, DataFusion and every other
+engine supporting Hudi. Upserts, updates and deletes stay under a second on a 
single node as tables grow into the
+millions of rows. Every write maintains the table's metadata table and 
record-level index, so updating or deleting
+a handful of rows in a large table costs a few index lookups and the rewrite 
of the file groups that hold those
+rows, not a scan of the table.
 
 This page gets you from `pip install` to a table you can upsert into, delete 
from, and read incrementally, then
 shows how to query it from Python, Rust, DuckDB, Polars, and DataFusion.
@@ -250,8 +252,11 @@ across the table, so each Copy-on-Write commit rewrites 
nearly all of it: per up
   <img src="/assets/images/docs/python-rust-quick-start/write-bytes.png" 
alt="MiB written per upsert and delete commit on the same five workloads" 
width="1000"/>
 </div>
 
-Loading the 10M-row table in Hudi takes 5.7 s, about 2.4 s of which builds the 
metadata table and its record-level
-index, an investment that pays off in the latency of every later upsert and 
delete.
+The trade-off shows up in the bulk load. Loading the 10M-row `uuid` table 
takes 5.7 s in Hudi against 2.8 s for
+delta-rs and 1.3 s for PyIceberg, because about 2.4 s of it builds the 
metadata table and its record-level index up
+front, an investment that pays off in the latency of every later upsert and 
delete. The initial load is likewise
+slower on `nyc-taxi` and `tpcds-web-returns`, and on par or faster on the two 
1M-row workloads, `rag-chunks` and
+`training-set`.
 {/* BENCHMARK_TABLE_END */}
 
 **Reproduce it.** [This 
guide](https://gist.github.com/yihua/66ad80224f8e50020025dc76d138dd0a) pins the 
hudi-rs

Reply via email to