Hash-Merge. Самый быстрый способ обновления или обогащения данных.

Всем привет.

Я думаю все вы в своей практике сталкивались с задачами, когда вам нужно сделать update таблицы или присоединить дополнительные поля.
И для этих целей вы использовали наверняка MERGE (конечно можно обойтись и без него, но это другая история)

Так вот кто помнит с какими трудностями связано использование Merge в SAS?

Да, правильно! С тем что данные приходиться предварительно подготавливать. Чаще всего вы обычно сортируете данные перед этим по ключу (либо строите индекс по ключу, что тоже как вариант подходит).

Так вот самый быстрый способ — так называемый Hash-Merge.

Думаю, мало кто его применят на практике ввиду его более сложного понимания, однако он действительно является самым быстрым.

Далее сравним время выполнения на примерах:

В качестве примера рассмотрим объединение двух таблиц: Large (315975) и small (63406).
Сначала объединим эти таблицы быстрым способом, т.е. с использованием hash join:
В логах видно, что время выполнения данной операции составилось 1 минута и 22 секунды:
Теперь сделаем туже самую операцию через обычный merge:
Конечно же для начала нам потребуется данные подготовить, т.е. сделать сортировку как в нашем случае с большой таблицей и построить индекс на маленькой.
И что мы видим:
А то что вся наша операция заняла: 5 секунд+ 3 мин 15 сек + 1 мин 7 сек = 4 минуты 28 секунд
Т.е. более чем в 3 раза быcтрее оказался hash-merge!
P.S. пример был взят от сюда.
С уважением, 
Николай.