Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Потоки REPLACE WHERE и автономные материализованные представления позволяют поддерживать производные таблицы, которые остаются актуальными при изменении исходных данных, но решают разные задачи. Для большинства пакетных нагрузок ETL, которые периодически перезаписывают временное окно или раздел, используйте инкрементальный поток REPLACE WHERE. Используйте материализованные представления для слоя ускорения запросов, который предоставляет заранее вычисленные результаты для дашбордов и отчётов.
На этой странице рассматриваются автономные потоковые таблицы и материализованные представления. Для потоков REPLACE WHERE в конвейере Lakeflow см. Пакетная обработка с потоками REPLACE WHERE.
Используйте REPLACE WHERE для пакетной перезаписи
поток REPLACE WHERE пересчитывает и перезаписывает только те строки, которые удовлетворяют предикату, например временному окну или партиции. Все остальные строки остаются без изменений. Поскольку поток переоценивает исходный запрос только для этого диапазона предиката, стоимость каждого обновления зависит от размера диапазона, а не от размера таблицы.
Материализованное представление сохраняет полный результат своего определяющего запроса. Azure Databricks обновляет материализованное представление инкрементно, когда запрос и исходные данные это поддерживают, а в противном случае выполняет полное обновление. Будет ли обновление инкрементальным, зависит от структуры запроса и исходных таблиц, поэтому стоимость каждого обновления сложнее предсказать. См. Как обновляются автономные материализованные представления?
Для пакетной ETL-модели данных, меняющейся в ограниченных диапазонах, поток REPLACE WHERE позволяет точно контролировать, какие строки переписывает каждое обновление. Материализованное представление лучше подходит, когда читателям нужен быстрый доступ к заранее вычисленному результату.
Сопоставьте конструкции слоям медальонной архитектуры
Следующая таблица отображает каждый слой архитектуры медальона в конструкцию, которую рекомендует Databricks:
| Слой | Строить | Почему |
|---|---|---|
| Бронза (необработанный прием данных) | Прием данных с помощью Lakeflow Connect или Auto Loader | Постепенно загружает необработанные записи по мере их поступления, не перерабатывая историю. |
| Серебро (факты) | Инкрементальный поток REPLACE WHERE | Перезаписывает только затронутые временные окна или разделы для обновления фактовых данных, поздно поступающих данных и исправлений. |
| Серебро (размеры) |
AUTO CDC Поток |
Применяет семантику для вставки, обновления и удаления автоматически, а также сохраняет историю с медленно меняющимся измерением (SCD) типа 1 или типа 2. |
| Золото (агрегации и модели данных) | Инкрементальный поток REPLACE WHERE | Перевычисляет только диапазон предикатов для агрегатов и моделей, избегая полнотабличных перевычислений. |
| Ускорение и обработка запросов | материализованное представление | Показывает заранее вычисленные результаты в дашборды и отчёты, а также поддерживает актуальность результатов запросов. |
Рекомендации по принятию решений
Используйте следующее руководство, чтобы выбрать между двумя вариантами.
Используйте поток REPLACE WHERE, когда вы:
- Запускайте периодические пакетные перезаписи временного окна или партиции.
- Исправьте данные, поступившие с опозданием.
- Примените удаления для соблюдения требований к ограниченному диапазону.
- Обновляйте данные на уровне раздела.
Используйте материализованный вид, когда вы:
- Ускорить запросы дашборда.
- Предоставляйте читателям заранее вычисленные агрегации.
- Поддерживайте актуальность результатов запросов для слоя обслуживания.
Пример: инкрементальное перезаписывание с помощью REPLACE WHERE
Следующий пример определяет целевую таблицу, которая перезаписывает только последние 7 дней данных при каждом обновлении. Во время обновления поток удаляет строки, соответствующие предикату, пересчитывает исходный запрос для этого же диапазона и вставляет результаты. Строки вне окна остаются нетронутыми:
CREATE OR REFRESH STREAMING TABLE payments_latest
FLOW REPLACE WHERE payment_date >= date_add(current_date(), -7) BY NAME
SELECT payment_id, booking_id, status, payment_date
FROM samples.wanderbricks.payments;
BY NAME требуется для того, чтобы столбцы совпадали по названию, а не по позиции. Для полного синтаксиса, переопределений предиката, обратного заполнения и поведения постепенного обновления см. потоки REPLACE WHERE для автономных таблиц потоков.