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;
}