跳至主要内容

DB::Exception: 无法将 Parquet 格式的数据追加到文件,因为此格式不支持追加。 (CANNOT_APPEND_TO_FILE)

·阅读时间:2 分钟

假设您创建了一个使用 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`, etc.:

让我们试一试。我们将把这两个命令放到一个名为 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。