Перейти к основному содержанию
ВводВыводПсевдоним

Описание

HiveText читает формат текстовой сериализации, используемый таблицами Apache Hive (формат, создаваемый LazySimpleSerDe в Hive). Это текстовый формат с разделителями, похожий на CSV, в котором поля разделяются стандартным для Hive разделителем \x01 (Ctrl-A). Разделитель полей можно настроить через input_format_hive_text_fields_delimiter. HiveText — это формат только для ввода. У данных нет строки заголовка: значения сопоставляются со столбцами целевой таблицы по позиции, поэтому имена столбцов и типы берутся из таблицы (или из явно заданной структуры), а не определяются автоматически по данным. При чтении ClickHouse разбирает даты и время в режиме best-effort (см. 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 вместо этого требует строгого количества полей, и если в строке полей меньше, чем в таблице, возникает исключение при разборе.

Настройки формата

SettingDescriptionDefault
input_format_hive_text_fields_delimiterРазделитель между полями в Hive Text File\x01
input_format_hive_text_collection_items_delimiterРазделитель между элементами коллекции (массива или 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
Последнее изменение 25 июня 2026 г.