This is an automated email from the ASF dual-hosted git repository.
JingsongLi pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/paimon-rust.git
The following commit(s) were added to refs/heads/main by this push:
new 2b8f908c fix(table): enable global index by default (#587)
2b8f908c is described below
commit 2b8f908c5ff604a78daac1dce7b95f5204379c57
Author: XiaoHongbo <[email protected]>
AuthorDate: Wed Jul 22 22:46:39 2026 +0800
fix(table): enable global index by default (#587)
---
crates/paimon/src/spec/core_options.rs | 13 ++++++++++-
.../src/table/btree_global_index_build_builder.rs | 27 ++++++++++++++++++++++
docs/src/sql.md | 2 +-
3 files changed, 40 insertions(+), 2 deletions(-)
diff --git a/crates/paimon/src/spec/core_options.rs
b/crates/paimon/src/spec/core_options.rs
index dd545f19..43230ebf 100644
--- a/crates/paimon/src/spec/core_options.rs
+++ b/crates/paimon/src/spec/core_options.rs
@@ -540,7 +540,7 @@ impl<'a> CoreOptions<'a> {
self.options
.get(GLOBAL_INDEX_ENABLED_OPTION)
.map(|value| value.eq_ignore_ascii_case("true"))
- .unwrap_or(false)
+ .unwrap_or(true)
}
pub fn global_index_search_mode(&self) ->
crate::Result<GlobalIndexSearchMode> {
@@ -1360,6 +1360,17 @@ mod tests {
}
}
+ #[test]
+ fn test_global_index_enabled_defaults_and_overrides() {
+ assert!(CoreOptions::new(&HashMap::new()).global_index_enabled());
+
+ for (raw, expected) in [("true", true), ("false", false)] {
+ let options =
+ HashMap::from([(GLOBAL_INDEX_ENABLED_OPTION.to_string(),
raw.to_string())]);
+ assert_eq!(CoreOptions::new(&options).global_index_enabled(),
expected);
+ }
+ }
+
#[test]
fn test_global_index_search_mode_rejects_invalid_value() {
let options = HashMap::from([(
diff --git a/crates/paimon/src/table/btree_global_index_build_builder.rs
b/crates/paimon/src/table/btree_global_index_build_builder.rs
index 0b759b1d..90b9891a 100644
--- a/crates/paimon/src/table/btree_global_index_build_builder.rs
+++ b/crates/paimon/src/table/btree_global_index_build_builder.rs
@@ -1240,6 +1240,33 @@ mod tests {
.unwrap()
.unwrap();
assert_eq!(row_ranges, vec![RowRange::new(0, 0), RowRange::new(2, 2)]);
+
+ // Reopen the same table without an explicit global-index override and
+ // verify that the regular scan path still uses the committed index.
+ let mut options = table.schema().options().clone();
+ assert_eq!(
+ options.remove("global-index.enabled"),
+ Some("true".to_string())
+ );
+ let scan_table = Table::new(
+ table.file_io().clone(),
+ table.identifier().clone(),
+ table.location().to_string(),
+ table.schema().copy_with_replaced_options(options),
+ None,
+ );
+ let predicate = PredicateBuilder::new(scan_table.schema().fields())
+ .equal("name", crate::spec::Datum::String("alice".to_string()))
+ .unwrap();
+ let mut read_builder = scan_table.new_read_builder();
+ read_builder.with_filter(predicate);
+ let plan = read_builder.new_scan().plan().await.unwrap();
+
+ assert_eq!(plan.splits().len(), 1);
+ assert_eq!(
+ plan.splits()[0].row_ranges(),
+ Some(&[RowRange::new(0, 0), RowRange::new(2, 2)][..])
+ );
}
#[tokio::test]
diff --git a/docs/src/sql.md b/docs/src/sql.md
index ac810727..fd95b396 100644
--- a/docs/src/sql.md
+++ b/docs/src/sql.md
@@ -1923,7 +1923,7 @@ deletion vectors enabled.
|---|---:|---|
| `row-tracking.enabled` | `false` | Enables stable row ids required by global
index files. |
| `data-evolution.enabled` | `false` | Enables row-id-aware table evolution
and partial-column writes. |
-| `global-index.enabled` | `false` | Enables global index metadata and
global-index-aware reads. |
+| `global-index.enabled` | `true` | Enables global index metadata and
global-index-aware reads. |
| `global-index.row-count-per-shard` | `100000` | Maximum row count per vector
global-index shard. |
| `sorted-index.records-per-range` | `100000` | Maximum row count per BTree
range. |
| `btree-index.fallback-scan-max-size` | `256mb` | Maximum total size of
selected BTree global-index files for fallback scans used by range/between and
suffix/contains/complex LIKE predicates; `0` disables BTree fallback index
scans. |