Сглаженные таблицы против ручного обновления
В настоящее время у меня есть таблица (A) со столбцом, в котором хранятся некоторые агрегированные значения из другой таблицы (B). При изменении данных в таблице B этот столбец обновляется соответствующим образом через обычные UPDATE A ... FROM SELECT B
заявление.
Vertica 8.1 предоставляет соответствующую функцию: плоские таблицы. С SET USING
ограничение выглядит как тот же процесс: по требованию (по вызову REFRESH_COLUMNS()
) прочитайте исходную таблицу и запишите результаты в целевой столбец.
Документация говорит о преимуществах плоских таблиц слишком кратко:
Плоские таблицы могут включать столбцы, которые получают свои значения, запрашивая другие таблицы. Операции с исходными таблицами и сглаженной таблицей не связаны; изменения в одном не распространяются автоматически на другой. Это минимизирует накладные расходы, которые в противном случае типичны для денормализованных таблиц.
Да, это ограничение выглядит чище, чем ручное обновление. Но я просто хочу понять: это только "синтаксический сахар" с теми же операциями под капотом или совершенно другим способом? Есть ли у нее какие-либо преимущества или недостатки в производительности? Может быть, кто-то уже использует его и может поделиться собственным опытом.
1 ответ
Я задокументировал функцию сглаженных таблиц, но это было некоторое время назад, поэтому я обратился к ведущему разработчику, чтобы освежить свою память. Его ответ:
Да, в некоторых отношениях уплощенные таблицы в некотором роде похожи на "синтаксический сахар". Тем не менее, он имеет несколько оптимизаций, которые выделяют его. Например, вы можете обновить столбцы с помощью ограничений SET USING в режиме UPDATE, что позволяет избежать изменения неизмененных строк. Кроме того, нет DML (по крайней мере, в Vertica), который позволял бы обновлять несколько столбцов одновременно.