[英]Clickhouse protobuf output format
我在 docker 中使用 clickhouse 服务器,其中只有 1 个表和几行。 我可以使用clickhouse 客户端(通过 TCP)或一些 GUI 工具(如 DBeaver(通过 HTTP))以默认格式请求所有数据。
SELECT * FROM some_table;
我也可以将格式更改为特殊的格式:
SELECT * FROM some_table FORMAT Pretty;
我想以 protobuf 格式从 clickhouse 请求数据。 查询如下所示:
SELECT * FROM some_table FORMAT Protobuf SETTINGS format_schema = 'proto_file:ProtoStructure';
我在与proto_file.proto
-client 相同的目录中有 proto_file.proto,所以我可以使 TCP 请求抛出它(成功)。
但是我不知道TCP的数据结构要求自己在我的程序中重现它。 所以我尝试在 HTTP 中执行相同的请求(通过 DBeaver)来拦截请求并重现它。 不幸的是,我无法在 DBeaver 中正确执行脚本,因为它在proto_file.proto
上抱怨( File not found
,我不知道将它放在哪里才能使其工作)。 我唯一知道的是,该格式由X-Clickhouse-Format
HTTP header 指定,但我不知道也找不到任何关于 HTTP 请求中我应该放置原型文件内容的信息。
所以,主要问题:是否有纯 HTTP 请求 clickhouse 的 protobuf 数据 output 格式的示例?
SETTINGS format_schema = 'proto_file:ProtoStructure'
-- 是clickhouse-client
应用程序的功能。 只有clickhouse-client
才有可能。
clickhouse-client
是 reach 客户端。 它使用 TPC/native 协议和 forms Protobuf
本身使用模式文件从clickhouse-server
查询数据。
clickhouse-server
还能够使用 .proto 文件(使用 HTTP 和 GRPC 协议)形成Protobuf
。 但在这种情况下,.proto 文件应该放在clickhouse-server
节点的/var/lib/clickhouse/format_schemas/
文件夹中。
例如我创建了.proto 文件
cat /var/lib/clickhouse/format_schemas/test.proto
syntax = "proto3";
message TestMessage {
int64 id = 1;
uint32 blockNo = 2;
string val1 = 3;
float val2 = 4;
uint32 val3 = 5;
};
使其可用chown clickhouse.clickhouse test.proto
现在我可以做到
curl -o out.protobuf 'localhost:8123/?format_schema=test:TestMessage&query=select+1+id+from+numbers(10)+format+Protobuf'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.