跳到主要内容
跳到主要内容

Arrow

InputOutputAlias

描述

Apache Arrow 提供了两种内置的列式存储格式。 ClickHouse 支持这些格式的读和写操作。 Arrow 是 Apache Arrow 的“文件模式”格式。它旨在用于内存随机访问。

数据类型匹配

下表显示了支持的数据类型以及它们如何对应于 ClickHouse 的 数据类型INSERTSELECT 查询中。

Arrow 数据类型 (INSERT)ClickHouse 数据类型Arrow 数据类型 (SELECT)
BOOLBoolBOOL
UINT8, BOOLUInt8UINT8
INT8Int8/Enum8INT8
UINT16UInt16UINT16
INT16Int16/Enum16INT16
UINT32UInt32UINT32
INT32Int32INT32
UINT64UInt64UINT64
INT64Int64INT64
FLOAT, HALF_FLOATFloat32FLOAT32
DOUBLEFloat64FLOAT64
DATE32Date32UINT16
DATE64DateTimeUINT32
TIMESTAMP, TIME32, TIME64DateTime64TIMESTAMP
STRING, BINARYStringBINARY
STRING, BINARY, FIXED_SIZE_BINARYFixedStringFIXED_SIZE_BINARY
DECIMALDecimalDECIMAL
DECIMAL256Decimal256DECIMAL256
LISTArrayLIST
STRUCTTupleSTRUCT
MAPMapMAP
UINT32IPv4UINT32
FIXED_SIZE_BINARY, BINARYIPv6FIXED_SIZE_BINARY
FIXED_SIZE_BINARY, BINARYInt128/UInt128/Int256/UInt256FIXED_SIZE_BINARY

数组可以嵌套,并且可以有一个值为 Nullable 类型作为参数。 TupleMap 类型也可以嵌套。

支持在 INSERT 查询中使用 DICTIONARY 类型,并且对于 SELECT 查询有一个 output_format_arrow_low_cardinality_as_dictionary 设置,允许将 LowCardinality 类型作为 DICTIONARY 类型输出。

不支持的 Arrow 数据类型:

  • FIXED_SIZE_BINARY
  • JSON
  • UUID
  • ENUM.

ClickHouse 表列的数据类型不必与对应的 Arrow 数据字段匹配。插入数据时,ClickHouse 按照上表解释数据类型,然后 转换 数据为 ClickHouse 表列设置的数据类型。

示例用法

插入数据

您可以使用以下命令将 Arrow 数据从文件插入 ClickHouse 表中:

选择数据

您可以使用以下命令从 ClickHouse 表中选择数据并将其保存为 Arrow 格式的某个文件:

格式设置

设置描述默认值
input_format_arrow_allow_missing_columns允许在读取 Arrow 输入格式时缺少列1
input_format_arrow_case_insensitive_column_matching匹配 Arrow 列与 CH 列时忽略大小写。0
input_format_arrow_import_nested已过时的设置,不执行任何操作。0
input_format_arrow_skip_columns_with_unsupported_types_in_schema_inference在 Arrow 格式的模式推断中跳过具有不支持类型的列0
output_format_arrow_compression_methodArrow 输出格式的压缩方法。支持的编码: lz4_frame, zstd, none (未压缩)lz4_frame
output_format_arrow_fixed_string_as_fixed_byte_array对于 FixedString 列,使用 Arrow FIXED_SIZE_BINARY 类型而不是 Binary。1
output_format_arrow_low_cardinality_as_dictionary启用 LowCardinality 类型作为 Dictionary Arrow 类型输出0
output_format_arrow_string_as_string对于 String 列,使用 Arrow String 类型而不是 Binary1
output_format_arrow_use_64_bit_indexes_for_dictionary始终对 Arrow 格式中的字典索引使用 64 位整数0
output_format_arrow_use_signed_indexes_for_dictionary在 Arrow 格式中使用有符号整数作为字典索引1