Zpět na domů

DuckDB jako úložiště: náhrada ETL Postgres

DuckDB implementuje kompaktní analytické úložiště v jednom souboru, nahrazuje ETL + Postgres pro OLAP úlohy. Popsána architektura, skripty aktualizace, SLA a omezení. Vhodné pro vývojáře pro produktovou analýzu s Parquet daty.

DuckDB: mikro-úložiště místo ETL-chaosu
Advertisement 728x90

DuckDB jako kompaktní analytické úložiště: Odstoupení od ETL a Postgres

DuckDB umožňuje vytvořit analytické úložiště v jediném souboru .duckdb, čímž eliminuje potřebu ETL procesů a Postgres pro OLAP úlohy. Tento engine přímo zpracovává Parquet, CSV, JSON z lokálních souborů nebo S3/GCS, což zajišťuje rychlý přístup k datům pro dashboardy a reporty bez distribuované infrastruktury. Toto řešení je ideální pro týmy s omezenými zdroji, kde je priorita čerstvost a reprodukovatelnost dat.

Problémy tradičního stacku ETL + Postgres

Postgres zvládá OLTP, ale pod OLAP zátěží se hromadí problémy: indexy zpomalují vacuum, agregace soutěží s transakcemi, ETL joby se zamotávají se změnami schémat. Tým tráví čas administrací místo analýzou. DuckDB tyto body selhání odstraní jako embedded OLAP engine bez trvalého úložiště.

Architektura se zjednoduší na schéma:

Google AdInline article slot
  • Zdroje (DB, S3, CSV) → snímky v Parquet → DuckDB (vrstvy bronze/silver/gold) → exporty pro BI.

Pipeline se redukuje na skript podle plánu s viewy a exporty, minimalizuje ops.

SLA pro mikro-úložiště na DuckDB

Je možné definovat jasné SLA bez složitostí clusterů:

  • Čerstvost dat: aktualizace každých 15–60 minut s logem timestampu.
  • Správnost: metriky ve verzovaných SQL viewách s code review.
  • Výkon: p95 < 2 s pro dashboardy na 90 dní dat.
  • Obnova: přestavba z Parquet za <30 min.
  • Ops/náklady: jeden soubor + job, bez běžícího úložiště.

Soubor .duckdb je snadno zálohovatelný a přenositelný.

Google AdInline article slot

Použití v produktové analytice

Pro B2B SaaS se událostmi v relační DB a logy v S3:

  • Denní snímky tabulek v partitionovaném Parquet.
  • Události jako Parquet podle dat.
  • Viewy gold metrik (WAT, retention kohorty).
  • Export kurátovaného Parquet pro BI.

Rozšíření httpfs umožňuje čtení z S3 bez lokální kopie. DuckDB agreguje více Parquet souborů jako jedinou tabulku.

Praktické skripty pro implementaci

Skript aktualizace (Python)

import duckdb
from datetime import datetime

DB = "micro_warehouse.duckdb"

con = duckdb.connect(DB)
con.execute("INSTALL httpfs;")
con.execute("LOAD httpfs;")

con.execute("""
CREATE OR REPLACE VIEW bronze_events AS
SELECT *
FROM read_parquet('data/events/date=*/events-*.parquet');
""")

con.execute("""
CREATE OR REPLACE VIEW silver_events AS
SELECT
  CAST(event_time AS TIMESTAMP) AS event_time,
  user_id,
  team_id,
  event_name,
  NULLIF(properties, '') AS properties
FROM bronze_events
WHERE user_id IS NOT NULL;
""")

con.execute("""
CREATE OR REPLACE VIEW gold_weekly_active_teams AS
SELECT
  date_trunc('week', event_time) AS week,
  COUNT(DISTINCT team_id) AS weekly_active_teams
FROM silver_events
GROUP BY 1
ORDER BY 1;
""")

con.execute("""
COPY (SELECT * FROM gold_weekly_active_teams)
TO 'exports/gold_weekly_active_teams.parquet' (FORMAT PARQUET);
""")

con.execute("CREATE OR REPLACE TABLE ops_refresh_log AS SELECT 1 AS dummy;")
con.execute("""
INSERT INTO ops_refresh_log
SELECT 1
""")

print("Aktualizace OK:", datetime.utcnow().isoformat(), "DB:", DB)

Tento skript vytváří vrstvy bronze/silver/gold a exportuje metriky.

Google AdInline article slot

Inkrementální aktualizace

Pro upsert použijte MERGE podle klíče (week, team_id) v materializovanou tabulku, přepočítávající klouzavé okno.

Migrace bez výpadku

Zachovejte OLTP v Postgres, migrujte OLAP do DuckDB přes rozšíření postgres_scanner: čtení/zápis do běžící instance. Postupný přesun dotazů bez refaktoringu.

Omezení DuckDB jako úložiště

Vhodné pro:

  • Málo analytiků (dashboardy, exporty).
  • Append-only nebo snímkových dat.
  • Parquet workflow s přenositelností.

Nehodné pro:

  • Vysokou konkurenci s interaktivními uživateli.
  • OLTP zápisy s ACID.
  • Multi-tenant row-level security.
  • Enterprise data kontrakty s mnoha producenty.

Klíčové body

  • DuckDB — embedded OLAP pro jeden soubor, čte Parquet/S3 přímo.
  • Zjednodušuje stack: skript + viewy místo ETL + Postgres.
  • SLA dosažitelné: čerstvost 15 min, p95<2s, obnova <30 min.
  • Migrace postupná přes postgres_scanner.
  • Omezení: nízká konkurence, ne pro OLTP.

— Editorial Team

Advertisement 728x90

Číst dál