跳到主要内容

解决 ClickHouse 中 “无法以 Parquet 格式追加数据” 错误

·2 分钟阅读
您是否在 ClickHouse 中遇到 “Cannot append data in format Parquet to file” 错误?让我们看看如何解决它。

解决 ClickHouse 中 “无法以 Parquet 格式追加数据” 错误

您是否在 ClickHouse 中遇到 “Cannot append data in format Parquet to file” 错误?

通常,该错误报告为

DB::Exception: Cannot append data in format Parquet to file, because this format doesn't support appends. (CANNOT_APPEND_TO_FILE)

假设您创建一个使用 Parquet 格式的 File 表引擎的表。

CREATE TABLE parquet_test
(
`x` UInt32,
`y` String
)
ENGINE = File(Parquet)

您可以将数据写入表一次

INSERT INTO parquet_test VALUES
(1, 'Hello'),
(2, 'Hi')

这将在 data/default/parquet_test 文件夹中创建一个名为 data.Parquet 的文件。如果您尝试插入另一个批次

INSERT INTO parquet_test VALUES
(3, 'World'),
(4, 'Bye')

...您会收到以下错误

Code: 641. DB::Exception: Received from localhost:9000. DB::Exception: Cannot append data in format Parquet to file, because this format doesn't support appends. You can allow to create a new file on each insert by enabling setting engine_file_allow_create_multiple_files. (CANNOT_APPEND_TO_FILE)

您无法在 ClickHouse 中追加到 Parquet 文件。但是,您可以告诉 ClickHouse 为每个 INSERT 创建一个新文件,方法是启用 engine_file_allow_create_multiple_files 设置。如果启用,则每次插入都会创建一个新文件,其名称遵循以下模式

data.Parquet -> data.1.Parquet -> data.2.Parquet 等。

让我们试一试。我们将把两个命令放入一个名为 parquet.sql 的文件中

SET engine_file_allow_create_multiple_files = 1;

INSERT INTO default.parquet_test VALUES (3, 'World'), (4, 'Bye');

使用 clickhouse-client 运行它

./clickhouse client --queries-file parquet.sql

现在您将在 data/default/parquet_test 中看到两个文件(以及每个后续插入的新文件)。

注意

engine_file_allow_create_multiple_files 设置适用于其他不可追加的数据格式,例如 JSON 和 ORC。