Move STG->ODS to Airflow batch and align monitoring
This commit is contained in:
+60
-15
@@ -1,11 +1,12 @@
|
||||
#!/usr/bin/env bash
|
||||
#
|
||||
# Скрипт batch-трансформации данных: ODS → DDS → DM
|
||||
# Скрипт batch-трансформации данных: STG → ODS → DDS → DM
|
||||
#
|
||||
# Назначение:
|
||||
# Запускает SQL-скрипты из sql/dds и sql/dm для преобразования данных между слоями:
|
||||
# 1. ODS → DDS : Сборка сущностей из типизированных данных
|
||||
# 2. DDS → DM : Обновление сводки по качеству данных (dq_summary)
|
||||
# Запускает SQL-скрипты из sql/ods, sql/dds и sql/dm для преобразования данных между слоями:
|
||||
# 1. STG → ODS : Типизация и перенос ошибок в *_errors
|
||||
# 2. ODS → DDS : Сборка сущностей из типизированных данных
|
||||
# 3. DDS → DM : Обновление сводки по качеству данных (dq_summary)
|
||||
#
|
||||
# Как запускать:
|
||||
# make transform
|
||||
@@ -13,7 +14,7 @@
|
||||
#
|
||||
# Требования:
|
||||
# - ClickHouse запущен (make up)
|
||||
# - ODS содержит данные (make data выполнен)
|
||||
# - STG содержит данные (make data выполнен)
|
||||
#
|
||||
# Стратегия:
|
||||
# Сейчас: полная перезагрузка (TRUNCATE + INSERT) — для демо
|
||||
@@ -25,6 +26,7 @@ set -euo pipefail
|
||||
# Директория со скриптом
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
SQL_ROOT_DIR="${SCRIPT_DIR}/../sql"
|
||||
ODS_TRANSFORM_SQL="${SQL_ROOT_DIR}/ods/20_stg_to_ods.sql"
|
||||
DDS_TRANSFORM_SQL="${SQL_ROOT_DIR}/dds/30_ods_to_dds.sql"
|
||||
DM_TRANSFORM_SQL="${SQL_ROOT_DIR}/dm/40_dds_to_dm.sql"
|
||||
|
||||
@@ -47,6 +49,11 @@ fi
|
||||
# -----------------------------------------------------------------------------
|
||||
# Проверка: SQL-файлы batch существуют?
|
||||
# -----------------------------------------------------------------------------
|
||||
if [[ ! -f "${ODS_TRANSFORM_SQL}" ]]; then
|
||||
echo "Ошибка: Не найден SQL-файл: ${ODS_TRANSFORM_SQL}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ! -f "${DDS_TRANSFORM_SQL}" ]]; then
|
||||
echo "Ошибка: Не найден SQL-файл: ${DDS_TRANSFORM_SQL}"
|
||||
exit 1
|
||||
@@ -58,27 +65,65 @@ if [[ ! -f "${DM_TRANSFORM_SQL}" ]]; then
|
||||
fi
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Проверка: в ODS есть данные?
|
||||
# Проверка: в STG есть данные?
|
||||
# -----------------------------------------------------------------------------
|
||||
ODS_COUNT=$(${COMPOSE_BIN} exec -T "${CLICKHOUSE_SERVICE}" clickhouse-client \
|
||||
STG_COUNT=$(${COMPOSE_BIN} exec -T "${CLICKHOUSE_SERVICE}" clickhouse-client \
|
||||
--user="${CLICKHOUSE_USER}" \
|
||||
--password="${CLICKHOUSE_PASSWORD}" \
|
||||
--database="${CLICKHOUSE_DB}" \
|
||||
--query="SELECT count() FROM ods.browser_event" 2>/dev/null || echo "0")
|
||||
--query="
|
||||
SELECT
|
||||
(SELECT count() FROM stg.browser_raw)
|
||||
+ (SELECT count() FROM stg.location_raw)
|
||||
+ (SELECT count() FROM stg.device_raw)
|
||||
+ (SELECT count() FROM stg.geo_raw) AS stg_rows_total
|
||||
" 2>/dev/null || echo "0")
|
||||
|
||||
if [[ "${ODS_COUNT}" == "0" ]]; then
|
||||
echo "Предупреждение: Таблица ODS.browser_event пуста."
|
||||
if [[ "${STG_COUNT}" == "0" ]]; then
|
||||
echo "Предупреждение: Таблицы STG пусты."
|
||||
echo "Сначала загрузите данные: make data"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Найдено ${ODS_COUNT} строк в ODS.browser_event"
|
||||
echo "Найдено ${STG_COUNT} строк в STG (суммарно по 4 потокам)"
|
||||
echo ""
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Шаг 1: ODS → DDS (сборка сущностей)
|
||||
# Шаг 1: STG → ODS (типизация и DQ)
|
||||
# -----------------------------------------------------------------------------
|
||||
echo "Шаг 1: Обновление DDS слоя (ODS → DDS)..."
|
||||
echo "Шаг 1: Обновление ODS слоя (STG → ODS)..."
|
||||
${COMPOSE_BIN} exec -T "${CLICKHOUSE_SERVICE}" clickhouse-client \
|
||||
--user="${CLICKHOUSE_USER}" \
|
||||
--password="${CLICKHOUSE_PASSWORD}" \
|
||||
--database="${CLICKHOUSE_DB}" \
|
||||
--multiquery < "${ODS_TRANSFORM_SQL}"
|
||||
|
||||
echo " ✓ ODS обновлён"
|
||||
|
||||
# Показываем статистику ODS
|
||||
echo ""
|
||||
echo "Статистика ODS:"
|
||||
${COMPOSE_BIN} exec -T "${CLICKHOUSE_SERVICE}" clickhouse-client \
|
||||
--user="${CLICKHOUSE_USER}" \
|
||||
--password="${CLICKHOUSE_PASSWORD}" \
|
||||
--database="${CLICKHOUSE_DB}" \
|
||||
--query="
|
||||
SELECT 'ods.browser_event' AS table, count() AS rows FROM ods.browser_event
|
||||
UNION ALL SELECT 'ods.location_event', count() FROM ods.location_event
|
||||
UNION ALL SELECT 'ods.device_by_click', count() FROM ods.device_by_click
|
||||
UNION ALL SELECT 'ods.geo_by_click', count() FROM ods.geo_by_click
|
||||
UNION ALL SELECT 'ods.browser_event_errors', count() FROM ods.browser_event_errors
|
||||
UNION ALL SELECT 'ods.location_event_errors', count() FROM ods.location_event_errors
|
||||
UNION ALL SELECT 'ods.device_by_click_errors', count() FROM ods.device_by_click_errors
|
||||
UNION ALL SELECT 'ods.geo_by_click_errors', count() FROM ods.geo_by_click_errors
|
||||
FORMAT PrettyCompact
|
||||
"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Шаг 2: ODS → DDS (сборка сущностей)
|
||||
# -----------------------------------------------------------------------------
|
||||
echo ""
|
||||
echo "Шаг 2: Обновление DDS слоя (ODS → DDS)..."
|
||||
echo " - Очистка текущих данных (TRUNCATE)..."
|
||||
|
||||
# Очищаем таблицы перед загрузкой (полная перезагрузка для демо)
|
||||
@@ -112,10 +157,10 @@ ${COMPOSE_BIN} exec -T "${CLICKHOUSE_SERVICE}" clickhouse-client \
|
||||
--query="SELECT 'dds.click' AS table, count() AS rows FROM dds.click UNION ALL SELECT 'dds.event', count() FROM dds.event FORMAT PrettyCompact"
|
||||
|
||||
# -----------------------------------------------------------------------------
|
||||
# Шаг 2: DDS → DM (сводка по качеству)
|
||||
# Шаг 3: DDS → DM (сводка по качеству)
|
||||
# -----------------------------------------------------------------------------
|
||||
echo ""
|
||||
echo "Шаг 2: Обновление DM слоя (DQ summary)..."
|
||||
echo "Шаг 3: Обновление DM слоя (DQ summary)..."
|
||||
${COMPOSE_BIN} exec -T "${CLICKHOUSE_SERVICE}" clickhouse-client \
|
||||
--user="${CLICKHOUSE_USER}" \
|
||||
--password="${CLICKHOUSE_PASSWORD}" \
|
||||
|
||||
Reference in New Issue
Block a user