Skip to main content

LlamaIndex tool spec for chDB, the in-process ClickHouse engine: analytical SQL over local files, object storage, and remote databases with engine-level read-only safety.

Project description

LlamaIndex Tools Integration: chDB

Give agents analytical SQL over local and remote data with chDB, the in-process ClickHouse engine. The engine runs inside the Python process — no server to start, no connection string, no credentials — and queries local files (Parquet/CSV/JSON), object storage, and remote databases through ClickHouse table functions.

Installation

pip install llama-index-tools-chdb

Usage

from llama_index.tools.chdb import ChDBToolSpec
from llama_index.core.agent.workflow import FunctionAgent
from llama_index.llms.openai import OpenAI

spec = ChDBToolSpec(attachments={"events": "data/events.parquet"})

agent = FunctionAgent(
    tools=spec.to_tool_list(),
    llm=OpenAI(model="gpt-4o-mini"),
)

print(await agent.run("What are the top 5 event types by count?"))

The spec exposes seven tools, mirroring the tool surface chDB ships for agents (chdb.agents):

  • run_select_query — read-only ClickHouse SQL with {name:Type} parameter binding (full dialect: 1000+ functions, window functions, arrays, JSON)
  • list_databases, list_tables, describe_table, get_sample_data, list_functions — schema discovery, including describing table-function expressions such as s3('https://bucket/f.parquet','Parquet')
  • attach_file — register a local file as a named table (writable sessions only; on read-only sessions declare files via the attachments argument instead)

Every tool has an async twin (arun_select_query, …) backed by the engine's native async path, so to_tool_list() produces tools usable in both sync and async agents.

Safety defaults

  • Read-only by default. Sessions are locked with the ClickHouse readonly=2 setting: INSERT/CREATE/ALTER/DROP are rejected by the engine (not by prompt), while SELECT and the file()/s3()/url() table functions keep working. Pass read_only=False for a writable session.
  • Capped results. max_rows (default 1000) and max_bytes (default 1 MB) bound every payload; truncated results carry a truncated flag the agent can react to. max_execution_time adds an engine-side wall-clock limit.
  • Optional source allowlist. With file_allowlist=["/data/"], file-like sources may only read under the listed prefixes and DSN-based sources (postgresql(), mysql(), remote(), …) are refused.
  • Errors go to the model, not the run. Every call returns a JSON envelope — {"ok": true, "result": …} or {"ok": false, "error": {"code", "type", "message"}} — so a bad query becomes feedback the agent corrects instead of an exception.

Querying remote data

spec = ChDBToolSpec()
spec.run_select_query(
    "SELECT status, count() FROM url('https://example.com/logs.ndjson', 'JSONEachRow') GROUP BY status"
)

s3(...), postgresql(...), mysql(...), mongodb(...), remoteSecure(...), iceberg(...), and deltaLake(...) work the same way, subject to the read-only lock and allowlist.

Sharing and lifecycle

To control the engine's lifecycle yourself — or to share one session across several specs — create the engine explicitly and inject it:

from chdb.agents import ChDBTool
from llama_index.tools.chdb import ChDBToolSpec

engine = ChDBTool("analytics_dir", read_only=False)
spec = ChDBToolSpec(engine=engine)
...
engine.close()

spec.close() closes only an engine the spec created itself.

This package is maintained by the chDB team.

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

llama_index_tools_chdb-0.1.0.tar.gz (10.6 kB view details)

Uploaded Source

Built Distribution

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

llama_index_tools_chdb-0.1.0-py3-none-any.whl (10.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: llama_index_tools_chdb-0.1.0.tar.gz
  • Upload date:
  • Size: 10.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for llama_index_tools_chdb-0.1.0.tar.gz
Algorithm Hash digest
SHA256 bbb6a95b7af53c53e66c28eb0bda44d1feeb0b153f253739216ebcc1ac6da301
MD5 1ca88ad8b2ec8b9adce70610a5bda222
BLAKE2b-256 8dc53f65a65dd5a6299ed6e785e4c370427d0a19480afa8632dc9241a8fa89cc

See more details on using hashes here.

File details

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

File metadata

  • Download URL: llama_index_tools_chdb-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 10.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for llama_index_tools_chdb-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3b1863ba684189042380ce83975ca2442693e9e4f572acf738cab467f3468399
MD5 d5fde27a6d7770367a66a52b1690a5ec
BLAKE2b-256 3cb4ccbc75ecbd5e4e83a0ff2ee98b1861c479bd1df2257d9da04e8d7127210e

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