ClickHouse C++ client [![Linux](https://github.com/ClickHouse/clickhouse-cpp/actions/workflows/linux.yml/badge.svg)](https://github.com/ClickHouse/clickhouse-cpp/actions/workflows/linux.yml) [![macOS](https://github.com/ClickHouse/clickhouse-cpp/actions/workflows/macos.yml/badge.svg)](https://github.com/ClickHouse/clickhouse-cpp/actions/workflows/macos.yml) [![Windows MSVC](https://github.com/ClickHouse/clickhouse-cpp/actions/workflows/windows_msvc.yml/badge.svg)](https://github.com/ClickHouse/clickhouse-cpp/actions/workflows/windows_msvc.yml) [![Windows mingw](https://github.com/ClickHouse/clickhouse-cpp/actions/workflows/windows_mingw.yml/badge.svg)](https://github.com/ClickHouse/clickhouse-cpp/actions/workflows/windows_mingw.yml)
=====
C++ client for [ClickHouse](https://clickhouse.com/).
## Supported data types
* Array(T)
* Date
* DateTime, DateTime64
* DateTime([timezone]), DateTime64(N, [timezone])
* Decimal32, Decimal64, Decimal128
* Enum8, Enum16
* FixedString(N)
* Float32, Float64
* IPv4, IPv6
* Nullable(T)
* String
* LowCardinality(String) or LowCardinality(FixedString(N))
* Tuple
* UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64
* Int128
* UUID
* Map
* Point, Ring, Polygon, MultiPolygon
## Dependencies
In the most basic case one needs only:
- a C++-17-complaint compiler,
- `cmake` (3.12 or newer), and
- `ninja`
Optional dependencies:
- openssl
- liblz4
- libabsl
## Building
```sh
$ mkdir build .
$ cd build
$ cmake .. [-DBUILD_TESTS=ON]
$ make
```
Plese refer to the workflows for the reference on dependencies/build options
- https://github.com/ClickHouse/clickhouse-cpp/blob/master/.github/workflows/linux.yml
- https://github.com/ClickHouse/clickhouse-cpp/blob/master/.github/workflows/windows_msvc.yml
- https://github.com/ClickHouse/clickhouse-cpp/blob/master/.github/workflows/windows_mingw.yml
- https://github.com/ClickHouse/clickhouse-cpp/blob/master/.github/workflows/macos.yml
## Example application build with clickhouse-cpp
There are various ways to integrate clickhouse-cpp with the build system of an application. Below example uses the simple approach based on
submodules presented in https://www.youtube.com/watch?v=ED-WUk440qc .
- `mkdir clickhouse-app && cd clickhouse-app && git init`
- `git submodule add https://github.com/ClickHouse/clickhouse-cpp.git contribs/clickhouse-cpp`
- `touch app.cpp`, then copy the following C++ code into that file
```cpp
#include <iostream>
#include <clickhouse/client.h>
using namespace clickhouse;
int main()
{
/// Initialize client connection.
Client client(ClientOptions().SetHost("localhost"));
/// Create a table.
client.Execute("CREATE TABLE IF NOT EXISTS default.numbers (id UInt64, name String) ENGINE = Memory");
/// Insert some values.
{
Block block;
auto id = std::make_shared<ColumnUInt64>();
id->Append(1);
id->Append(7);
auto name = std::make_shared<ColumnString>();
name->Append("one");
name->Append("seven");
block.AppendColumn("id" , id);
block.AppendColumn("name", name);
client.Insert("default.numbers", block);
}
/// Select values inserted in the previous step.
client.Select("SELECT id, name FROM default.numbers", [] (const Block& block)
{
for (size_t i = 0; i < block.GetRowCount(); ++i) {
std::cout << block[0]->As<ColumnUInt64>()->At(i) << " "
<< block[1]->As<ColumnString>()->At(i) << "\n";
}
}
);
/// Delete table.
client.Execute("DROP TABLE default.numbers");
return 0;
}
```
- `touch CMakeLists.txt`, then copy the following CMake code into that file
```cmake
cmake_minimum_required(VERSION 3.12)
project(application-example)
set(CMAKE_CXX_STANDARD 17)
add_subdirectory(contribs/clickhouse-cpp)
add_executable(${PROJECT_NAME} "app.cpp")
target_include_directories(${PROJECT_NAME} PRIVATE contribs/clickhouse-cpp/ contribs/clickhouse-cpp/contrib/absl)
target_link_libraries(${PROJECT_NAME} PRIVATE clickhouse-cpp-lib)
```
- run `rm -rf build && cmake -B build -S . && cmake --build build -j32` to remove remainders of the previous builds, run CMake and build the
application. The generated binary is located in location `build/application-example`.
## Thread-safety
⚠ Please note that `Client` instance is NOT thread-safe. I.e. you must create a separate `Client` for each thread or utilize some synchronization techniques. ⚠
## Retries
If you wish to implement some retry logic atop of `clickhouse::Client` there are few simple rules to make you life easier:
- If previous attempt threw an exception, then make sure to call `clickhouse::Client::ResetConnection()` before the next try.
- For `clickhouse::Client::Insert()` you can reuse a block from previous try, no need to rebuild it from scratch.
See https://github.com/ClickHouse/clickhouse-cpp/issues/184 for details.
没有合适的资源?快使用搜索试试~ 我知道了~
C++ client library for ClickHouse.zip
共199个文件
h:91个
cpp:57个
cc:12个
需积分: 5 0 下载量 134 浏览量
2023-12-27
00:36:07
上传
评论
收藏 552KB ZIP 举报
温馨提示
C++ client library for ClickHouse
资源推荐
资源详情
资源评论
收起资源包目录
C++ client library for ClickHouse.zip (199个子文件)
BUCK 269B
BUCK 196B
BUCK 185B
BUCK 150B
BUCK 147B
lz4.c 99KB
lz4hc.c 65KB
gtest.cc 243KB
gtest-death-test.cc 61KB
gtest-port.cc 47KB
gtest-printers.cc 17KB
city.cc 15KB
int128.cc 14KB
gtest-filepath.cc 14KB
gtest-test-part.cc 4KB
gtest-typed-test.cc 4KB
gtest-matchers.cc 4KB
gtest-all.cc 2KB
gtest_main.cc 2KB
.clang-format 252B
version.cmake 3KB
Findlz4.cmake 1KB
Findcityhash.cmake 856B
cpp17.cmake 243B
openssl.cmake 158B
subdirs.cmake 120B
COPYING 1KB
client_ut.cpp 53KB
columns_ut.cpp 31KB
client.cpp 31KB
Column_ut.cpp 19KB
lowcardinality.cpp 16KB
main.cpp 16KB
column_array_ut.cpp 13KB
socket.cpp 13KB
types.cpp 12KB
sslsocket.cpp 12KB
roundtrip_tests.cpp 12KB
utils.cpp 12KB
itemview_ut.cpp 9KB
type_parser.cpp 9KB
performance_tests.cpp 9KB
factory.cpp 9KB
date.cpp 9KB
string.cpp 9KB
type_parser_ut.cpp 9KB
ssl_ut.cpp 8KB
decimal.cpp 7KB
types_ut.cpp 6KB
value_generators.cpp 6KB
compressed.cpp 5KB
utils_ut.cpp 5KB
low_cardinality_nullable_tests.cpp 5KB
CreateColumnByType_ut.cpp 4KB
array_of_low_cardinality_tests.cpp 4KB
geo.cpp 4KB
array.cpp 3KB
socket_ut.cpp 3KB
enum.cpp 3KB
numeric.cpp 3KB
itemview.cpp 3KB
ip6.cpp 3KB
ip4.cpp 3KB
tuple.cpp 3KB
block.cpp 3KB
nullable.cpp 2KB
block_ut.cpp 2KB
abnormal_column_names_test.cpp 2KB
wire_format.cpp 2KB
output.cpp 2KB
tcp_server.cpp 2KB
map.cpp 2KB
uuid.cpp 2KB
input.cpp 2KB
roundtrip_column.cpp 2KB
bench.cpp 1KB
readonly_client_test.cpp 1KB
connection_failed_client_test.cpp 937B
stream_ut.cpp 564B
endpoints_iterator.cpp 487B
column.cpp 471B
query.cpp 402B
main.cpp 135B
platform.cpp 22B
.gitattributes 2KB
.gitignore 4KB
gtest.h 92KB
gtest-port.h 83KB
gtest-internal.h 60KB
gtest-internal-inl.h 46KB
lz4.h 39KB
gtest-printers.h 35KB
int128.h 35KB
gtest-param-util.h 34KB
gtest-matchers.h 32KB
config.h 26KB
attributes.h 26KB
gtest-param-test.h 22KB
lz4hc.h 21KB
gtest-typed-test.h 16KB
共 199 条
- 1
- 2
资源评论
Lei宝啊
- 粉丝: 2080
- 资源: 1330
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功