输入和输出数据格式
ClickHouse 支持已知的大多数文本和二进制数据格式。这使得它可以轻松集成到几乎任何工作数据管道中,从而利用 ClickHouse 的优势。
输入格式
输入格式用于
- 解析提供给
INSERT语句的数据 - 对基于文件的表(例如
File、URL或HDFS)执行SELECT查询 - 读取字典
选择合适的输入格式对于 ClickHouse 中的高效数据摄取至关重要。拥有超过 70 种支持的格式,选择性能最佳的选项可以显著影响插入速度、CPU 和内存使用率以及整体系统效率。为了帮助您浏览这些选择,我们对跨格式的摄取性能进行了基准测试,揭示了关键要点
- Native 格式是最有效的输入格式,提供最佳压缩、最低资源使用率和最小的服务器端处理开销。
- 压缩至关重要 - LZ4 以最小的 CPU 成本减少数据大小,而 ZSTD 以额外的 CPU 使用为代价提供更高的压缩率。
- 预排序影响不大,因为 ClickHouse 已经可以高效地排序。
- 批量处理显著提高效率 - 较大的批处理减少插入开销并提高吞吐量。
要深入了解结果和最佳实践,请阅读完整的 基准分析。要查看完整的测试结果,请探索 FastFormats 在线仪表板。
输出格式
支持输出的格式用于
- 安排
SELECT查询的结果 - 对基于文件的表执行
INSERT操作
格式概述
支持的格式是
您可以使用 ClickHouse 设置控制某些格式处理参数。有关更多信息,请阅读 设置 部分。
格式模式
通过设置 format_schema 设置来设置包含格式模式的文件名。在使用 Cap'n Proto 和 Protobuf 格式之一时,需要设置此设置。格式模式是该文件中的文件名和消息类型的名称的组合,用冒号分隔,例如 schemafile.proto:MessageType。如果该文件具有该格式的标准扩展名(例如,Protobuf 的 .proto),则可以省略它,在这种情况下,格式模式如下所示:schemafile:MessageType。
如果您通过 客户端 以交互模式输入或输出数据,则格式模式中指定的文件名可以包含绝对路径或相对于客户端当前目录的路径。如果您以 批处理模式 使用客户端,则出于安全原因,模式的路径必须是相对路径。
如果您通过 HTTP 接口 输入或输出数据,则格式模式中指定的文件名应位于服务器配置中 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使用最后一个列之后的定界符和行之间的定界符来查找下一行的开头,因此仅当其中至少一个不为空时,跳过错误才有效。