Work in Progress: This page is under development. Use the feedback button on the bottom right to help us improve it.

Apache Iceberg

Apache Iceberg connector for writing streaming data to Iceberg tables. Supports REST and AWS Glue catalogs.

Quick Example

apiVersion: laminar.io/v1
kind: Profile
spec:
  name: iceberg-rest
  connector: iceberg
  config:
    catalog:
      type: rest
      url: http://localhost:8181
      warehouse: my-warehouse
 
---
apiVersion: laminar.io/v1
kind: Table
spec:
  name: events_iceberg
  connector: iceberg
  connection_profile_id: iceberg-rest
  config:
    type: sink
    sink_table_config:
      namespace: analytics
      table_name: events
      rolling_policy:
        file_size_bytes: 134217728
        interval_seconds: 300
      partitioning:
        fields:
          - name: event_date
            transform: identity
        shuffle_by_partition:
          enabled: true
  schema:
    format:
      parquet: {}
    fields:
      - field_name: event_id
        field_type:
          type:
            primitive: Utf8
        nullable: false
      - field_name: event_date
        field_type:
          type:
            primitive: Date32
        nullable: false

Configuration

REST Catalog

PropertyTypeRequiredDescription
catalog.typestringYesrest
catalog.urlstringYesBase URL for the REST catalog
catalog.warehousestringNoWarehouse name
catalog.tokenstringNoAuthentication token

AWS Glue Catalog

PropertyTypeRequiredDescription
catalog.typestringYesglue
catalog.glue_catalog_config.regionstringYesAWS region
catalog.glue_catalog_config.warehousestringNoS3 warehouse path
catalog.glue_catalog_config.access_key_idstringNoAWS access key (uses env if not set)
catalog.glue_catalog_config.secret_access_keystringNoAWS secret key

JSON Schema Reference

Connection Profile Schema
{
  "type": "object",
  "properties": {
    "catalog": {
      "oneOf": [
        {
          "type": "object",
          "properties": {
            "type": {"const": "rest"},
            "url": {"type": "string", "format": "uri"},
            "warehouse": {"type": "string"},
            "token": {"type": "string"}
          },
          "required": ["type", "url"]
        },
        {
          "type": "object",
          "properties": {
            "type": {"const": "glue"},
            "glue_catalog_config": {
              "type": "object",
              "properties": {
                "region": {"type": "string"},
                "warehouse": {"type": "string"},
                "access_key_id": {"type": "string"},
                "secret_access_key": {"type": "string"}
              },
              "required": ["region"]
            }
          },
          "required": ["type", "glue_catalog_config"]
        }
      ]
    }
  },
  "required": ["catalog"]
}
Connection Table Schema
{
  "type": "object",
  "properties": {
    "type": {"const": "sink"},
    "sink_table_config": {
      "type": "object",
      "properties": {
        "table_name": {"type": "string"},
        "namespace": {"type": "string"},
        "location_path": {"type": "string"},
        "rolling_policy": {
          "type": "object",
          "properties": {
            "file_size_bytes": {"type": "integer"},
            "interval_seconds": {"type": "integer"},
            "inactivity_seconds": {"type": "integer"}
          }
        },
        "partitioning": {
          "type": "object",
          "properties": {
            "fields": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {"type": "string"},
                  "transform": {"enum": ["identity", "hour", "year", "month"]}
                },
                "required": ["name"]
              }
            },
            "shuffle_by_partition": {
              "type": "object",
              "properties": {
                "enabled": {"type": "boolean"}
              }
            }
          }
        }
      },
      "required": ["table_name"]
    }
  },
  "required": ["type", "sink_table_config"]
}