معالجة الخطأ "تعذّر إلحاق البيانات بتنسيق Parquet" في ClickHouse
هل يظهر لك الخطأ "Cannot append data in format Parquet to file" في ClickHouse؟
عادةً ما يظهر الخطأ بالشكل التالي:
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.Parquet في المجلد data/default/parquet_test. إذا حاولت insert دفعة أخرى:
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)لا يمكنك الإلحاق بملفات Parquet في ClickHouse. ولكن يمكنك جعل ClickHouse ينشئ ملفًا جديدًا لكل INSERT عبر تمكين إعداد engine_file_allow_create_multiple_files. وإذا كان هذا الإعداد مُمكّنًا، فسيُنشأ ملف جديد عند كل عملية 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 (وملفًا جديدًا مع كل عملية insert لاحقة).