Quickstart
ALOCATION stores an Iceberg catalog’s or table’s connection and credentials once, so you don’t repeat them in every query. Mounting a whole catalog as a database is the quickest way to make its tables queryable.
Attach a catalog as a database
Mount an external Iceberg catalog withCREATE ICEBERG DATABASE so every table in it is queryable by name, with no per-table setup. The database holds only a pointer to the LOCATION and an optional freshness setting, so tables added to the catalog become visible on the next query:
FILE_BASED, REST, AWS_GLUE, SNOWFLAKE_OPEN_CATALOG, and DATABRICKS_UNITY. For details and limitations, see the CREATE ICEBERG DATABASE reference.
Register a single table
To expose one table instead of a whole catalog, point aLOCATION at that table and register it with CREATE ICEBERG TABLE. Firebolt infers the schema from the Iceberg metadata, and you can then query the table like any managed table:
Query a table ad hoc
For a one-off read with no setup, use theREAD_ICEBERG table-valued function:
Import / Export
You can also ingest Iceberg data into Firebolt-managed storage using any of these methods or the COPY FROM statement. Managed tables are built for low-latency, high-concurrency real-time analytics and usually offer better price/performance, because they support additional index types and compaction; see Storage and indexing. To go the other way, export query results from Firebolt into a new Iceberg table usingCREATE ICEBERG TABLE AS SELECT.
For the full set of Iceberg functions, including the partition transform functions used in PARTITION BY clauses, see the Iceberg functions reference.
Best practices
- Register tables you query often. Use
CREATE ICEBERG TABLEto register a table in Firebolt’s catalog so you can query it with regularSELECTstatements, orCREATE ICEBERG DATABASEto mount an entire catalog and query its tables by name. ReserveREAD_ICEBERGfor ad hoc reads of tables you do not want to register. - Store credentials in a
LOCATIONobject. ALOCATIONcentralizes credential management and avoids specifying individual credentials in each query. - Set
MAX_STALENESSfor tables that tolerate slightly stale reads. This caches catalog metadata and vended credentials and typically cuts query latency by tens to hundreds of milliseconds. See Configurable data freshness withMAX_STALENESS.
Supported features and limitations
At a glance:| Capability | Support |
|---|---|
| Catalogs | FILE_BASED, REST, AWS_GLUE, SNOWFLAKE_OPEN_CATALOG, DATABRICKS_UNITY |
| Data files | Apache Parquet on Amazon S3 |
| Spec versions | Iceberg v1 and v2 |
| Writes | Export only, via CREATE ICEBERG TABLE AS SELECT; no DML |
| Positional deletes | Supported |
| Equality deletes | Supported, except on dropped columns and REAL or DOUBLE PRECISION columns |
| Deletion vectors (v3) | Not supported |
| Schema evolution | Supported, except type promotion and non-null initial-default |
| Partition evolution | Supported |
| Time travel | Not supported |
- See
CREATE LOCATION (Iceberg)for the parameters and credentials each catalog type takes. - Cross-region reads from S3 are disabled by default because they can incur additional cost. Enable them per query with the
cross_region_request_modesetting. - When a partitioned table contains equality delete files, all data and equality delete files must be written under the table’s current partition spec.
- The data types
variant,geometry, andgeographyare not supported. - Nested complex types (
struct,list,map) nested inside another complex type are read as nullable even when Iceberg defines the field as non-nullable. - Returning partition values for identity transforms from partition metadata is not supported.