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;
}
Предыдущая
Следующая