ClickHouse Configuration Guide
Comprehensive configuration reference for HeliosDB's ClickHouse protocol support.
Connection Configuration
Native Protocol (TCP Port 9000)
from clickhouse_driver import Client
# Basic connection
client = Client(
host='localhost',
port=9000,
user='default',
password='',
database='default'
)
# With compression and SSL
client = Client(
host='clickhouse.example.com',
port=9000,
user='analytics_user',
password='secure_password',
database='analytics',
compression='lz4',
ssl_verify=True,
ssl_check_hostname=True
)
clickhouse://username:password@host:9000/database?compression=lz4
Connection Parameters
| Parameter |
Type |
Default |
Description |
host |
string |
localhost |
Server hostname |
port |
int |
9000 |
Native protocol port |
user |
string |
default |
Username |
password |
string |
None |
Password |
database |
string |
default |
Database name |
compression |
string |
None |
Compression type (lz4, lz4hc, zstd) |
ssl_verify |
bool |
False |
Verify SSL certificate |
ssl_check_hostname |
bool |
False |
Check SSL hostname |
HTTP Protocol (Port 8123)
cURL Examples
# Simple query
curl 'http://localhost:8123/?query=SELECT%20count()%20FROM%20events'
# With authentication
curl -u analytics:password 'http://localhost:8123/?query=SELECT%20count()%20FROM%20events'
# With compression
curl -H 'Accept-Encoding: gzip' \
'http://localhost:8123/?query=SELECT%20*%20FROM%20events%20LIMIT%2010'
Python HTTP Client
import requests
def query_clickhouse(sql):
response = requests.get(
'http://localhost:8123/',
params={'query': sql},
auth=('analytics', 'password')
)
return response.text
result = query_clickhouse('SELECT count() FROM events')
Compression Settings
Available Compression Types
| Type |
Speed |
Ratio |
Use Case |
| lz4 |
450 MB/s |
2-3x |
Real-time (default) |
| lz4hc |
200 MB/s |
3-5x |
Balanced |
| zstd |
140 MB/s |
5-15x |
Storage savings |
| none |
600 MB/s |
1x |
Maximum speed |
Configuring Compression
from clickhouse_driver import CompressionSettings
client = Client(
host='localhost',
compression=CompressionSettings(
type='lz4'
)
)
Query Settings
client = Client(
host='localhost',
settings={
# Execution timeouts
'max_query_execution_time': 60,
'timeout_before_checking_execution_speed': 10,
# Memory management
'max_memory_usage': 5000000000, # 5GB
'max_memory_usage_for_user': 10000000000, # 10GB
'memory_tracker_fault_probability': 0,
# GROUP BY optimization
'max_rows_to_group_by': 100000000,
'group_by_two_level_threshold': 100000,
'group_by_overflow_mode': 'break',
# JOIN optimization
'max_rows_in_join': 1000000,
'join_overflow_mode': 'throw',
# Distributed queries
'distributed_aggregation_memory_efficient': 1,
# Other
'use_uncompressed_cache': 1,
'max_insert_threads': 4
}
)
Setting Reference
| Setting |
Type |
Default |
Description |
max_query_execution_time |
int |
0 |
Max query time (seconds) |
max_memory_usage |
int |
0 |
Max memory per query |
max_rows_to_group_by |
int |
0 |
Max rows in GROUP BY |
group_by_overflow_mode |
string |
throw |
Overflow handling |
max_rows_in_join |
int |
0 |
Max rows in JOIN |
TLS/SSL Configuration
Basic TLS
client = Client(
host='clickhouse.example.com',
port=9440, # TLS port
user='default',
password='password',
ssl_verify=True,
ssl_certfile='/path/to/client.crt',
ssl_keyfile='/path/to/client.key',
ca_certs='/path/to/ca.crt'
)
TLS Parameters
| Parameter |
Type |
Default |
Description |
ssl_verify |
bool |
False |
Verify certificate |
ssl_check_hostname |
bool |
False |
Check hostname |
ssl_certfile |
string |
None |
Client certificate |
ssl_keyfile |
string |
None |
Client key |
ca_certs |
string |
None |
CA certificate |
Connection Pooling
Go Client Pooling
conn, err := clickhouse.Open(&clickhouse.Options{
Addr: []string{"localhost:9000"},
Auth: clickhouse.Auth{
Database: "default",
Username: "default",
Password: "",
},
MaxOpenConns: 5,
MaxIdleConns: 5,
ConnMaxLifetime: time.Hour,
})
Python Client
# Configure connection pool size
client = Client(
host='localhost',
settings={
'max_connections': 50,
'connection_timeout': 30
}
)
Table Configuration
MergeTree Settings
CREATE TABLE events (
timestamp DateTime,
event_type String,
user_id UInt32,
value Float32
) ENGINE = MergeTree()
ORDER BY (timestamp, user_id)
PRIMARY KEY (timestamp)
PARTITION BY toYYYYMM(timestamp)
SETTINGS
index_granularity = 8192,
min_compress_block_size = 65536,
max_compress_block_size = 1048576;
TTL Configuration
-- Auto-delete after 90 days
CREATE TABLE events (
timestamp DateTime,
event_type String,
value Float32
) ENGINE = MergeTree()
ORDER BY timestamp
PARTITION BY toYYYYMM(timestamp)
TTL timestamp + INTERVAL 90 DAY;
-- Tiered storage
CREATE TABLE analytics (
timestamp DateTime,
event_type String,
value Float32
) ENGINE = MergeTree()
ORDER BY timestamp
TTL (
timestamp + INTERVAL 30 DAY TO DISK 'hot',
timestamp + INTERVAL 365 DAY TO DISK 'cold'
);
HeliosDB-Specific Settings
Server Configuration
# heliosdb.toml
[clickhouse]
enabled = true
tcp_port = 9000
http_port = 8123
bind = "0.0.0.0"
max_connections = 10000
[clickhouse.auth]
password = "your_secure_password"
users_config = "/etc/heliosdb/clickhouse_users.xml"
[clickhouse.compression]
default = "lz4"
level = 3
[clickhouse.limits]
max_memory_usage = 10737418240 # 10GB
max_query_execution_time = 300
Environment Variables
| Variable |
Description |
HELIOSDB_CLICKHOUSE_TCP_PORT |
Native protocol port |
HELIOSDB_CLICKHOUSE_HTTP_PORT |
HTTP protocol port |
HELIOSDB_CLICKHOUSE_PASSWORD |
Authentication password |
HELIOSDB_CLICKHOUSE_MAX_MEMORY |
Max memory usage |
Cluster Configuration
Distributed Tables
-- Local table on each node
CREATE TABLE events_local (
timestamp DateTime,
event_type String,
value Float32
) ENGINE = MergeTree()
ORDER BY timestamp;
-- Distributed table
CREATE TABLE events_distributed AS events_local
ENGINE = Distributed(
cluster_name,
'default',
'events_local'
);
Cluster Configuration (XML)
<remote_servers>
<cluster_name>
<shard>
<replica>
<host>clickhouse-1</host>
<port>9000</port>
</replica>
</shard>
<shard>
<replica>
<host>clickhouse-2</host>
<port>9000</port>
</replica>
</shard>
</cluster_name>
</remote_servers>
Related: README.md | COMPATIBILITY.md | EXAMPLES.md
Last Updated: December 2025