Merge
Операция Merge производит слияние входных таблиц в одну. На выходе получается таблица, множество строк которой равно объединению всех строк исходных таблиц. В зависимости от опции mode слияние выполняется по-разному:
mode = unordered— происходит только объединение списков чанков исходных таблиц. Такой режим слияния работает по умолчанию;mode = sorted— производится объединение исходных таблиц с сохранением сортированности. Колонки, по которым должна быть отсортирована выходная таблица, задаются параметромmerge_by;mode = ordered— сохраняется порядок чанков списка исходных таблиц. То есть еслиT1 = (A1, A2), T2 = (B1, B2, B3), тоMerge(T1, T2) = (A1, A2, B1, B2, B3).
Общие параметры для всех типов операций описаны в разделе Настройки операций.
У операции Merge поддерживаются следующие дополнительные параметры (в скобках указаны значения по умолчанию, если заданы):
mode(unordered) — тип операции Merge, может принимать значения:unordered,sorted,ordered;input_table_paths— список входных таблиц с указанием полных путей (не может быть пустым);output_table_path— полный путь к выходной таблице;combine_chunks(false) — настройка, активирующая укрупнение чанков;force_transform(false) — принудительно прочесть все данные исходных таблиц;merge_by— список колонок, по которому следует производить sorted merge;job_count,data_weight_per_job(256 Mb) — опции, которые указывают сколько джобов должно быть запущено, имеют рекомендательный характер. Опцияjob_countимеет приоритет надdata_weight_per_job. Если указатьjob_countменьшим, либо равнымtotal_input_row_count, то для unordered и ordered merge гарантируется, что количество джобов будет точно соблюдено, если это не противоречит ограничению на максимальное число джобов в операции. В частности, еслиjob_countравенtotal_input_row_count, то в каждый джоб попадёт ровно одна строка, еслиjob_countравен единице, то будет запущен ровно один джоб.schema_inference_mode(auto) — режим определения схемы. Доступные значения: auto, from_input, from_output. Подробности в разделе Схема данных.
В случае, когда опция force_transform имеет значение false, операция выполняется так, чтобы минимизировать количество запущенных джобов. В лучшем случае, объединение будет произведено на уровне метаинформации. Иначе все чанки обязательно будут прочитаны.
Помимо места на диске, данные расходуют чанковую квоту аккаунта, в котором находятся. Операцию Merge имеет смысл запускать и над одной таблицей, чтобы «укрупнить» существующие чанки. Для этого необходимо выставить опцию combine_chunks=true. Подробнее про квоты аккаунтов в разделе Квоты.
Пример спецификации
{
pool = "my_cool_pool";
mode = "sorted";
merge_by = [ "field1"; "field2" ];
job_count = 100;
input_table_paths = [ "//tmp/input_table1"; "//tmp/input_table2" ];
output_table_path = "//tmp/output_table";
combine_chunks = %true;
}