A C++17 client library for connecting to and interacting with ClickHouse databases.
ClickHouse-cpp is a C++ client library for the ClickHouse database. It enables C++ applications to connect to ClickHouse servers, execute SQL queries, insert data in bulk, and leverage ClickHouse's advanced features like asynchronous inserts and external data queries. It solves the problem of integrating ClickHouse's high-performance analytical database directly into C++ codebases.
C++ developers building applications that need to interact with ClickHouse databases, particularly those requiring high-performance data insertion, complex query execution, or integration with existing C++ systems.
Developers choose ClickHouse-cpp for its native C++ API, comprehensive support for ClickHouse data types, and efficient batch insertion capabilities. It provides a lightweight, type-safe alternative to generic database connectors, optimized specifically for ClickHouse's features and performance characteristics.
C++ client library for ClickHouse
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Handles ClickHouse's rich data types including Arrays, Decimals, IP addresses, and UUIDs, as detailed in the README's supported data types list.
Supports batched insertion patterns with BeginInsert/SendInsertBlock methods, allowing memory-efficient handling of large datasets, demonstrated in the Batch Insertion section.
Builds seamlessly on Linux, macOS, and Windows using CMake and a C++17 compiler, backed by CI/CD workflows shown in the README badges.
Enables configuration of asynchronous inserts to improve performance, with specific examples and version-aware settings provided in the Asynchronous inserts section.
Explicitly stated in the Thread-safety section that Client instances are not thread-safe, necessitating additional synchronization or per-thread clients.
Requires CMake 3.12+, C++17 compiler, and optional dependencies like openssl, which can be cumbersome for new users, as outlined in the dependencies and building sections.
Data insertion and querying involve verbose code with Block and Column objects, lacking higher-level abstractions for common operations, as seen in the example code.