Skip to main content

Shared ClickHouse connectivity library for Analytic AI services.

Project description

clickhouse_core

Shared ClickHouse connectivity library for Analytic AI services.

What it does

  • Creates ClickHouse clients using a single config model.
  • Supports both TCP (clickhouse-driver) and HTTP (clickhouse-connect).
  • Provides sync and async APIs with consistent return types.
  • Normalizes query results to list-of-dict rows.
  • Supports per-database pooled clients via a dbPoolMap.
  • Logs client creation and query execution.

Install

pip install -r requirements.txt

Usage (TCP)

from clickhouse_core import ClickHouseConfig, get_client

config = ClickHouseConfig(host="clickhouse", port=9000, database="default")
client = get_client(config)
rows = client.fetch_all("SELECT 1 AS one")

Usage (HTTP)

from clickhouse_core import ClickHouseConfig, get_client

config = ClickHouseConfig(host="clickhouse", port=8123, database="default", protocol="http")
client = get_client(config)
rows = client.fetch_all("SELECT 1 AS one")

Async usage

from clickhouse_core import ClickHouseConfig, get_async_client

config = ClickHouseConfig(host="clickhouse", port=9000, database="default")
client = get_async_client(config)
rows = await client.fetch_all("SELECT 1 AS one")

Pool manager (dbPoolMap)

from libs.clickhouse_core import ClickHouseConfig, ClickHousePoolFactory

base_config = ClickHouseConfig.from_env()
db_pool_map = {"default": 2, "analytics": 5}

pool = ClickHousePoolFactory(base_config, db_pool_map).build()

client = pool.get_client("default")
rows = client.fetch_all("SELECT 1")

async_client = pool.get_async_client("analytics")
rows = await async_client.fetch_all("SELECT 1")

Connection checks and per-DB credentials

  • For each DB in dbPoolMap, the pool manager checks connectivity once (using SELECT 1).
  • If connection fails, that DB is skipped and a warning is logged.
  • Per-DB env overrides are supported:
<DBNAME>_USERNAME
<DBNAME>_PASSWORD

If these are not set, the library falls back to CLICKHOUSE_USERNAME and CLICKHOUSE_PASSWORD from the base config.

By default, on-demand clients are allowed for DBs not in dbPoolMap. You can disable this by passing allow_on_demand=False to ClickHousePoolFactory(...).

Configuration

Environment variables supported (prefix CLICKHOUSE_):

  • CLICKHOUSE_HOST
  • CLICKHOUSE_PORT
  • CLICKHOUSE_DATABASE
  • CLICKHOUSE_USERNAME
  • CLICKHOUSE_PASSWORD
  • CLICKHOUSE_PROTOCOL (tcp|http)
  • CLICKHOUSE_SECURE (true/false)
  • CLICKHOUSE_CONNECT_TIMEOUT
  • CLICKHOUSE_SEND_RECEIVE_TIMEOUT
  • CLICKHOUSE_HTTP_VERIFY
  • CLICKHOUSE_COMPRESSION
  • CLICKHOUSE_LOG_NAME

Logging

The library uses Python's standard logging. Configure logging in your service to see client creation and query events. The logger name is taken from CLICKHOUSE_LOG_NAME or defaults to clickhouse_core.

Versioning

See RELEASE.md for the git tag workflow and version bump rules.

Helper scripts:

python scripts/bump_clickhouse_core_version.py patch
python scripts/build_clickhouse_core.py

Build & install (real package)

From libs/clickhouse_core:

python -m pip install --upgrade build
python -m build

Install locally:

pip install dist/clickhouse_core-0.1.0-py3-none-any.whl

Install with HTTP support:

pip install dist/clickhouse_core-0.1.0-py3-none-any.whl[http]

Protected build (Cython .pyd inside wheel)

Set the environment variable before building:

set CLICKHOUSE_CORE_CYTHONIZE=1
python -m build

This produces a platform-specific wheel (e.g., cp312-win_amd64) containing .pyd files.

Monorepo usage

If you are using the library directly from this repo (not installed as a package):

from libs.clickhouse_core import ClickHouseConfig, get_client

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

clickhouse_core-0.1.0.tar.gz (483.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

clickhouse_core-0.1.0-py3-none-any.whl (21.2 kB view details)

Uploaded Python 3

File details

Details for the file clickhouse_core-0.1.0.tar.gz.

File metadata

  • Download URL: clickhouse_core-0.1.0.tar.gz
  • Upload date:
  • Size: 483.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for clickhouse_core-0.1.0.tar.gz
Algorithm Hash digest
SHA256 162de484b3080be012129168525831ec5c87daa57f3f5c202ac351ff00e2d080
MD5 859a53517ed0380da20a59656c166c31
BLAKE2b-256 624d2d1c13bfc41655c30473a6dca1ea0bdc0da5e7c7b3df751ee2f78b8ebcf9

See more details on using hashes here.

File details

Details for the file clickhouse_core-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for clickhouse_core-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 94febd2d9431d6175c2f86e56694485347204ba0d7a529dd07103c8ee9f656cb
MD5 91fdb19c702db91161bba2aff5a735d3
BLAKE2b-256 2a00561458dd0dd61d7601b05b316105ad40440532530d5ce01774f64319f172

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page