الانتقال إلى المحتوى الرئيسي
إدخالإخراجاسم مستعار

الوصف

يقرأ HiveText تنسيق التسلسل النصي المستخدم في جداول Apache Hive (وهو التنسيق الذي ينتجه LazySimpleSerDe في Hive). وهو تنسيق نصي مفصول بمحددات، يشبه CSV، وتُفصل فيه الحقول باستخدام محدد Hive الافتراضي \x01 (Ctrl-A). ويمكن تهيئة محدد الحقول عبر input_format_hive_text_fields_delimiter. يُعد HiveText تنسيقًا للإدخال فقط. ولا تحتوي البيانات على صف ترويسة: إذ تُسنَد القيم موضعيًا إلى أعمدة الجدول الوجهة، لذلك تُؤخذ أسماء الأعمدة وأنواعها من الجدول (أو من البنية المقدَّمة صراحةً) بدلًا من استنتاجها من البيانات. وأثناء القراءة، يعالج ClickHouse التواريخ والأوقات في وضع أفضل جهد (راجع date_time_input_format)، ويملأ الحقول اللاحقة المحذوفة بالقيم الافتراضية للأعمدة، ويتجاوز الحقول التي لا يتعرف عليها. داخل الحقل، تُحلَّل القيم باستخدام قواعد الإفلات نفسها الخاصة بـ CSV بدلًا من محددات Hive المتداخلة. وعلى وجه الخصوص، يُقرأ العمود من النوع Array من التمثيل المحاط بأقواس (على سبيل المثال، "['a','b','c']")، وليس من القيم المفصولة بمحدد مجموعة Hive وهو \x02.
إعدادات المحددات المتداخلة ليس لها أي تأثيريتم قبول الإعدادين input_format_hive_text_collection_items_delimiter و input_format_hive_text_map_keys_delimiter لأغراض التوافق، لكن لا يُستخدمان حاليًا أثناء التحليل.
بشكل افتراضي، يُسمح بأن تحتوي الصفوف على عدد متغير من الحقول (راجع input_format_hive_text_allow_variable_number_of_columns): تُملأ الأعمدة المفقودة بالقيم الافتراضية في الصفوف التي تحتوي على حقول أقل من عدد حقول الجدول، وتُتجاوز الحقول الزائدة اللاحقة في الصفوف التي تحتوي على حقول إضافية.

مثال على الاستخدام

تستخدم الأمثلة أدناه input_format_hive_text_fields_delimiter لاستبدال محدد الحقول الافتراضي بفاصلة (,) حتى تكون ملفات الإدخال أسهل قراءةً.

قراءة ملف HiveText

لنفترض وجود ملف hive_data.txt يحتوي على حقول مفصولة بفواصل:
hive_data.txt
1,3
3,5,9
ننشئ جدولًا يحدّد أسماء الأعمدة وأنواعها، ثم نُدخل الملف فيه باستخدام FORMAT HiveText:
Query
CREATE TABLE test_tbl (a UInt16, b UInt32, c UInt32) ENGINE = MergeTree ORDER BY a;

INSERT INTO test_tbl FROM INFILE 'hive_data.txt'
SETTINGS input_format_hive_text_fields_delimiter = ','
FORMAT HiveText;

SELECT * FROM test_tbl;
Response
┌─a─┬─b─┬─c─┐
│ 1 │ 3 │ 0 │
│ 3 │ 5 │ 9 │
└───┴───┴───┘
لاحظ أن الصف الأول، 1,3، يحتوي على حقلين فقط، لذا يُملأ العمود المفقود c بقيمةِه الافتراضية 0.

عدد متغيّر من الأعمدة

مع الإعداد الافتراضي input_format_hive_text_allow_variable_number_of_columns = 1، فإن الصفوف التي تحتوي على حقول أكثر مما يحتويه الجدول تُتخطّى فيها ببساطة الحقول الزائدة في النهاية:
hive_extras.txt
1,2,3,4,5
6,7,8
Query
CREATE TABLE test_extras (a UInt16, b UInt32, c UInt32) ENGINE = MergeTree ORDER BY a;

INSERT INTO test_extras FROM INFILE 'hive_extras.txt'
SETTINGS input_format_hive_text_fields_delimiter = ','
FORMAT HiveText;

SELECT * FROM test_extras ORDER BY a;
Response
┌─a─┬─b─┬─c─┐
│ 1 │ 2 │ 3 │
│ 6 │ 7 │ 8 │
└───┴───┴───┘
يؤدي تعيين input_format_hive_text_allow_variable_number_of_columns = 0 بدلًا من ذلك إلى فرض عدد صارم من الحقول، ويؤدي وجود صف بعدد حقول أقل من عدد حقول الجدول إلى حدوث استثناء أثناء التحليل.

إعدادات التنسيق

الإعدادالوصفالافتراضي
input_format_hive_text_fields_delimiterالمحدد بين الحقول في Hive Text File\x01
input_format_hive_text_collection_items_delimiterالمحدد بين عناصر المجموعة (array أو map) في Hive Text File. يُقبل هذا الإعداد، لكنه لا يُستخدم حاليًا أثناء التحليل.\x02
input_format_hive_text_map_keys_delimiterالمحدد بين كل زوج مفتاح/قيمة في map في Hive Text File. يُقبل هذا الإعداد، لكنه لا يُستخدم حاليًا أثناء التحليل.\x03
input_format_hive_text_allow_variable_number_of_columnsتجاهل الأعمدة الإضافية في مُدخل Hive Text (إذا كان الملف يحتوي على أعمدة أكثر من المتوقع)، واعتبار الحقول المفقودة قيماً افتراضية1
آخر تعديل في ٢٥ يونيو ٢٠٢٦