Zpět na domů

Offline BI v asapBI: Docker a ClickHouse

Článek popisuje nastavení offline-vývoje v asapBI s lokálním Docker-stackem PostgreSQL a ClickHouse. Podrobně: spuštění kontejnerů, kopírování dat přes dbcopy-json, vytváření grafických View s Git-verzionováním a integrace dokumentace.

asapBI offline: lokální databáze a View bez sítě
Advertisement 728x90

Odpovídající vývoj BI-analýzy v asapBI: lokální stack a grafické View

V systému asapBI je plně podporována offline práce při vývoji BI-analýz. Používá se lokální Docker-stack s PostgreSQL a ClickHouse, grafické SQL-View ve formátu JSON a verzování pomocí Git. To umožňuje vytvářet dotazy, experimentovat s daty a dokumentovat logiku bez nutnosti připojení k vzdáleným serverům – tím se vyhýbáme zastavení práce kvůli nestabilnímu internetu.

Lokální prostředí zajišťuje izolaci dat, bezpečnost experimentů a kontrolu verzí. Vývojář má plnou kontrolu nad objemy, procesorem a pamětí kontejnerů.

Výhody lokálního stacku

Lokální vývoj řeší klíčové problémy týmové spolupráce:

Google AdInline article slot
  • Izolace dat: Objemy v Dockeru jsou chráněny proti vnějším změnám. Neexistuje riziko ztráty testovacích tabulek kvůli migracím nebo čištěním.
  • Bezpečné experimenty: Náročné JOIN nebo View zatěžují pouze lokální kontejner, neovlivňují celý cluster.
  • Verzování přes Git: Grafické View jsou uloženy jako JSON-soubory. Podporovány jsou diff, code review i vrácení zpět.
  • Digitální dvojník DB: Změny schématu, typů dat a vazeb probíhají bez zátěže produkčního prostředí.

Nastavení offline prostředí

Příprava trvá tři kroky.

1. Klonování projektu z Git

Stáhněte si projekt do místní složky. Struktura projektu odpovídá oblastem: finance, prodej atd. Soubory View a dbcopy-json jsou uloženy v repozitáři.

2. Spuštění BI-stacku přes Docker Compose

Použijte soubor docker-compose.yml pro PostgreSQL a ClickHouse. Příklad konfigurace:

Google AdInline article slot
services:
  asapbi-postgres:
    image: postgres:15-alpine
    container_name: asapbi-postgres
    restart: unless-stopped
    environment:
      POSTGRES_USER: admin
      POSTGRES_PASSWORD: admin
      POSTGRES_DB: demo
      PGDATA: /var/lib/postgresql/data/pgdata
    ports:
      - "15432:5432"
    volumes:
      - postgres-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U admin -d demo"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 10s
    networks:
      - asapbi-net

  asapbi-clickhouse:
    image: clickhouse/clickhouse-server:24.8-alpine
    container_name: asapbi-clickhouse
    restart: unless-stopped
    environment:
      CLICKHOUSE_USER: admin
      CLICKHOUSE_PASSWORD: admin
      CLICKHOUSE_DB: analytics
    ports:
      - "18123:8123"   # HTTP
      - "19000:9000"   # Native
    volumes:
      - clickhouse-data:/var/lib/clickhouse
      - clickhouse-logs:/var/log/clickhouse-server
    healthcheck:
      test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:8123/ping || exit 1"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 30s
    networks:
      - asapbi-net

volumes:
  postgres-data:
    driver: local
  clickhouse-data:
    driver: local
  clickhouse-logs:
    driver: local

networks:
  asapbi-net:
    driver: bridge

Spuštění přes rozhraní asapBI nebo CLI. Docker si automaticky stáhne image.

3. Naplnění databáze daty

Použijte soubory *.dbcopy-json pro kopírování testovacích dat. Příklad:

{
  "description": "Kopírování klientů s přípravou a čištěním",
  "beforeSQL": [
    "BEGIN;",
    "SET session_replication_role = replica;",
    "CREATE TEMP TABLE IF NOT EXISTS _copy_log (ts timestamptz, msg text);"
  ],
  "afterSQL": [
    "SET session_replication_role = DEFAULT;",
    "INSERT INTO _copy_log VALUES (now(), 'Copy completed');",
    "COMMIT;"
  ],
  "tables": [
    {
      "schema": "reference",
      "table": "clients",
      "where": "is_active = true AND created_at >= '2024-01-01'",
      "beforeSQL": [
        "DROP INDEX IF EXISTS idx_clients_region_id",
        "DELETE FROM reference.clients WHERE created_at >= '2024-01-01'"
      ],
      "afterSQL": [
        "CREATE INDEX IF NOT EXISTS idx_clients_region_id ON reference.clients (region_id)",
        "ANALYZE reference.clients"
      ]
    },
    {
      "schema": "sales",
      "table": "orders",
      "where": "order_date >= '2024-01-01'",
      "beforeSQL": "ALTER TABLE sales.orders DISABLE TRIGGER ALL",
      "afterSQL": "ALTER TABLE sales.orders ENABLE TRIGGER ALL"
    },
    {
      "schema": "analytics",
      "table": "user_sessions",
      "where": "",
      "beforeSQL": null,
      "afterSQL": null
    }
  ]
}

Vyberte zdroj a cíl v rozhraní. Používejte pouze testovací data z dev-serverů.

Google AdInline article slot

Grafické SQL-View

Připojte se k lokálnímu ClickHouse a vytvořte grafické View. Jedná se o JSON-soubor s verzováním a možností code review. View se odděluje od dashboardů, což zajišťuje jedinou pravdu pro výpočty.

Výhody:

  • Shromažďování algoritmů výpočtů.
  • Opakované použití v různých dashboardech.
  • Sledování změn přes Git diff.

Integrace dokumentace

Ke View připojujte soubory do stejné složky: MD, draw.io. Dokumentace se aktualizuje automaticky při změnách modelu. Textové soubory jsou vhodné pro AI-zpracování a automatickou generaci dokumentace.

Co je důležité

  • Lokální Docker-stack s objemy zajišťuje izolaci a trvalost dat.
  • Grafické View jako JSON-soubory podporují Git-verzování a code review pro analýzu.
  • Soubory *.dbcopy-json automatizují bezpečné kopírování testovacích dat.
  • Integrace dokumentace (MD, draw.io) do projektové složky zaručuje aktuálnost.
  • Plná sandboxová prostředí pro experimenty bez rizika pro produkci.

— Editorial Team

Advertisement 728x90

Číst dál