Skip to content

Cross-format indexing support in Apache XTable #887

Description

@vinishjail97

Feature Request / Improvement

Umbrella issue for cross-format indexing in Apache XTable (incubating): building indexes during conversion and exposing them into each format's native index mechanism, so engines can prune and look up efficiently against XTable-written metadata.

This tracks the outcome of the dev@ discussion, which had clear support but produced no tracking issue or RFC. Filing this so the work becomes actionable.

The dev@ thread

[DISCUSS] Indexing support across table formats in Apache XTable(Incubating)
https://lists.apache.org/thread/kb3p85rgy0qkvjgdgn3580h36y1qov8c

The proposal (2026-06-30):

Right now Apache XTable(Incubating) translates table metadata so one copy of data can be read across Hudi, Iceberg and Delta. I believe a good addition for the project is to help engines query that data more efficiently by building indexes.

Since XTable already reads the file listing and Parquet metadata during conversion, it seems well placed to build indexes from that same information and expose them into each format's native index mechanism. That would help both structured workloads (pruning, point lookups) and unstructured/vector ones (similarity search over embeddings for AI/RAG use cases).

Responses on the thread:

Vinoth Chandar — start narrow, and expect a useful lifetime:

+1 on overall idea.

I frequently talk to users, who want to keep Hudi indexes on queries and still be writing Delta Lake or Iceberg.

We can start there in a flexible way and evolve as different formats add similar capabilities? I think this will at-least have 12-18 months of shelf life.

Rahil Chertara — the format specs are heading this way, so conversion is the natural fit:

I feel that we will eventually have to support this as Iceberg is also planning on adding native indexing support within the format spec at some point. [1] So the natural step would be for xtable to handle this index conversion.

Vaibhav Kumar:

+1 from my side too.

We can get the design discussion started in our sync calls.

Sapienza (author of the Parquet source integration):

+1 thanks to the integration of the Parquet format (by me).

[1] Iceberg native indexing design doc, linked by Rahil: https://docs.google.com/document/d/1N6a2IOzC6Qsqv7NBqHKesees4N6WF49YUSIX2FrF7S0/edit

Reference: Hudi's index surface

Shared on the thread as the richest existing model to translate from:

Proposed first slice

Taking Vinoth's "start narrow" literally, rather than designing the whole surface first:

Statistics-based pruning, end to end. Column stats and partition stats, sourced from the Parquet footers XTable already reads during conversion, written into each target's native mechanism.

That choice is deliberate. It gives users a measurable query win, it exercises whatever internal representation we settle on, and it does not depend on resolving record-level or vector index design first.

Everything else stays a follow-up under this umbrella: bloom filters, record-level index, expression index, secondary index, and vector indexes for similarity search.

Design questions for the RFC

An RFC should land under rfc/ before the implementation, covering at least:

  1. The internal representation of an index in the XTable model, and where it sits relative to the existing schema and column-stats extraction.
  2. Which indexes we translate, and in which directions. Not every pairing is meaningful, and some are lossy.
  3. Forward compatibility with the Iceberg spec work Rahil referenced, so we are not locked into a Hudi-shaped model when Iceberg lands native indexing.
  4. Invalidation on incremental sync. An index that silently goes stale after a partial sync is worse than no index.
  5. Cost and opt-out. Index building adds work to every sync, so it needs a config surface and a documented cost.
  6. How this behaves for source formats with no index concept, for example the Parquet source.

Note on numbering: rfc/rfc-2/ in the repo is "Deletion Info Conversion" while PR #612 also proposes an RFC-2, so the number for this one should follow whatever #656 settles.

Dependencies and related work

Are you willing to submit PR?

  • Yes I am willing to submit a PR!

Code of Conduct

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestrfcPR's proposing an RFC

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions