ClickHouse 支持大多数已知的文本和二进制数据格式。这使其能够轻松集成到几乎任何现有的数据管道中, 从而充分发挥 ClickHouse 的优势。
输入格式
输入格式用于:
- 解析提供给
INSERT语句的数据 - 从
File、URL或HDFS等以文件为后端的表执行SELECT查询 - 读取字典
选择合适的输入格式,对于在 ClickHouse 中高效摄取数据至关重要。支持的格式超过 70 种, 选择性能最佳的格式会显著影响插入速度、CPU 和内存占用,以及整体系统 效率。为了帮助你更好地在这些选项之间做出选择,我们对不同格式的摄取性能进行了基准测试,并总结出以下关键结论:
- Native 格式是效率最高的输入格式,具备最佳压缩效果、最低 资源占用,以及最小的服务端处理开销。
- 压缩至关重要 - LZ4 能以极低的 CPU 代价减小数据体积,而 ZSTD 则能提供更高的压缩率,但 会增加 CPU 使用。
- 预排序的影响较为有限,因为 ClickHouse 本身已经能够高效完成排序。
- 批处理可显著提升效率 - 更大的批次可减少插入开销并提高吞吐量。
如需深入了解测试结果和最佳实践, 请阅读完整的基准分析。 如需查看完整测试结果,请访问 FastFormats 在线仪表板。
输出格式
支持输出的格式可用于:
- 格式化
SELECT查询结果 - 对以文件为后端的表执行
INSERT操作
格式概述
支持的格式如下:
您可以通过 ClickHouse 设置控制某些格式处理参数。更多信息,请参阅 设置 部分。
JSON 特有的其他设置记录在 JSON 格式设置 页面中。
格式 schema
包含格式 schema 的文件名由设置 format_schema 指定。
使用 Cap'n Proto 和 Protobuf 这两种格式之一时,必须设置此项。
格式 schema 由文件名和该文件中的消息类型名称组成,二者以冒号分隔,
例如 schemafile.proto:MessageType。
如果文件使用该格式的标准扩展名 (例如 Protobuf 的 .proto) ,
则可以省略扩展名,此时格式 schema 形如 schemafile:MessageType。
如果你通过处于交互模式的客户端输入或输出数据,则格式 schema 中指定的文件名 可以包含绝对路径,或相对于客户端当前目录的路径。 如果你在批次模式下使用客户端,出于安全原因,schema 的路径必须是相对路径。
如果你通过 HTTP 接口 输入或输出数据,则格式 schema 中指定的文件名 应位于服务器配置中 format_schema_path 指定的目录下。
跳过错误
某些格式 (如 CSV、TabSeparated、TSKV、JSONEachRow、Template、CustomSeparated 和 Protobuf) 在发生解析错误时,可以跳过损坏的行,并从下一行的开头继续解析。请参阅设置 input_format_allow_errors_num 和
input_format_allow_errors_ratio。
限制:
- 发生解析错误时,
JSONEachRow会跳过直到换行符 (或 EOF) 之前的所有数据,因此各行必须以\n分隔,才能正确统计错误数。 Template和CustomSeparated通过最后一列后的分隔符以及行间分隔符来定位下一行的开头,因此只有当其中至少一个非空时,才支持跳过错误。