Why Semantic Layers Matter (and how to build one with DuckDB)
Зачем нужен семантический слой и как собрать его на DuckDB
Когда не нужен
- Один инструмент аналитики (BI, ноутбук или приложение).
- Метрики тривиальны: COUNT, SUM, AVG.
- Все агрегаты уже материализованы в таблицах.
Зачем нужен
- Единое место определения метрик – версионируемые YAML-файлы с бизнес-логикой, которые читают BI, ноутбуки, веб-приложения, AI.
- Кеш и безопасность – быстрые ad-hoc-запросы без переноса данных, ролевая безопасность через API.
- Согласованность – KPI «Выручка» описан один раз и не дублируется в каждом инструменте.
Минимальный пример
metrics.yaml
– 30 строк: название, SQL-выражение, формат, описание.run.py
– 40 строк на Ibis + DuckDB: читает YAML, строит запрос к 20 млн записей NYC Taxi, возвращает DataFrame или SQL.
Как работает
import ibis, yaml, duckdb
ibis.options.interactive = True
con = ibis.duckdb.connect("nyc_taxi.ddb")
taxi = con.table("trips")
with open("metrics.yaml") as f:
metrics = yaml.safe_load(f)
revenue = metrics["total_revenue"]["sql"]
result = con.sql(revenue).to_pandas()
YAML:
total_revenue:
sql: "SELECT SUM(fare_amount) FROM trips"
format: currency
description: "Общая выручка"
Итог
Семантический слой решает проблему дублирования логики и ускоряет аналитику, когда данные и потребители разнообразны. Полный код – в репозитории semantic-layer-duckdb.