Overview of Apache Iceberg C++
mainiceberg-cpp) is a native C++ implementation of the Apache Iceberg table format. It provides libraries for reading, writing, and managing Iceberg tables directly within C++ applications.repository·main·Indexed 11 days ago
https://github.com/apache/icebergA high-performance table format for huge analytic datasets that provides SQL-like reliability and multi-engine compatibility with Spark, Flink, Trino, Presto, Hive, and Impala. Includes a core Java library, a REST Catalog specification, and various integration modules such as iceberg-spark and iceberg-flink.
iceberg-cpp) is a native C++ implementation of the Apache Iceberg table format. It provides libraries for reading, writing, and managing Iceberg tables directly within C++ applications.iceberg-rust is a native Rust implementation of the Apache Iceberg specification. It provides high-performance libraries for reading, writing, and managing Iceberg tables directly in Rust applications. It also provides Python bindings via pyiceberg-core.The Apache Iceberg Sink Connector is a Kafka Connect sink connector designed to write data from Kafka topics into Apache Iceberg tables. It provides several key features for reliable and scalable data ingestion:
The 0.2.0 release of Apache Iceberg C++ introduces significant capabilities for table management, data access, and catalog interaction. Key improvements include:
ManifestReader now supports projection and filtering, and a file scan task reader is available with Arrow C Stream integration.InMemoryCatalog implementation for table management, along with location providers, partition path generation, and table metadata builders.Iceberg is organized into several modules depending on your use case:
Core API & Implementation:
iceberg-api: Public API (expressions, types, tables).iceberg-core: Main implementation (Avro support). Processing engines should depend on this.iceberg-common: Utility classes.iceberg-data: Client library for reading tables from JVM applications.Storage Formats & Cloud:
iceberg-parquet: Parquet file support.iceberg-orc: ORC file support (experimental).iceberg-aws: AWS S3 and AWS Glue integration.iceberg-hive-metastore: Hive Metastore integration.Engine Integrations:
iceberg-spark: Spark Datasource V2 implementation.iceberg-flink: Flink Table and DataStream API implementation.iceberg-mr: MapReduce and Hive InputFormats.iceberg-nessie: Project Nessie integration.Apache Iceberg supports both Apache Flink's DataStream API and Table API. The following table summarizes the feature support for Flink integration:
| Feature | Support |
|---|---|
| SQL create catalog | ✔️ |
| SQL create database | ✔️ |
| SQL create table | ✔️ |
| SQL create table like | ✔️ |
| SQL alter table | ✔️ (Only supports altering table properties; column and partition changes are not supported) |
| SQL drop_table | ✔️ |
| SQL select | ✔️ (Supports both streaming and batch mode) |
| SQL insert into | ✔️ (Supports both streaming and batch mode) |
| SQL insert overwrite | ✔️ |
| DataStream read | ✔️ |
| DataStream append | ✔️ |
| DataStream overwrite | ✔️ |
| Metadata tables | ✔️ |
| Rewrite files action | ✔️ |
Iceberg expressions provide a common, simple structure for representing and exchanging logical expressions. They are used for:
CHECK constraints.current_timestamp().To maintain simplicity and portability across different engines, the specification is deliberately constrained to two main categories: Value expressions and Predicates. Complex logic is handled by calling specific functions (such as partition transforms) or User-Defined Functions (UDFs) rather than embedding engine-specific SQL dialects directly into the expression structure.
In Iceberg, a Catalog is responsible for managing a collection of tables, typically grouped into namespaces. While Iceberg manages the data format for individual tables, the catalog handles high-level operations such as:
To use Iceberg, you must first initialize and configure a catalog. This is usually done through a processing engine (like Spark, Flink, or Trino) by passing a set of properties. Multiple compute engines can share a single Iceberg catalog to maintain a common data layer.
Iceberg supports two primary types of SQL user-defined functions (UDFs) through a standardized metadata format:
int, string) or a non-primitive type (e.g., struct, list).The 0.3.0 release expanded catalog and storage support:
InputFile and OutputFile interfaces, and bulk delete support.