Skip to main content

OrionBelt Semantic Layer - Compiles and executes YAML semantic models as analytical SQL

Project description

OrionBelt Logo

OrionBelt Semantic Layer

Compile and execute YAML semantic models as analytical SQL across multiple database dialects

GitHub stars Version 1.5.0 Python 3.12+ License: BSL 1.1 Docker Hub FastAPI Pydantic v2 Gradio

BigQuery PostgreSQL Snowflake ClickHouse Dremio Databricks DuckDB MySQL

OrionBelt Semantic Layer is an API-first semantic engine and query planner for AI agents that compiles and executes declarative YAML model definitions as optimized SQL for BigQuery, ClickHouse, Databricks, Dremio, DuckDB/MotherDuck, MySQL, Postgres, and Snowflake. Query using business concepts — dimensions, measures, and metrics — instead of raw SQL.

Analytics as Code — Define your analytical semantics in version-controlled YAML, compile to dialect-specific SQL, and execute against live databases, all through a single API. No BI tool in the middle: the full loop from declarative model to query results is programmable, reviewable, and reproducible.

Features

  • 8 SQL Dialects — BigQuery, ClickHouse, Databricks, Dremio, DuckDB/MotherDuck, MySQL, Postgres, Snowflake
  • OBML Model Format — YAML-based semantic models with data objects, dimensions, measures, metrics, and joins
  • AST-Based SQL — Custom SQL AST ensures correct, injection-safe SQL generation
  • Cross-Schema Queries — Model data objects across multiple databases and schemas in a single model
  • Static Model Filters — Mandatory WHERE conditions baked into the model, applied to every query with auto-join extension
  • Star Schema & CFL — Automatic join resolution with Composite Fact Layer for multi-fact queries
  • REST API — FastAPI endpoints for model management, validation, compilation, and execution
  • Gradio UI — Interactive web interface for model editing, query testing, and ER diagrams
  • MCP Server — Available as a separate thin client for Claude, Copilot, Cursor, Windsurf
  • AI Integrations — LangChain, OpenAI Agents SDK, CrewAI, Google ADK, Vercel AI SDK, n8n, ChatGPT
  • DB-API 2.0 + Flight SQL — PEP 249 drivers and Arrow Flight SQL server for DBeaver, Tableau, Power BI
  • OBSL Graph & SPARQL — RDF graph export and read-only SPARQL querying for every loaded model
  • OSI Interoperability — Bidirectional conversion between OBML and Open Semantic Interchange format

Quick Start

Docker (fastest)

docker run -p 8080:8080 ralforion/orionbelt-api

API at http://localhost:8080 — Swagger docs at /docs

From Source

git clone https://github.com/ralfbecher/orionbelt-semantic-layer.git
cd orionbelt-semantic-layer
uv sync
uv run orionbelt-api

API at http://localhost:8000 — Swagger docs at /docs

Live Demo

http://35.187.174.102/ui — Gradio UI with pre-loaded example model

API: http://35.187.174.102Swagger UI | ReDoc

Example

Define a Semantic Model (OBML)

version: 1.0
dataObjects:
  Customers:
    code: CUSTOMERS
    database: WAREHOUSE
    schema: PUBLIC
    columns:
      Customer ID: { code: CUSTOMER_ID, abstractType: string }
      Country:     { code: COUNTRY, abstractType: string }

  Orders:
    code: ORDERS
    database: WAREHOUSE
    schema: PUBLIC
    columns:
      Order Customer ID: { code: CUSTOMER_ID, abstractType: string }
      Price:             { code: PRICE, abstractType: float }
      Quantity:          { code: QUANTITY, abstractType: int }
    joins:
      - joinType: many-to-one
        joinTo: Customers
        columnsFrom: [Order Customer ID]
        columnsTo: [Customer ID]

dimensions:
  Country:
    dataObject: Customers
    column: Country
    resultType: string

measures:
  Revenue:
    resultType: float
    aggregation: sum
    expression: "{[Orders].[Price]} * {[Orders].[Quantity]}"

Compile via REST API

# Create a session
curl -s -X POST http://localhost:8000/v1/sessions | jq .session_id
# -> "a1b2c3d4"

# Load the model
curl -s -X POST http://localhost:8000/v1/sessions/a1b2c3d4/models \
  -H "Content-Type: application/json" \
  -d '{"model_yaml": "..."}' | jq .model_id
# -> "abcd1234"

# Compile a query
curl -s -X POST http://localhost:8000/v1/sessions/a1b2c3d4/query/sql \
  -H "Content-Type: application/json" \
  -d '{"model_id":"abcd1234","query":{"select":{"dimensions":["Country"],"measures":["Revenue"]}},"dialect":"postgres"}' \
  | jq -r .sql

Generated SQL (Postgres):

SELECT
  "Customers"."COUNTRY" AS "Country",
  SUM("Orders"."PRICE" * "Orders"."QUANTITY") AS "Revenue"
FROM WAREHOUSE.PUBLIC.ORDERS AS "Orders"
LEFT JOIN WAREHOUSE.PUBLIC.CUSTOMERS AS "Customers"
  ON "Orders"."CUSTOMER_ID" = "Customers"."CUSTOMER_ID"
GROUP BY "Customers"."COUNTRY"

Change dialect to bigquery, clickhouse, databricks, dremio, duckdb, mysql, or snowflake for dialect-specific SQL.

Gradio UI

SQL Compiler in Gradio UI

Install the ui extra and the UI is mounted at /ui on the API server:

uv sync --extra ui && uv run orionbelt-api
# -> UI at http://localhost:8000/ui

Documentation

Topic Link
Full docs site ralforion.com/orionbelt-semantic-layer
Installation getting-started/installation
Quick Start getting-started/quickstart
Docker & Deployment getting-started/docker
Development getting-started/development
OBML Model Format guide/model-format
Query Language guide/query-language
SQL Dialects guide/dialects
Period-over-Period Metrics guide/period-over-period
Compilation Pipeline guide/compilation
OBSL Graph & SPARQL guide/obsl
Gradio UI guide/ui
AI Integrations guide/integrations
OSI Interoperability guide/osi
REST API Endpoints api/endpoints
DB-API Drivers & Flight SQL drivers
Architecture reference/architecture
Configuration reference/configuration
Sales Model Walkthrough examples/sales-model
Multi-Dialect Output examples/multi-dialect
Multi-Fact: Sales & Returns examples/multi-fact
TPC-DS Benchmark examples/tpcds
Quickstart Notebook examples/quickstart.ipynb

Companion Project

OrionBelt Analytics

An ontology-based MCP server that analyzes relational database schemas and generates RDF/OWL ontologies. Together with OrionBelt Semantic Layer, it enables AI assistants to navigate your data landscape through ontologies and compile safe, dialect-aware analytical SQL.

OrionBelt Analytics Architecture

License

Copyright 2025 RALFORION d.o.o.

Licensed under the Business Source License 1.1. The Licensed Work will convert to Apache License 2.0 on 2030-03-16.

By contributing to this project, you agree to the Contributor License Agreement.


RALFORION d.o.o.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

orionbelt_semantic_layer-1.5.0.tar.gz (4.8 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

orionbelt_semantic_layer-1.5.0-py3-none-any.whl (173.7 kB view details)

Uploaded Python 3

File details

Details for the file orionbelt_semantic_layer-1.5.0.tar.gz.

File metadata

File hashes

Hashes for orionbelt_semantic_layer-1.5.0.tar.gz
Algorithm Hash digest
SHA256 3e718e146a638b229fd16bbd617b217cc5b1ed87c737a618eb4572147fca1e89
MD5 2c70af6154c35dad459b25b8591a52c1
BLAKE2b-256 0187f2a3536e34f5ca3d8f094d2664e59768557eaa22f9e9cc904155ede6b25c

See more details on using hashes here.

File details

Details for the file orionbelt_semantic_layer-1.5.0-py3-none-any.whl.

File metadata

File hashes

Hashes for orionbelt_semantic_layer-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 749dd1157dd3770906e589342a01af5bcf0badcdf40d20e01767e72c3f8f3e40
MD5 b346eb8d4c4a1f0463e9590eb3165d0f
BLAKE2b-256 da0420ee12b402b96f2d579270dc05612d64e2053b3ad680dabe9aa76224a539

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page