Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

解决 ClickHouse 中的“Cannot Append Data in Parquet Format”错误

解决 ClickHouse 中的 "Cannot Append Data in Parquet Format" 错误

你是否在 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)

假设你创建了一个使用 File 表引擎且格式为 Parquet 的表。

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 文件追加数据。不过,你可以启用 engine_file_allow_create_multiple_files 设置,让 ClickHouse 在每次 INSERT 时都创建一个新文件。启用后,每次插入都会创建一个按以下模式命名的新文件:

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 中看到两个文件 (此后每次插入都会新增一个新文件) 。

Navigation