pvary commented on code in PR #16961: URL: https://github.com/apache/iceberg/pull/16961#discussion_r3542314298
########## 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 | Review Comment: In many cases, the query engine only cares about the index type, and multiple transform functions may satisfy the same requirement. However, there are scenarios where the specific transform function becomes important. Examples: - Flink job recovery requires a SCALAR index with a HASH transform function. A hash-based distribution allows the index to be restored directly into job state without an additional shuffle phase. - Spark range deletes on a primary key require a SCALAR index with an IDENTITY or HILBERT transform function. A HASH transform destroys key ordering and would effectively require a full index scan. - Spark point lookups on a primary key generally do not need to understand the transform function. They can rely on the index contract that a given key maps to a single leaf file, regardless of how that mapping is implemented. -- 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]
