繁体   English   中英

Clickhouse protobuf output 格式

[英]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/文件夹中。

https://clickhouse.com/docs/en/operations/server-configuration-parameters/settings/#server_configuration_parameters-format_schema_path


例如我创建了.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM