Files
clickstream-ch-kafka-supers…/scripts/apply_clickhouse_ddl.sh
T

70 lines
2.7 KiB
Bash
Executable File

#!/usr/bin/env bash
#
# Скрипт применения DDL в ClickHouse
#
# Назначение:
# Последовательно применяет SQL-файлы из ddl/*.sql в базу ClickHouse.
# Файлы применяются в алфавитном порядке (00 → 10 → 20 → 30 → 40).
#
# Как запускать:
# make ddl
# или: bash scripts/apply_clickhouse_ddl.sh
#
# Требования:
# - Сервис clickhouse должен быть запущен (make up)
# - Доступен clickhouse-client внутри контейнера
#
# Порядок применения важен:
# 00_databases.sql → 10_stg.sql → 20_ods.sql → 30_dds.sql → 40_dm.sql
#
set -euo pipefail
# Директория со скриптом
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
DDL_DIR="${SCRIPT_DIR}/../ddl"
# Параметры подключения (можно переопределить через переменные окружения)
COMPOSE_BIN="${COMPOSE_BIN:-docker compose}"
CLICKHOUSE_SERVICE="${CLICKHOUSE_SERVICE:-clickhouse}"
CLICKHOUSE_DB="${CLICKHOUSE_DB:-default}"
CLICKHOUSE_USER="${CLICKHOUSE_USER:-default}"
CLICKHOUSE_PASSWORD="${CLICKHOUSE_PASSWORD:-123456}"
echo "Применение DDL из ${DDL_DIR}..."
# -----------------------------------------------------------------------------
# Проверка: ClickHouse запущен?
# -----------------------------------------------------------------------------
if ! ${COMPOSE_BIN} ps | grep -q "${CLICKHOUSE_SERVICE}"; then
echo "Ошибка: Сервис '${CLICKHOUSE_SERVICE}' не запущен."
echo "Запустите сначала: make up"
exit 1
fi
# -----------------------------------------------------------------------------
# Применение SQL-файлов по порядку
# -----------------------------------------------------------------------------
# shellcheck disable=SC2044
for sql_file in "${DDL_DIR}"/*.sql; do
if [[ -f "$sql_file" ]]; then
echo "Применение: $(basename "$sql_file")"
${COMPOSE_BIN} exec -T "${CLICKHOUSE_SERVICE}" clickhouse-client \
--user="${CLICKHOUSE_USER}" \
--password="${CLICKHOUSE_PASSWORD}" \
--database="${CLICKHOUSE_DB}" \
--multiquery \
< "$sql_file"
echo " ✓ OK"
fi
done
echo ""
echo "DDL успешно применён!"
echo ""
echo "Созданы базы данных:"
echo " - stg : Staging (сырые данные)"
echo " - ods : Operational Data Store (типизированные данные)"
echo " - dds : Detailed Data Store (детальные сущности)"
echo " - dm : Data Marts (витрины для BI)"