官方提供了客户端,
地址:https://github.com/ClickHouse/clickhouse-cpp
下载后,使用ubuntu18.04编译:
mkdir build
cd build
cmake ..
make -j8
生成的文件在build目录,
新建一个目录
cd ..
mkdir robin
cd robin
将静态库拷贝过来
libabsl-lib.a
libcityhash-lib.a
libclickhouse-cpp-lib-static.a
liblz4-lib.a
准备一个cpp文件:
#include <clickhouse/client.h>
#include <iostream>
#include "MyTimer.h"
using namespace clickhouse;
using namespace std;
using namespace LibNet;
int main() {
/// Initialize client connection.
ClientOptions opt;
opt.SetHost("10.128.6.16");
opt.SetPort(9000);
Client client(opt);
// string sql = "CREATE DATABASE IF NOT EXISTS test ENGINE = Memory";
// string sql = "create database IF NOT EXISTS test engine = Ordinary";
/// Create a table.
try
{
string sql = "CREATE TABLE IF NOT EXISTS test.numbers (id UInt64, name String) "
"ENGINE = ReplacingMergeTree PRIMARY KEY id " // MergeTree
"order by id";
client.Execute(sql);
}
catch(const std::exception& e)
{
std::cerr << e.what() << '\n';
return 0;
}
Timer timer;
timer.start();
/// 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");
for (int i=0; i<20000; i++)
{
name->Append(std::to_string(i));
id->Append(i);
}
block.AppendColumn("id", id);
block.AppendColumn("name", name);
try
{
client.Insert("test.numbers", block);
}
catch(const std::exception& e)
{
std::cerr << e.what() << '\n';
}
}
double delta = timer.stop_delta_ms();
cout << delta << endl;
/// Select values inserted in the previous step.
client.Select("SELECT id, name FROM test.numbers limit 1", [](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 test.numbers");
return 0;
}
这个代码没有建库,首先要确保database test存在,
可以使用dbeaver建立一个测试库:
create database IF NOT EXISTS test engine = Ordinary
手动编译一下:
g++ test.cc -std=c++17 -g -o test -I../ -L./
-Bstatic -lclickhouse-cpp-lib-static
-lcityhash-lib
-labsl-lib
-llz4-lib
然后就可以看到数据了!
2w条短数据,只用了10毫秒就写完了。
备注:社区版的dbeaver不要使用最新的,从window store下载的有BUG,无法正常显示tree,从其他网站找个一个,我用版本【21.3.2.202112261636】。