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

Parquet

输入输出别名

描述

Apache Parquet 是一种列式存储格式,在 Hadoop 生态系统中广泛使用。ClickHouse 支持此格式的读取和写入操作。

数据类型匹配

下表显示了支持的数据类型,以及它们在 INSERTSELECT 查询中如何与 ClickHouse 数据类型匹配。

Parquet 数据类型 (INSERT)ClickHouse 数据类型Parquet 数据类型 (SELECT)
BOOLBoolBOOL
UINT8, BOOLUInt8UINT8
INT8Int8/Enum8INT8
UINT16UInt16UINT16
INT16Int16/Enum16INT16
UINT32UInt32UINT32
INT32Int32INT32
UINT64UInt64UINT64
INT64Int64INT64
FLOATFloat32FLOAT
DOUBLEFloat64DOUBLE
DATEDate32DATE
TIME (ms)DateTimeUINT32
TIMESTAMP, TIME (us, ns)DateTime64TIMESTAMP
STRING, BINARYStringBINARY
STRING, BINARY, FIXED_LENGTH_BYTE_ARRAYFixedStringFIXED_LENGTH_BYTE_ARRAY
DECIMALDecimalDECIMAL
LISTArrayLIST
STRUCTTupleSTRUCT
MAPMapMAP
UINT32IPv4UINT32
FIXED_LENGTH_BYTE_ARRAY, BINARYIPv6FIXED_LENGTH_BYTE_ARRAY
FIXED_LENGTH_BYTE_ARRAY, BINARYInt128/UInt128/Int256/UInt256FIXED_LENGTH_BYTE_ARRAY

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

不支持的 Parquet 数据类型有

  • FIXED_SIZE_BINARY
  • JSON
  • UUID
  • ENUM.

ClickHouse 表列的数据类型可以与插入的 Parquet 数据的相应字段不同。插入数据时,ClickHouse 根据上表解释数据类型,然后将数据转换为为 ClickHouse 表列设置的数据类型。

示例用法

插入和选择数据

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

$ cat {filename} | clickhouse-client --query="INSERT INTO {some_table} FORMAT Parquet"

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

$ clickhouse-client --query="SELECT * FROM {some_table} FORMAT Parquet" > {some_file.pq}

要与 Hadoop 交换数据,您可以使用 HDFS 表引擎

格式设置

设置描述默认值
input_format_parquet_case_insensitive_column_matching在将 Parquet 列与 CH 列匹配时忽略大小写。0
input_format_parquet_preserve_order从 Parquet 文件读取时避免重新排序行。通常会使速度慢得多。0
input_format_parquet_filter_push_down读取 Parquet 文件时,根据 WHERE/PREWHERE 表达式和 Parquet 元数据中的 min/max 统计信息跳过整个行组。1
input_format_parquet_bloom_filter_push_down读取 Parquet 文件时,根据 WHERE 表达式和 Parquet 元数据中的 Bloom 过滤器跳过整个行组。0
input_format_parquet_use_native_reader读取 Parquet 文件时,使用原生读取器而不是 Arrow 读取器。0
input_format_parquet_allow_missing_columns读取 Parquet 输入格式时允许缺少列1
input_format_parquet_local_file_min_bytes_for_seek本地读取(文件)执行查找所需的最小字节数,而不是在 Parquet 输入格式中使用忽略读取8192
input_format_parquet_enable_row_group_prefetch在 Parquet 解析期间启用行组预取。目前,只有单线程解析可以预取。1
input_format_parquet_skip_columns_with_unsupported_types_in_schema_inference在格式 Parquet 的 schema 推断中跳过具有不支持类型的列0
input_format_parquet_max_block_sizeParquet 读取器的最大块大小。65409
input_format_parquet_prefer_block_bytesParquet 读取器输出的平均块字节数16744704
output_format_parquet_row_group_size目标行组大小,以行为单位。1000000
output_format_parquet_row_group_size_bytes目标行组大小,以字节为单位,压缩前。536870912
output_format_parquet_string_as_string对于 String 列,使用 Parquet String 类型而不是 Binary。1
output_format_parquet_fixed_string_as_fixed_byte_array对于 FixedString 列,使用 Parquet FIXED_LENGTH_BYTE_ARRAY 类型而不是 Binary。1
output_format_parquet_version输出格式的 Parquet 格式版本。支持的版本:1.0、2.4、2.6 和 2.latest(默认)2.latest
output_format_parquet_compression_methodParquet 输出格式的压缩方法。支持的编解码器:snappy、lz4、brotli、zstd、gzip、none(未压缩)zstd
output_format_parquet_compliant_nested_types在 Parquet 文件 schema 中,对于列表元素,使用名称 'element' 而不是 'item'。这是 Arrow 库实现的遗留问题。通常会提高兼容性,但可能与某些旧版本的 Arrow 不兼容。1
output_format_parquet_use_custom_encoder使用更快的 Parquet 编码器实现。1
output_format_parquet_parallel_encoding在多个线程中执行 Parquet 编码。需要 output_format_parquet_use_custom_encoder。1
output_format_parquet_data_page_size目标页面大小,以字节为单位,压缩前。1048576
output_format_parquet_batch_size每隔这么多行检查页面大小。如果您的列的平均值大小超过几 KB,请考虑减小此值。1024
output_format_parquet_write_page_index添加将页面索引写入 Parquet 文件的功能。1
input_format_parquet_import_nested已过时的设置,不起作用。0