|
@@ -29,6 +29,8 @@ Environment variables:
|
|
|
CLICKHOUSE_PORT Default: 9000
|
|
CLICKHOUSE_PORT Default: 9000
|
|
|
CLICKHOUSE_USER Optional
|
|
CLICKHOUSE_USER Optional
|
|
|
CLICKHOUSE_PASSWORD Optional
|
|
CLICKHOUSE_PASSWORD Optional
|
|
|
|
|
+ CLICKHOUSE_CONTAINER Default: clickhouse
|
|
|
|
|
+ CLICKHOUSE_USE_DOCKER Default: auto (prefer docker, fallback to native client)
|
|
|
CLICKHOUSE_DATABASE Default: omsdb
|
|
CLICKHOUSE_DATABASE Default: omsdb
|
|
|
CLICKHOUSE_SRC_TABLE Default: events
|
|
CLICKHOUSE_SRC_TABLE Default: events
|
|
|
CLICKHOUSE_DST_TABLE Default: events_v2
|
|
CLICKHOUSE_DST_TABLE Default: events_v2
|
|
@@ -38,6 +40,7 @@ Environment variables:
|
|
|
|
|
|
|
|
Notes:
|
|
Notes:
|
|
|
- The script assumes ClickHouse writes come only from ingestor-service.
|
|
- The script assumes ClickHouse writes come only from ingestor-service.
|
|
|
|
|
+ - By default it runs clickhouse-client inside the Docker container named by CLICKHOUSE_CONTAINER.
|
|
|
- event-api can stay online; RabbitMQ will buffer events while ingestor-service is paused.
|
|
- event-api can stay online; RabbitMQ will buffer events while ingestor-service is paused.
|
|
|
- Review the printed plan first, then rerun with --execute.
|
|
- Review the printed plan first, then rerun with --execute.
|
|
|
EOF
|
|
EOF
|
|
@@ -86,6 +89,8 @@ CLICKHOUSE_HOST="${CLICKHOUSE_HOST:-localhost}"
|
|
|
CLICKHOUSE_PORT="${CLICKHOUSE_PORT:-9000}"
|
|
CLICKHOUSE_PORT="${CLICKHOUSE_PORT:-9000}"
|
|
|
CLICKHOUSE_USER="${CLICKHOUSE_USER:-}"
|
|
CLICKHOUSE_USER="${CLICKHOUSE_USER:-}"
|
|
|
CLICKHOUSE_PASSWORD="${CLICKHOUSE_PASSWORD:-}"
|
|
CLICKHOUSE_PASSWORD="${CLICKHOUSE_PASSWORD:-}"
|
|
|
|
|
+CLICKHOUSE_CONTAINER="${CLICKHOUSE_CONTAINER:-clickhouse}"
|
|
|
|
|
+CLICKHOUSE_USE_DOCKER="${CLICKHOUSE_USE_DOCKER:-auto}"
|
|
|
|
|
|
|
|
CH_ARGS=(
|
|
CH_ARGS=(
|
|
|
--host "$CLICKHOUSE_HOST"
|
|
--host "$CLICKHOUSE_HOST"
|
|
@@ -109,7 +114,54 @@ require_command() {
|
|
|
fi
|
|
fi
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-require_command clickhouse-client
|
|
|
|
|
|
|
+docker_available=0
|
|
|
|
|
+native_clickhouse_available=0
|
|
|
|
|
+
|
|
|
|
|
+if command -v docker >/dev/null 2>&1; then
|
|
|
|
|
+ docker_available=1
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+if command -v clickhouse-client >/dev/null 2>&1; then
|
|
|
|
|
+ native_clickhouse_available=1
|
|
|
|
|
+fi
|
|
|
|
|
+
|
|
|
|
|
+case "$CLICKHOUSE_USE_DOCKER" in
|
|
|
|
|
+ auto)
|
|
|
|
|
+ if [[ $docker_available -eq 1 ]]; then
|
|
|
|
|
+ CLICKHOUSE_EXEC_MODE="docker"
|
|
|
|
|
+ elif [[ $native_clickhouse_available -eq 1 ]]; then
|
|
|
|
|
+ CLICKHOUSE_EXEC_MODE="native"
|
|
|
|
|
+ else
|
|
|
|
|
+ echo "Neither docker nor clickhouse-client is available on this host." >&2
|
|
|
|
|
+ exit 1
|
|
|
|
|
+ fi
|
|
|
|
|
+ ;;
|
|
|
|
|
+ 1|true|yes|docker)
|
|
|
|
|
+ if [[ $docker_available -eq 0 ]]; then
|
|
|
|
|
+ echo "Docker is required but not available." >&2
|
|
|
|
|
+ exit 1
|
|
|
|
|
+ fi
|
|
|
|
|
+ CLICKHOUSE_EXEC_MODE="docker"
|
|
|
|
|
+ ;;
|
|
|
|
|
+ 0|false|no|native)
|
|
|
|
|
+ if [[ $native_clickhouse_available -eq 0 ]]; then
|
|
|
|
|
+ echo "clickhouse-client is required but not available." >&2
|
|
|
|
|
+ exit 1
|
|
|
|
|
+ fi
|
|
|
|
|
+ CLICKHOUSE_EXEC_MODE="native"
|
|
|
|
|
+ ;;
|
|
|
|
|
+ *)
|
|
|
|
|
+ echo "Unsupported CLICKHOUSE_USE_DOCKER value: $CLICKHOUSE_USE_DOCKER" >&2
|
|
|
|
|
+ exit 1
|
|
|
|
|
+ ;;
|
|
|
|
|
+esac
|
|
|
|
|
+
|
|
|
|
|
+if [[ "$CLICKHOUSE_EXEC_MODE" == "docker" ]]; then
|
|
|
|
|
+ if ! docker inspect "$CLICKHOUSE_CONTAINER" >/dev/null 2>&1; then
|
|
|
|
|
+ echo "ClickHouse container not found: $CLICKHOUSE_CONTAINER" >&2
|
|
|
|
|
+ exit 1
|
|
|
|
|
+ fi
|
|
|
|
|
+fi
|
|
|
|
|
|
|
|
if [[ $SKIP_PM2 -eq 0 ]]; then
|
|
if [[ $SKIP_PM2 -eq 0 ]]; then
|
|
|
require_command pm2
|
|
require_command pm2
|
|
@@ -117,7 +169,11 @@ fi
|
|
|
|
|
|
|
|
run_sql() {
|
|
run_sql() {
|
|
|
local sql="$1"
|
|
local sql="$1"
|
|
|
- clickhouse-client "${CH_ARGS[@]}" --query "$sql"
|
|
|
|
|
|
|
+ if [[ "$CLICKHOUSE_EXEC_MODE" == "docker" ]]; then
|
|
|
|
|
+ docker exec -i "$CLICKHOUSE_CONTAINER" clickhouse-client "${CH_ARGS[@]}" --query "$sql"
|
|
|
|
|
+ else
|
|
|
|
|
+ clickhouse-client "${CH_ARGS[@]}" --query "$sql"
|
|
|
|
|
+ fi
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
print_sql_block() {
|
|
print_sql_block() {
|
|
@@ -206,6 +262,10 @@ printf 'Backup table: %s\n' "$BACKUP_TABLE"
|
|
|
printf 'Current month for cutover: %s\n' "$CURRENT_MONTH"
|
|
printf 'Current month for cutover: %s\n' "$CURRENT_MONTH"
|
|
|
printf 'Historical months to backfill: %s\n' "${historical_months[*]:-(none)}"
|
|
printf 'Historical months to backfill: %s\n' "${historical_months[*]:-(none)}"
|
|
|
printf 'PM2 control: %s\n' "$([[ $SKIP_PM2 -eq 0 ]] && echo enabled || echo skipped)"
|
|
printf 'PM2 control: %s\n' "$([[ $SKIP_PM2 -eq 0 ]] && echo enabled || echo skipped)"
|
|
|
|
|
+printf 'ClickHouse execution mode: %s\n' "$CLICKHOUSE_EXEC_MODE"
|
|
|
|
|
+if [[ "$CLICKHOUSE_EXEC_MODE" == "docker" ]]; then
|
|
|
|
|
+ printf 'ClickHouse container: %s\n' "$CLICKHOUSE_CONTAINER"
|
|
|
|
|
+fi
|
|
|
printf 'Mode: %s\n' "$([[ $DRY_RUN -eq 0 ]] && echo execute || echo dry-run)"
|
|
printf 'Mode: %s\n' "$([[ $DRY_RUN -eq 0 ]] && echo execute || echo dry-run)"
|
|
|
|
|
|
|
|
print_sql_block "Create destination table" "$create_sql"
|
|
print_sql_block "Create destination table" "$create_sql"
|