Skip to content

ClickHouse Configuration Guide

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
)

Connection String Format

clickhouse://username:password@host:9000/database?compression=lz4

Connection Parameters

ParameterTypeDefaultDescription
hoststringlocalhostServer hostname
portint9000Native protocol port
userstringdefaultUsername
passwordstringNonePassword
databasestringdefaultDatabase name
compressionstringNoneCompression type (lz4, lz4hc, zstd)
ssl_verifyboolFalseVerify SSL certificate
ssl_check_hostnameboolFalseCheck SSL hostname

HTTP Protocol (Port 8123)

cURL Examples

Terminal window
# 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

TypeSpeedRatioUse Case
lz4450 MB/s2-3xReal-time (default)
lz4hc200 MB/s3-5xBalanced
zstd140 MB/s5-15xStorage savings
none600 MB/s1xMaximum speed

Configuring Compression

from clickhouse_driver import CompressionSettings
client = Client(
host='localhost',
compression=CompressionSettings(
type='lz4'
)
)

Query Settings

Performance 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

SettingTypeDefaultDescription
max_query_execution_timeint0Max query time (seconds)
max_memory_usageint0Max memory per query
max_rows_to_group_byint0Max rows in GROUP BY
group_by_overflow_modestringthrowOverflow handling
max_rows_in_joinint0Max 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

ParameterTypeDefaultDescription
ssl_verifyboolFalseVerify certificate
ssl_check_hostnameboolFalseCheck hostname
ssl_certfilestringNoneClient certificate
ssl_keyfilestringNoneClient key
ca_certsstringNoneCA 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

VariableDescription
HELIOSDB_CLICKHOUSE_TCP_PORTNative protocol port
HELIOSDB_CLICKHOUSE_HTTP_PORTHTTP protocol port
HELIOSDB_CLICKHOUSE_PASSWORDAuthentication password
HELIOSDB_CLICKHOUSE_MAX_MEMORYMax 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