dbt Adapter (dbt-benostreamdb)¶

The dbt-benostreamdb adapter enables analytics engineering, automated data transformations, and data lineage directly over BenoStreamDB and Apache Iceberg tables.


Overview¶

With dbt-benostreamdb, you can define models using familiar dbt SQL workflows while taking full advantage of BenoStreamDB’s native capabilities:

  • Iceberg Table & View Materializations: Build standard Parquet tables and metadata views without moving data out of your lakehouse.

  • Incremental Materializations: Efficient append and merge models leveraging primary keys and deletion vectors.

  • Vector & Hybrid Search Macros: Embedded macros for vector distance scoring and hybrid retrieval (benostreamdb.vector_search(...)).

  • Graph Traversal Macros: Native relationship walks (benostreamdb.graph_neighbors(...), benostreamdb.graph_shortest_path(...)) over edge tables.


Installation¶

Install the adapter via pip:

pip install dbt-benostreamdb

Or install from source within the repository:

cd dbt-benostreamdb
pip install -e .

Connection Profile (profiles.yml)¶

Configure your target connection in ~/.dbt/profiles.yml:

benostreamdb_profile:
  target: dev
  outputs:
    dev:
      type: benostreamdb
      database: default
      schema: public
      threads: 4
      uri: "file:///path/to/benostreamdb/warehouse"

For cloud object storage targets (S3 / GCS / Azure), specify the storage URI:

benostreamdb_profile:
  target: prod
  outputs:
    prod:
      type: benostreamdb
      database: default
      schema: analytics
      threads: 8
      uri: "s3://my-lakehouse-bucket/warehouse"

Supported Materializations¶

1. Table Materialization¶

Creates an authoritative Apache Iceberg table:

{{ config(
    materialized='table',
    format_version=2
) }}

SELECT
    id,
    title,
    category,
    embedding
FROM {{ ref('stg_documents') }}
WHERE is_active = true

2. Incremental Materialization¶

Processes only new or updated rows since the last dbt execution:

{{ config(
    materialized='incremental',
    unique_key='id'
) }}

SELECT
    id,
    user_id,
    event_name,
    event_timestamp
FROM {{ ref('stg_events') }}

{% if is_incremental() %}
    WHERE event_timestamp > (SELECT max(event_timestamp) FROM {{ this }})
{% endif %}

Vector & Search Macros¶

BenoStreamDB exposes helper macros for similarity queries and vector analytics:

{{ config(materialized='table') }}

SELECT
    id,
    title,
    embedding <-> '[0.12, 0.45, -0.23]'::vector AS l2_dist,
    embedding <=> '[0.12, 0.45, -0.23]'::vector AS cosine_dist
FROM {{ ref('catalog_items') }}
ORDER BY cosine_dist ASC
LIMIT 50

Graph Traversal Macros¶

Query relationship models and edge tables directly in your dbt models:

{{ config(materialized='table') }}

-- Traverse 2 hops from seed entity 101
SELECT *
FROM graph_neighbors('{{ ref("stg_edges") }}', '101', 2, 'auto')

Testing & Verification¶

Run standard dbt commands to validate and execute models:

# Test connection
dbt debug

# Run models
dbt run

# Run tests
dbt test