Hacker News Digest

19 августа 2025 г. в 16:49 • motherduck.com • ⭐ 133 • 💬 29

OriginalHN

#duckdb#ibis#yaml#python#semantic-layer#bi#data-analysis

Why Semantic Layers Matter (and how to build one with DuckDB)

Зачем нужен семантический слой и как собрать его на DuckDB

Когда не нужен

  • Один инструмент аналитики (BI, ноутбук или приложение).
  • Метрики тривиальны: COUNT, SUM, AVG.
  • Все агрегаты уже материализованы в таблицах.

Зачем нужен

  1. Единое место определения метрик – версионируемые YAML-файлы с бизнес-логикой, которые читают BI, ноутбуки, веб-приложения, AI.
  2. Кеш и безопасность – быстрые ad-hoc-запросы без переноса данных, ролевая безопасность через API.
  3. Согласованность – 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.