Читая документацию , мы видим некоторую интересную информацию о режиме обновления (я добавил жирное форматирование):
Режим обновления - только строки, которые были обновлены в таблице результатов с момента последнего триггера, будут записаны во внешнее хранилище (доступно начиная с Spark 2.1.1). Обратите внимание, что это отличается от полного режима в том, что этот режим выводит только те строки, которые изменились с момента последнего запуска. Если запрос не содержит агрегатов, он будет эквивалентен режиму добавления .
Таким образом, для использования режима обновления должна быть какая-то агрегация, иначе все данные будут просто добавлены в конец таблицы результатов. В свою очередь, для использования агрегирования данных необходимо использовать один или несколько ключей в качестве ключа. Поскольку нужен ключ, легко узнать, была ли строка обновлена или нет - просто сравните значения с предыдущей итерацией таблицы (ключ говорит вам, с какой строкой сравнивать). В агрегатах, содержащих groupby
, столбцы, сгруппированные по столбцам, являются ключами.
Простые агрегаты, которые возвращают одно значение, не требуют ключа. Однако, поскольку возвращается только одно значение, оно будет обновлено, если это значение будет изменено. Примером здесь может быть взятие суммы столбца (без группировки).
Документация содержит изображение, которое дает хорошее понимание этого, см. «Модель быстрого примера» по ссылке выше.