Skip to main content

ClickHouse Operations CLI — health checks, data quality, schema migrations, and observability

Project description

chops

ClickHouse Operations CLI — health checks, data quality profiling, schema migrations, and observability from your terminal.

No more copy-pasting system table queries. One command to check cluster health, profile data quality, manage schema migrations, or find slow queries.

Quick Start

# Run directly with uvx (no install needed)
uvx chops health summary

# Or install with pip
pip install chops

Configuration

Set environment variables or pass flags:

export CLICKHOUSE_HOST=localhost
export CLICKHOUSE_PORT=8123
export CLICKHOUSE_USER=default
export CLICKHOUSE_PASSWORD=

Or use flags: chops --host myserver --user admin health summary

Config File

Create chops.toml (or .chops.toml) in your project directory, or ~/.config/chops/config.toml for global settings:

host = "localhost"
user = "default"

[profiles.prod]
host = "prod-cluster.example.com"
user = "admin"
password = "secret"
database = "analytics"

[profiles.staging]
host = "staging.example.com"
user = "readonly"

Use profiles with --profile or the CHOPS_PROFILE env var:

chops --profile prod health summary
CHOPS_PROFILE=staging chops dq profile events

Commands

Health & Observability

Command Description
chops health summary Cluster overview: version, uptime, databases, tables, parts, merges, queries
chops health table-sizes Disk usage by table, sorted by size
chops health slow-queries Top N slowest queries from query log
chops health merges Currently running merge operations
chops health running-queries Active queries with elapsed time and memory
chops health replication Replication status with lag and queue metrics
chops health partitions Partition analysis: detect merge pressure

Data Quality

Command Description
chops dq profile <table> Column-level profiling: null rates, cardinality, min/max
chops dq drift <table> Detect schema and data quality drift vs last snapshot
chops dq check <table> Run quality checks with configurable thresholds (CI-friendly exit codes)
chops dq freshness <table> Time since last row — OK/WARNING/CRITICAL with exit codes
chops dq anomalies <table> Detect anomalies in daily row counts vs historical baseline
chops dq compare <t1> <t2> Compare schema and row counts between two tables

Ad-hoc Query

Command Description
chops query <sql> Run any SQL query with table, JSON, or CSV output

Schema Migrations

Command Description
chops migrate init Create migrations directory
chops migrate new <name> Generate a timestamped migration file with up/down sections
chops migrate status Show applied vs pending migrations
chops migrate up Apply pending migrations (all or --steps N)
chops migrate down --confirm Revert most recent migration(s)
chops migrate validate Validate migration files: structure, naming, content

Examples

# Quick cluster health check
chops health summary

# Find which tables are eating disk
chops health table-sizes --limit 10

# Slowest queries in the last 6 hours
chops health slow-queries --hours 6

# Profile a table's data quality
chops dq profile mydb.events

# Run quality checks in CI (non-zero exit on failure)
chops dq check mydb.events --max-null-pct 5 --min-rows 1000

# Check if a streaming table is still receiving data
chops dq freshness mydb.events --warn 60 --critical 1440

# Detect row count anomalies (z-score based)
chops dq anomalies mydb.events --days 14

# Compare schemas between tables
chops dq compare mydb.events mydb.events_v2

# Ad-hoc query with different output formats
chops query "SELECT database, count() FROM system.tables GROUP BY database"
chops query "SELECT * FROM mydb.events LIMIT 10" --format json
chops query "SELECT * FROM mydb.events LIMIT 10" --format csv

# JSON output for automation
chops dq profile mydb.events --output json

# Schema migrations
chops migrate init
chops migrate new "add_user_scores_table"
chops migrate up
chops migrate status
chops migrate down --confirm

Migration files use a simple format with -- migrate:up and -- migrate:down sections:

-- migrate:up
CREATE TABLE mydb.user_scores (
    user_id UInt64,
    score Float32,
    updated_at DateTime DEFAULT now()
)
ENGINE = ReplacingMergeTree(updated_at)
ORDER BY user_id;

-- migrate:down
DROP TABLE IF EXISTS mydb.user_scores;

CI/CD Integration

chops dq check and chops dq freshness return non-zero exit codes on failure, making them usable in CI pipelines:

- name: Data quality gate
  run: |
    chops dq check production.orders --max-null-pct 2 --min-rows 10000
    chops dq freshness production.orders --warn 30 --critical 120

Development

git clone https://github.com/antonio-mello-ai/chops.git
cd chops
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

# Run tests
pytest

# Lint
ruff check src/ tests/

# Type check
mypy src/

License

MIT

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

chops-1.0.0.tar.gz (63.9 kB view details)

Uploaded Source

Built Distribution

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

chops-1.0.0-py3-none-any.whl (21.8 kB view details)

Uploaded Python 3

File details

Details for the file chops-1.0.0.tar.gz.

File metadata

  • Download URL: chops-1.0.0.tar.gz
  • Upload date:
  • Size: 63.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for chops-1.0.0.tar.gz
Algorithm Hash digest
SHA256 831f95f5c306c7d3126c29698605b95ce03f5b2e201de630ae3467d09a186fbf
MD5 1e98d0d77b7959dde56098023c46c243
BLAKE2b-256 c4b145dbcac1efd46dc8d33fcbc020086469080aca7d344a6eea8d98c83a121b

See more details on using hashes here.

Provenance

The following attestation bundles were made for chops-1.0.0.tar.gz:

Publisher: publish.yml on antonio-mello-ai/chops

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chops-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: chops-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 21.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for chops-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fc4e52caabb674ac012c65b2ec47a921de5eacd7018d992faf363455daaad397
MD5 c2068161167cf6e17f1d20376579af41
BLAKE2b-256 037dd71f72743162b8352fe0d4ce0b29be00c7340502e6ce6378b7b0c679d871

See more details on using hashes here.

Provenance

The following attestation bundles were made for chops-1.0.0-py3-none-any.whl:

Publisher: publish.yml on antonio-mello-ai/chops

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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