Résolution de l’erreur "Cannot Append Data in Parquet Format" dans ClickHouse
Obtenez-vous l’erreur "Cannot append data in format Parquet to file" dans ClickHouse ?
En règle générale, l’erreur se présente comme suit :
DB::Exception: Cannot append data in format Parquet to file, because this format doesn't support appends. (CANNOT_APPEND_TO_FILE)
Supposons que vous créiez une table utilisant le moteur de table File avec le format Parquet.
CREATE TABLE parquet_test
(
`x` UInt32,
`y` String
)
ENGINE = File(Parquet)Vous ne pouvez écrire dans la table qu’une seule fois :
INSERT INTO parquet_test VALUES
(1, 'Hello'),
(2, 'Hi')Cela crée un fichier nommé data.Parquet dans le dossier data/default/parquet_test. Si vous essayez ensuite d’insérer un autre batch :
INSERT INTO parquet_test VALUES
(3, 'World'),
(4, 'Bye')…vous obtenez l’erreur suivante :
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)Vous ne pouvez pas ajouter de données à des fichiers Parquet dans ClickHouse. En revanche, vous pouvez demander à ClickHouse de créer un nouveau fichier pour chaque INSERT en activant le paramètre engine_file_allow_create_multiple_files. Une fois ce paramètre activé, un nouveau fichier est créé à chaque insertion, avec un nom suivant ce modèle :
data.Parquet -> data.1.Parquet -> data.2.Parquet, etc. :
Essayons. Nous allons placer nos deux commandes dans un seul fichier nommé parquet.sql :
SET engine_file_allow_create_multiple_files = 1;
INSERT INTO default.parquet_test VALUES (3, 'World'), (4, 'Bye');Exécutez-le avec clickhouse-client :
./clickhouse client --queries-file parquet.sqlEt maintenant, vous verrez deux fichiers dans data/default/parquet_test (ainsi qu’un nouveau fichier pour chaque insert suivant).