Skip to content

Commit d035e6f

Browse files
authored
Add ClickHouse server setup for query validation (#1)
1 parent 30036a1 commit d035e6f

2 files changed

Lines changed: 186 additions & 0 deletions

File tree

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# ClickHouse binary (downloaded, not committed)
2+
clickhouse
3+
4+
# ClickHouse data directory
5+
.clickhouse/

scripts/clickhouse.sh

Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
#!/bin/bash
2+
# ClickHouse server management script
3+
4+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
5+
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
6+
CLICKHOUSE_BIN="$PROJECT_DIR/clickhouse"
7+
CLICKHOUSE_DIR="$PROJECT_DIR/.clickhouse"
8+
CONFIG_FILE="$CLICKHOUSE_DIR/config.xml"
9+
PID_FILE="$CLICKHOUSE_DIR/clickhouse.pid"
10+
11+
# Download ClickHouse if not present
12+
download() {
13+
if [ -f "$CLICKHOUSE_BIN" ]; then
14+
echo "ClickHouse binary already exists"
15+
return 0
16+
fi
17+
18+
echo "Downloading ClickHouse..."
19+
curl -k -L -o "$CLICKHOUSE_BIN" https://builds.clickhouse.com/master/amd64/clickhouse
20+
chmod +x "$CLICKHOUSE_BIN"
21+
echo "Downloaded ClickHouse"
22+
"$CLICKHOUSE_BIN" --version
23+
}
24+
25+
# Initialize directories
26+
init() {
27+
mkdir -p "$CLICKHOUSE_DIR"/{data,logs,tmp,user_files,format_schemas}
28+
29+
if [ ! -f "$CONFIG_FILE" ]; then
30+
cat > "$CONFIG_FILE" << 'EOF'
31+
<?xml version="1.0"?>
32+
<clickhouse>
33+
<logger>
34+
<level>information</level>
35+
<log>/home/user/doubleclick/.clickhouse/logs/clickhouse-server.log</log>
36+
<errorlog>/home/user/doubleclick/.clickhouse/logs/clickhouse-server.err.log</errorlog>
37+
<size>100M</size>
38+
<count>3</count>
39+
</logger>
40+
41+
<http_port>8123</http_port>
42+
<tcp_port>9000</tcp_port>
43+
<mysql_port>9004</mysql_port>
44+
45+
<listen_host>127.0.0.1</listen_host>
46+
47+
<path>/home/user/doubleclick/.clickhouse/data/</path>
48+
<tmp_path>/home/user/doubleclick/.clickhouse/tmp/</tmp_path>
49+
<user_files_path>/home/user/doubleclick/.clickhouse/user_files/</user_files_path>
50+
<format_schema_path>/home/user/doubleclick/.clickhouse/format_schemas/</format_schema_path>
51+
52+
<mark_cache_size>5368709120</mark_cache_size>
53+
54+
<users>
55+
<default>
56+
<password></password>
57+
<networks>
58+
<ip>::1</ip>
59+
<ip>127.0.0.1</ip>
60+
</networks>
61+
<profile>default</profile>
62+
<quota>default</quota>
63+
<access_management>1</access_management>
64+
</default>
65+
</users>
66+
67+
<profiles>
68+
<default>
69+
<max_memory_usage>10000000000</max_memory_usage>
70+
<load_balancing>random</load_balancing>
71+
</default>
72+
</profiles>
73+
74+
<quotas>
75+
<default>
76+
<interval>
77+
<duration>3600</duration>
78+
<queries>0</queries>
79+
<errors>0</errors>
80+
<result_rows>0</result_rows>
81+
<read_rows>0</read_rows>
82+
<execution_time>0</execution_time>
83+
</interval>
84+
</default>
85+
</quotas>
86+
</clickhouse>
87+
EOF
88+
echo "Created config file"
89+
fi
90+
}
91+
92+
# Start the server
93+
start() {
94+
if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
95+
echo "ClickHouse is already running (PID: $(cat "$PID_FILE"))"
96+
return 0
97+
fi
98+
99+
download
100+
init
101+
102+
echo "Starting ClickHouse server..."
103+
"$CLICKHOUSE_BIN" server --config-file="$CONFIG_FILE" --daemon --pid-file="$PID_FILE"
104+
sleep 2
105+
106+
if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
107+
echo "ClickHouse started (PID: $(cat "$PID_FILE"))"
108+
else
109+
echo "Failed to start ClickHouse. Check logs at $CLICKHOUSE_DIR/logs/"
110+
return 1
111+
fi
112+
}
113+
114+
# Stop the server
115+
stop() {
116+
if [ ! -f "$PID_FILE" ]; then
117+
echo "PID file not found. ClickHouse may not be running."
118+
# Try to kill by process name
119+
pkill -f "clickhouse server" 2>/dev/null
120+
return 0
121+
fi
122+
123+
PID=$(cat "$PID_FILE")
124+
if kill -0 "$PID" 2>/dev/null; then
125+
echo "Stopping ClickHouse (PID: $PID)..."
126+
kill "$PID"
127+
sleep 2
128+
if kill -0 "$PID" 2>/dev/null; then
129+
echo "Force killing..."
130+
kill -9 "$PID"
131+
fi
132+
fi
133+
rm -f "$PID_FILE"
134+
echo "ClickHouse stopped"
135+
}
136+
137+
# Check status
138+
status() {
139+
if [ -f "$PID_FILE" ] && kill -0 "$(cat "$PID_FILE")" 2>/dev/null; then
140+
echo "ClickHouse is running (PID: $(cat "$PID_FILE"))"
141+
"$CLICKHOUSE_BIN" client --query "SELECT version()"
142+
else
143+
echo "ClickHouse is not running"
144+
return 1
145+
fi
146+
}
147+
148+
# Run client
149+
client() {
150+
"$CLICKHOUSE_BIN" client "$@"
151+
}
152+
153+
case "$1" in
154+
download)
155+
download
156+
;;
157+
init)
158+
init
159+
;;
160+
start)
161+
start
162+
;;
163+
stop)
164+
stop
165+
;;
166+
restart)
167+
stop
168+
start
169+
;;
170+
status)
171+
status
172+
;;
173+
client)
174+
shift
175+
client "$@"
176+
;;
177+
*)
178+
echo "Usage: $0 {download|init|start|stop|restart|status|client}"
179+
exit 1
180+
;;
181+
esac

0 commit comments

Comments
 (0)