68 lines
1.8 KiB
Bash
Executable File
68 lines
1.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Apply / drop ClickHouse DDL files in alphabetical order.
|
|
#
|
|
# Usage:
|
|
# clickhouse_apply.sh up apply *.up.sql in infra/clickhouse/
|
|
# clickhouse_apply.sh down apply *.down.sql in REVERSE order
|
|
#
|
|
# Env:
|
|
# CLICKHOUSE_ADDR (default localhost:9000)
|
|
# CLICKHOUSE_DB (default cdp)
|
|
# CLICKHOUSE_USER (default default)
|
|
# CLICKHOUSE_PASSWORD (default empty)
|
|
|
|
set -euo pipefail
|
|
|
|
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)/clickhouse"
|
|
ADDR="${CLICKHOUSE_ADDR:-localhost:9000}"
|
|
DB="${CLICKHOUSE_DB:-cdp}"
|
|
USER="${CLICKHOUSE_USER:-default}"
|
|
PASS="${CLICKHOUSE_PASSWORD:-}"
|
|
|
|
MODE="${1:-up}"
|
|
|
|
host="${ADDR%%:*}"
|
|
port="${ADDR##*:}"
|
|
|
|
run_sql() {
|
|
local file="$1"
|
|
echo ">>> applying $(basename "$file")"
|
|
if [[ -n "$PASS" ]]; then
|
|
clickhouse-client --host "$host" --port "$port" --user "$USER" --password "$PASS" \
|
|
--database "$DB" --multiquery --queries-file "$file"
|
|
else
|
|
clickhouse-client --host "$host" --port "$port" --user "$USER" \
|
|
--database "$DB" --multiquery --queries-file "$file"
|
|
fi
|
|
}
|
|
|
|
ensure_db() {
|
|
if [[ -n "$PASS" ]]; then
|
|
clickhouse-client --host "$host" --port "$port" --user "$USER" --password "$PASS" \
|
|
--query "CREATE DATABASE IF NOT EXISTS $DB"
|
|
else
|
|
clickhouse-client --host "$host" --port "$port" --user "$USER" \
|
|
--query "CREATE DATABASE IF NOT EXISTS $DB"
|
|
fi
|
|
}
|
|
|
|
case "$MODE" in
|
|
up)
|
|
ensure_db
|
|
for f in $(ls "$DIR"/*.up.sql 2>/dev/null | sort); do
|
|
run_sql "$f"
|
|
done
|
|
;;
|
|
down)
|
|
for f in $(ls "$DIR"/*.down.sql 2>/dev/null | sort -r); do
|
|
run_sql "$f"
|
|
done
|
|
;;
|
|
*)
|
|
echo "usage: $0 {up|down}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
echo "done."
|