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

Arrow

输入输出别名

描述

Apache Arrow 提供两种内置的列式存储格式。ClickHouse 支持对这两种格式进行读写操作。 Arrow 是 Apache Arrow 的“文件模式(file mode)”格式,适用于内存中的随机访问。

数据类型匹配

下表列出了支持的数据类型,以及它们在 INSERTSELECT 查询中与 ClickHouse 数据类型 的对应关系。

Arrow data type (INSERT)ClickHouse data typeArrow data type (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

Array 类型可以嵌套,并且可以将 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 表中:

$ cat filename.arrow | clickhouse-client --query="INSERT INTO some_table FORMAT Arrow"

选择数据

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

$ clickhouse-client --query="SELECT * FROM {some_table} FORMAT Arrow" > {filename.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_framezstdnone(不压缩)lz4_frame
output_format_arrow_fixed_string_as_fixed_byte_array对 FixedString 列使用 Arrow 的 FIXED_SIZE_BINARY 类型而不是 Binary1
output_format_arrow_low_cardinality_as_dictionary启用将 LowCardinality 类型输出为 Arrow 的 Dictionary 类型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