huaxingao commented on code in PR #16961: URL: https://github.com/apache/iceberg/pull/16961#discussion_r3486514078
########## format/index.md: ########## @@ -0,0 +1,322 @@ +--- +title: "Index Spec" +--- +<!-- + - Licensed to the Apache Software Foundation (ASF) under one or more + - contributor license agreements. See the NOTICE file distributed with + - this work for additional information regarding copyright ownership. + - The ASF licenses this file to You under the Apache License, Version 2.0 + - (the "License"); you may not use this file except in compliance with + - the License. You may obtain a copy of the License at + - + - http://www.apache.org/licenses/LICENSE-2.0 + - + - Unless required by applicable law or agreed to in writing, software + - distributed under the License is distributed on an "AS IS" BASIS, + - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + - See the License for the specific language governing permissions and + - limitations under the License. + --> + +# Iceberg Index Specification + +## Background and Motivation + +Indexes enable query engines to locate relevant rows without scanning entire datasets. +They can accelerate point lookups, range predicates, and other retrieval patterns +while preserving Iceberg's table format, snapshot isolation, and interoperability. + +This specification defines: + +- A portable metadata format for indexes +- A catalog-managed index object independent from table metadata +- A common storage architecture for index data +- A framework for defining new index types and transform functions + +Indexes are optional. Engines may choose to create, maintain, consume, or ignore them. + +## Goals + +- Define a common metadata format for indexes +- Allow indexes to evolve independently from table metadata +- Enable index sharing across engines +- Provide a foundation for future index types + +## Definitions + +### Index Type + +The index type defines the logical category of an index and the class of queries it is designed to accelerate. + +The following index type is defined in this specification: + +| Type | +|--------| +| SCALAR | + +The following index types are reserved for future specifications: + +| Type | +|--------| +| VECTOR | +| TERM | + +The index type communicates the capabilities of an index to query engines and helps determine whether an index is +applicable to a particular query. + +### Index Transform Function + +The index transform function defines how the index organization key is derived from source table columns when rows are +stored in the index. + +The transform function determines the physical organization of the indexed data and therefore influences which query +patterns can efficiently leverage the index. + +The following index types are reserved for future specifications: + +| Transform | +|-----------| +| IDENTITY | +| HASH | +| HILBERT | + +The following transform functions are reserved for future specifications: + +| Transform | +|-----------| +| IVF | + +Index Instances may share the same index type while using different transform functions. + +### Index Instance + +An index instance is a concrete realization of an index type and function applied to a specific table. + +Users create index instances by specifying: + +- The source table +- The index type +- The transform function +- The indexed columns +- The included columns +- Index properties + +Multiple instances of the same index type may exist for a table. + +### Index Snapshot + +An index snapshot is an immutable version of the index data generated from a specific table snapshot. + +Each index snapshot references a complete set of index files and contains all data from the referenced table snapshot. + +## Overview + +Indexes are stored as independent catalog objects. + +Like Iceberg tables, views, and functions: + +- Metadata and data files are immutable +- Updates create new metadata files +- Catalogs perform atomic metadata swaps + +Index data is stored separately from metadata. + +Each index snapshot references a tracking file which describes the leaf files belonging to the snapshot. + +```text +Index Metadata + | + +-- Index Snapshot + | + +-- Tracking File + | + +-- Leaf Data Files +``` + +Transform functions derive a transform value from the key columns and determine how index entries are organized within +the leaf files. +- The transform value space is divided into non-overlapping ranges. +- Each leaf file stores entries for a single range. +- The tracking file stores range bounds for each leaf file. + +This structure enables efficient planning while keeping the data layout flexible for different index implementations. + +## Index Metadata + +The index metadata file stores the index definition and snapshot history. + +### Index Metadata File + +| Requirement | Field | Type | Description | +|-------------|---------------------|--------------------------|-------------------------------------------------| +| required | format-version | int | Index specification version | +| required | uuid | string | Stable UUID assigned at creation | +| required | table-uuid | string | UUID of the indexed table | +| required | location | string | Index root location | +| required | type | string | Logical index type | +| required | transform-function | string | Physical organization transform | +| required | key-column-ids | list<int> | Indexed columns | +| optional | included-column-ids | list<int> | Included columns | +| required | file-format | string | Leaf file format | Review Comment: Agree this should be defined in the tracking file. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
