跳转到主要内容

说明

ArrowStream 是 Apache Arrow 的“流模式”格式,专为内存中的流式处理而设计。

示例用法

在下面的示例中,我们使用 forex 数据集,可在 ClickHouse SQL playground 中使用。你可以使用主机 sql-clickhouse.clickhouse.com 和用户 demo (无需密码) ,通过 clickhouse-client 远程连接到它。forex 表位于 forex 数据库中,因此我们将其选作默认数据库:
forex 表用于存储货币汇率。我们可以通过查询 system.columns 来查看它的大小, 以及它在磁盘上的压缩情况:
Query
Response
与需要先获得完整结果后才能读取的 Arrow“文件模式”格式不同,ArrowStream 是以 record batch 序列的形式传输的,消费者可以在这些批次到达时 逐步读取。这使它非常适合将查询结果直接流式传输到 可视化或分析工具中,而无需先将整个数据集物化。 要流式传输结果,请通过 ClickHouse 的 HTTP interface 使用 POST 请求发送查询,并将响应作为 Arrow stream 读取。我们通过 output_format_arrow_compression_method 设置禁用 Arrow 输出的压缩, 以便消费者在收到批次时可以直接对其进行解码。 ArrowStream 输出是原始二进制数据,因此我们不将其打印到 终端,而是通过管道将其传给消费者。该 stream 是自描述的 (它携带 自己的 schema) ,因此这里我们将它直接通过管道传给 clickhouse-local,后者使用 --input-format ArrowStream 读取传入批次,并将其作为一张表进行查询。 forex 表很大,因此我们用 WHERE 谓词和 LIMIT 对远程查询加以限制,以使此示例保持简洁:
Response
任何支持 Arrow 的客户端都可以以增量方式读取同一个流,也就是说,它 会按批次逐个读取,而不是先将完整结果全部缓冲到内存中。例如, 使用 Apache Arrow JavaScript 库RecordBatchReader 会在每个记录批次从 服务器流式传输过来后立即返回该批次:
如需了解如何将 ClickHouse 中的流式 ArrowStream 数据接入 借助 Perspective 实现的实时可视化,请参阅 这篇博客文章 使用 ClickHouse、Apache Arrow 和 Perspective 实现实时流式可视化.

格式设置

ArrowStreamArrow 格式共享相同的格式设置。
最后修改于 2026年7月3日