Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Как и стандартные представления, материализованные представления являются результатами запроса, и вы обращаетесь к ним так же, как и таблица. В отличие от стандартных представлений, которые перекомпьютируют результаты для каждого запроса, материализованные представления кэшируют результаты и обновляют их по указанному интервалу. Поскольку материализованное представление предварительно вычисляется, запросы к нему могут выполняться гораздо быстрее, чем запросы к обычным представлениям.
Материализованное представление — это декларативный объект потока обработки данных. Он включает запрос , определяющий его, поток обновления и кэшированные результаты для быстрого доступа. Материализованное представление:
- Отслеживает изменения в восходящих данных.
- При активации постепенно обрабатывает измененные данные и применяет необходимые преобразования.
- Поддерживает выходную таблицу в синхронизации с исходными данными на основе указанного интервала обновления.
Материализованные представления являются хорошим выбором для многих преобразований:
- Вместо строк используется логика кэшированных результатов. На самом деле вы просто пишете запрос.
- Они всегда верны. Все необходимые данные обрабатываются, даже если он поступает поздно или не упорядочен.
- Они часто постепенные. Databricks попытается выбрать соответствующую стратегию, которая сводит к минимуму затраты на обновление материализованного представления.
Как материализованные представления работают
На следующей схеме показано, как работают материализованные представления.
Схема
Материализованные представления определяются и обновляются одним потоком обработки данных. Вы можете явно определить материализованные представления в исходном коде конвейера. Таблицы, определенные конвейером, не могут быть изменены или обновлены любым другим конвейером.
При создании материализованного представления за пределами конвейера в Databricks SQL, Databricks создает скрытый конвейер, который используется для обновления представления.
Databricks использует каталог Unity для хранения метаданных о представлении, включая запрос и дополнительные системные представления, используемые для добавочных обновлений. Кэшированные данные материализуются в облачном хранилище.
Следующий пример объединяет две таблицы и сохраняет результат в актуальном состоянии с помощью материализованного представления.
Питон
import dlt
@dlt.table
def regional_sales():
partners_df = spark.read.table("partners")
sales_df = spark.read.table("sales")
return (
partners_df.join(sales_df, on="partner_id", how="inner")
)
При использовании одного или нескольких spark.readStream
вызовов в методе он изменяет представление в таблицу потоковой передачи вместо материализованного представления.
SQL
CREATE OR REPLACE MATERIALIZED VIEW regional_sales
AS SELECT *
FROM partners
INNER JOIN sales ON
partners.partner_id = sales.partner_id;
Автоматические инкрементные обновления
Когда конвейер, определяющий материализованное представление, активируется, представление автоматически сохраняется в актуальном состоянии, часто постепенно. Databricks пытается обработать только данные, которые необходимо обработать, чтобы сохранить материализованное представление в актуальном состоянии. Материализованное представление всегда показывает правильный результат, даже если требуется полностью перекомпилировать результат запроса с нуля, но часто Databricks делает только добавочные обновления в материализованном представлении, что может быть гораздо менее дорогостоящим, чем полная рекомпьюция.
На схеме ниже показано материализованное представление sales_report
, которое является результатом объединения двух вышестоящих таблиц clean_customers
и clean_transactions
группирования по странам. Вышестоящий процесс вставляет 200 строк в clean_customers
для трех стран (США, Нидерланды, Великобритания) и обновляет 5000 строк в clean_transactions
в соответствии с этими новыми клиентами. Материализованное sales_report
представление постепенно обновляется только для стран с новыми клиентами или соответствующими транзакциями. В этом примере мы видим три строки, обновленные вместо всего отчета о продажах.
Пример инкрементального обновления материализованного представления
Дополнительные сведения о том, как добавочное обновление работает в материализованных представлениях, см. в разделе добавочное обновление для материализованных представлений.
Ограничения материализованных представлений
Материализованные представления имеют следующие ограничения:
- Так как обновления создают правильные запросы, некоторые изменения входных данных требуют полной повторной компиляции материализованного представления, что может быть дорогостоящим.
- Они не предназначены для задач, требующих низкой задержки. Задержка обновления материализованного представления находится в секундах или минутах, а не в миллисекундах.
- Не все вычисления можно вычислить постепенно.