Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описывается, как создавать и обновлять материализованные представления в Databricks SQL для повышения производительности и снижения затрат на обработку и анализ рабочих нагрузок.
Что такое материализованные представления?
В Databricks SQL материализованные представления — это управляемые таблицы каталога Unity, которые физически хранят результаты запроса. В отличие от стандартных представлений, которые вычисляют результаты по запросу, материализованные представления кэшируют результаты и обновляют их по мере изменения базовых исходных таблиц — либо по расписанию, либо автоматически.
Материализованные представления хорошо подходят для обработки данных, таких как извлечение, преобразование и загрузка (ETL). Материализованные представления предоставляют простой декларативный способ обработки данных для соответствия, исправлений, агрегаций или общего захвата измененных данных (CDC). Материализованные представления также позволяют легко использовать преобразования путем очистки, обогащения и денормализации базовых таблиц. Путем предварительного вычисления дорогостоящих или часто используемых запросов материализованные представления снижают задержку запросов и потребление ресурсов. Во многих случаях они могут постепенно вычислить изменения из исходных таблиц, повысить эффективность и взаимодействие с конечным пользователем.
Ниже приведены распространенные случаи использования материализованных представлений.
- Поддержание актуальной информационной панели бизнес-аналитики с минимальной задержкой запросов конечных пользователей.
- Сокращение сложной оркестрации ETL с помощью простой логики SQL.
- Создание сложных, многоуровневых преобразований.
- Любые варианты использования, которые требуют стабильной производительности с up-to-date insights.
При создании материализованного представления в хранилище SQL Databricks создается бессерверный конвейер для обработки создания и обновления в материализованном представлении. Состояние операций обновления можно отслеживать в обозревателе каталогов. См. сведения о материализованном представлении с помощью DESCRIBE EXTENDED
.
Требования
Материализованные представления, созданные в Databricks SQL, поддерживаются бессерверным конвейером. Рабочая область должна поддерживать бессерверные конвейеры для использования этой функции.
Требования к созданию или обновлению материализованных представлений:
Необходимо использовать SQL-склад с поддержкой Unity Catalog, либо профессиональный или бессерверный SQL-склад.
Чтобы обновить материализованное представление, необходимо находиться в рабочей области, в которой оно было создано.
Для постепенного обновления материализованного представления из таблиц Delta, в исходных таблицах должно быть включено отслеживание строк.
Владелец (пользователь, создающий материализованное представление), должен иметь следующие разрешения:
-
SELECT
привилегия на базовые таблицы, на которые ссылается материализованное представление. - Привилегии
USE CATALOG
иUSE SCHEMA
на каталоге и схеме, содержащих исходные таблицы для материализованного представления. - Привилегии
USE CATALOG
иUSE SCHEMA
на целевой каталог и схему для материализованного представления. -
CREATE TABLE
иCREATE MATERIALIZED VIEW
привилегии на схему, содержащую материализованное представление.
-
Чтобы обновить материализованное представление, необходимо иметь
REFRESH
привилегию в материализованном представлении.
- Рабочая область должна находиться в регионе, поддерживающем бессерверные хранилища SQL.
Требования к запросам материализованных представлений:
Вы должны быть владельцем материализованного представления или иметь
SELECT
на материализованном представлении, а такжеUSE SCHEMA
иUSE CATALOG
на соответствующих родительских объектах.Необходимо использовать один из следующих вычислительных ресурсов:
Хранилище SQL
Интерфейсы декларативных конвейеров Lakeflow
Вычисление в стандартном режиме доступа (прежнее название — режим общего доступа)
Выделенный режим доступа (прежнее название — режим однопользовательского доступа) в Databricks Runtime 15.4 и более поздней версии, если рабочая область включена для бессерверных вычислений. См. детальное управление доступом для выделенных вычислений.
Если вы являетесь владельцем материализованного представления, вы можете использовать вычислительный ресурс выделенного режима доступа, работающий под управлением Databricks Runtime версии 14.3 и выше.
Дополнительные сведения об использовании материализованных представлений см. в разделе Ограничения.
Создание материализованного представления
Операции Databricks SQL с материализованными представлениями CREATE
применяют хранилище SQL Databricks для создания данных и их загрузки в материализованное представление. Создание материализованного представления — это синхронная операция, что означает, что команда CREATE MATERIALIZED VIEW
блокирует до тех пор, пока материализованное представление не будет создано и начальная загрузка данных не закончится. Бессерверный конвейер автоматически создается для каждого материализованного представления Databricks SQL. Когда материализованное представление обновляется, Декларативные конвейеры Lakeflow обрабатывают обновление.
Чтобы создать материализованное представление, используйте инструкцию CREATE MATERIALIZED VIEW
. Чтобы отправить инструкцию создания, используйте редактор SQL в пользовательском интерфейсе Azure Databricks, Databricks SQL CLI или Databricks SQL API.
Пользователь, создающий материализованное представление, является владельцем материализованного представления.
В следующем примере создается материализованное представление mv1
из базовой таблицы base_table1
:
-- This query defines the materialized view:
CREATE OR REPLACE MATERIALIZED VIEW mv1
AS SELECT
date,
sum(sales) AS sum_of_sales
FROM
base_table1
GROUP BY
date;
При создании материализованного представления с помощью CREATE OR REPLACE MATERIALIZED VIEW
инструкции начальное обновление данных и заполнение начинается немедленно. Это не использует вычислительные ресурсы хранилища SQL. Вместо этого бессерверные декларативные конвейеры Lakeflow используются для создания и последующих обновлений.
Примечания столбцов в базовой таблице автоматически распространяются в новое материализованное представление только в момент создания. Чтобы добавить расписание, ограничения таблицы или другие свойства, измените определение материализованного представления (SQL-запрос).
Тот же запрос SQL обновит материализованное представление при повторном вызове или по расписанию. Обновление, выполняемое таким образом, действует как любое другое обновление. Дополнительные сведения см. в разделе "Обновление материализованного представления".
Дополнительные сведения о настройке материализованного представления см. в разделе "Настройка материализованных представлений" в Databricks SQL. Дополнительные сведения о полном синтаксисе создания материализованного представления см. в статье CREATE MATERIALIZED VIEW. Сведения о загрузке данных в разных форматах и разных местах см. в разделе "Загрузка данных с декларативными конвейерами Lakeflow".
Загрузка данных из внешних систем
Databricks рекомендует загружать внешние данные, используя Lakehouse Federation для поддерживаемых источников данных. Для получения информации о загрузке данных из источников, не поддерживаемых федерацией Lakehouse, смотрите параметры формата данных. Общие сведения о загрузке данных, включая примеры, см. в разделе «Загрузка данных с декларативными конвейерами Lakeflow».
Скрытие конфиденциальных данных
Это важно
Эта функция доступна в общедоступной предварительной версии.
Материализованные представления можно использовать для скрытия конфиденциальных данных от пользователей, обращаюющихся к таблице. Один из способов сделать это — создать запрос, чтобы он не включал эти данные в первую очередь. Но вы также можете маскировать столбцы или фильтровать строки в зависимости от разрешений пользователя, выполняющего запрос. Например, можно скрыть tax_id
столбец для пользователей, не входящих в группу HumanResourcesDept
. Для этого используйте ROW FILTER
MASK
синтаксис во время создания материализованного представления. Дополнительные сведения см. в разделе "Фильтрация конфиденциальных данных таблицы" с помощью фильтров строк и маски столбцов.
Обновить материализованное представление
Обновление материализованного представления обновляет представление, чтобы отразить последние изменения базовой таблицы во время обновления.
При определении материализованного представления оператор CREATE OR REPLACE MATERIALIZED VIEW
используется как для создания представления, так и для его обновления в случае запланированных обновлений. Можно также использовать инструкцию REFRESH MATERIALIZED VIEW
для обновления материализованного представления, не требуя повторного предоставления запроса. Для получения подробной информации о синтаксисе и параметрах SQL этой команды см. REFRESH (MATERIALIZED VIEW или STREAMING TABLE). Дополнительные сведения о типах материализованных представлений, которые можно добавочно обновить, см. в разделе добавочное обновление для материализованных представлений.
Чтобы отправить инструкцию обновления, используйте редактор SQL в пользовательском интерфейсе Azure Databricks, записную книжку, подключенную к хранилищу SQL, Databricks SQL CLIили API SQL Databricks.
Владелец и любой пользователь, которому предоставлена привилегия на таблицу REFRESH
, могут обновить материализованное представление.
В следующем примере материализованное представление mv1
обновляется:
REFRESH MATERIALIZED VIEW mv1;
Операция синхронна по умолчанию, то есть команда находится в состоянии блокировки до завершения операции обновления. Для асинхронного обновления можно добавить ключевое ASYNC
слово:
REFRESH MATERIALIZED VIEW mv1 ASYNC;
Как обновляются материализованные представления Databricks SQL?
Материализованные представления автоматически создают и используют бессерверные декларативные конвейеры Lakeflow для обработки операций обновления. Обновление управляется конвейером и обновление отслеживается хранилищем Databricks SQL, используемым для создания материализованного представления. Материализованные представления могут обновляться с помощью конвейера, работающего по расписанию. Databricks SQL созданные материализованные представления всегда выполняются в режиме триггера. См. раздел "Триггерный и непрерывный режимы конвейера".
Материализованные представления обновляются с помощью одного из двух методов.
- Добавочное обновление . Система оценивает запрос представления, чтобы определить изменения, которые произошли после последнего обновления и объединяют только новые или измененные данные.
- Полное обновление . Если добавочное обновление не удается выполнить, система выполняет весь запрос и заменяет существующие данные в материализованном представлении новыми результатами.
Структура запроса и тип исходных данных определяют, поддерживается ли добавочное обновление. Для поддержки добавочного обновления исходные данные должны храниться в таблицах Delta с включенным отслеживанием строк и каналом передачи данных об изменениях. После создания материализованного представления можно отслеживать его поведение обновления, чтобы проверить, обновляется ли оно постепенно или через полное обновление.
Дополнительные сведения о типах обновлений и способах оптимизации добавочных обновлений см. в разделе Добавочное обновление для материализованных представлений.
Асинхронные обновления
По умолчанию операции обновления выполняются синхронно. Вы также можете задать операцию обновления для асинхронного выполнения. Это можно задать с помощью команды обновления с ключевым словом ASYNC
. См. REFRESH (MATERIALIZED VIEW или STREAMING TABLE) Поведение, связанное с каждым подходом, выглядит следующим образом:
- синхронный: синхронное обновление не позволяет продолжать другие операции до завершения обновления. Если результат необходим для следующего шага, например при последовательности операций обновления в средствах оркестрации, таких как Задания Lakeflow, используйте синхронное обновление. Для управления материализованными представлениями посредством задания используйте тип задачи SQL. Смотрите Задания Lakeflow.
- Асинхронный: асинхронное обновление запускает фоновое задание в декларативных конвейерах Lakeflow при запуске обновления материализованного представления, что позволяет команде вернуться до завершения загрузки данных. Этот тип обновления может сэкономить на затратах, так как операция не обязательно хранит вычислительные мощности в хранилище, где инициируется команда. Если обновление становится неактивным, а другие задачи не выполняются, хранилище может завершить работу, пока обновление использует другие доступные вычислительные ресурсы. Кроме того, асинхронные обновления поддерживают запуск нескольких операций параллельно.
Настройка расписания обновлений материализованного представления
Вы можете настроить материализованное представление Databricks SQL для автоматического обновления на основе определенного расписания. Чтобы задать расписание, выполните одно из следующих действий:
- Настройте расписание при помощи
SCHEDULE
при создании материализованного представления - Добавьте расписание с помощью инструкции ALTER MATERIALIZED VIEW.
Замечание
Кроме того, можно создать задачу в задании, включающее CREATE OR REPLACE MATERIALIZED VIEW
инструкцию или REFRESH
инструкцию, и оркестрировать ее так же, как и любое другое задание. Смотрите Задания Lakeflow.
В следующем примере создается материализованное представление из базовой таблицы mv1
и расписание обновления материализованного представления base_table1
один раз в час:
CREATE OR REPLACE MATERIALIZED VIEW mv1
SCHEDULE EVERY 1 hour
AS SELECT
date,
sum(sales) AS sum_of_sales
FROM
base_table1
GROUP BY
date;
Чтобы задать или изменить расписание после создания, используйте инструкцию ALTER MATERIALIZED VIEW
:
ALTER MATERIALIZED VIEW sales ALTER SCHEDULE EVERY 1 day;
При создании расписания новое задание Databricks автоматически настраивается для обработки обновления.
Чтобы просмотреть расписание, выполните одно из следующих действий:
- Запустите инструкцию
DESCRIBE EXTENDED
из редактора SQL в пользовательском интерфейсе Azure Databricks. См. DESCRIBE TABLE. - Используйте обозреватель каталогов для просмотра материализованного представления. Расписание отображается на вкладке Обзор в разделе Состояние обновления. Смотрите Что такое обозреватель каталогов.
При наличии расписания обновлений у вас по-прежнему есть возможность запускать обновление вручную в любое время, если у вас есть потребность в обновленных данных.
Остановить активное обновление
Чтобы остановить активное обновление в пользовательском интерфейсе Декларативного конвейера Lakeflow, на странице сведений о конвейере нажмите кнопку "Остановить ", чтобы остановить обновление конвейера. Вы также можете остановить обновление с помощью Databricks CLI или операции POST /api/2.0/pipelines/{pipeline_id}/stop в API Pipelines.
окончательное удаление записей из материализованного представления с включенными векторами удаления
Это важно
Поддержка инструкции REORG
с материализованными представлениями находится в общедоступной предварительной версии .
Замечание
- Для использования инструкции
REORG
с материализованным представлением требуется Databricks Runtime 15.4 или более поздней версии. - Оператор
REORG
можно использовать с любым материализованным представлением, но он необходим только когда записи удаляются из материализованного представления с включенными векторами удаления. Команда не действует при использовании с материализованным представлением, если векторы удаления не включены.
Чтобы физически удалить записи из базового хранилища для материализованного представления с включенными векторами удаления, как требуется для соблюдения норм GDPR, необходимо предпринять дополнительные шаги, чтобы гарантировать выполнение операции VACUUM на данных материализованного представления.
Для физического удаления записей:
- Запустите оператор
REORG
для материализованного представления, указав параметрAPPLY (PURGE)
. Например,REORG TABLE <materialized-view-name> APPLY (PURGE);
. См. REORG TABLE. - Дождитесь прохождения периода хранения данных материализованного представления. Срок хранения данных по умолчанию составляет семь дней, но его можно настроить с помощью свойства таблицы
delta.deletedFileRetentionDuration
. См. Настройка сохранения данных для запросов по временному перемещению. -
REFRESH
материализованное представление. См. Обновите материализованное представление. В течение 24 часов после операцииREFRESH
задачи обслуживания Декларативных конвейеров Lakeflow, включая операциюVACUUM
, необходимую для обеспечения окончательного удаления записей, выполняются автоматически.
Удалить материализованное представление
Замечание
Чтобы отправить команду для удаления материализованного представления, необходимо быть владельцем этого материализованного представления или иметь права MANAGE
в материализованном представлении.
Чтобы удалить материализованное представление, используйте инструкцию DROP VIEW. Чтобы отправить инструкцию DROP
, можно использовать редактор SQL в пользовательском интерфейсе Azure Databricks, интерфейсе командной строки SQL Databricks или API SQL Databricks. В следующем примере будет удалено материализованное представление mv1
.
DROP MATERIALIZED VIEW mv1;
Обозреватель каталогов можно также использовать для удаления материализованного представления.
- Щелкните
Каталог на боковой панели.
- В дереве обозревателя каталогов слева откройте каталог и выберите схему, в которой находится материализованное представление.
- Откройте элемент Таблиц в выбранной схеме, а затем щелкните материализованное представление.
- На
выберите Удалить.
Общие сведения о затратах на материализованное представление
Поскольку материализованное представление работает на бессерверной вычислительной платформе, вне тех вычислительных ресурсов, которые вы настроили для записной книжки или задания, у вас может возникнуть вопрос, как понять связанные с этим затраты. Материализованное использование представления отслеживается потреблением DBU. Чтобы узнать больше, см. раздел «Что такое потребление DBU материализованного представления или потоковой таблицы?»
Включение отслеживания строк
Чтобы поддерживать добавочное обновление из разностных таблиц, для этих исходных таблиц необходимо включить отслеживание строк. При повторном создании исходной таблицы необходимо повторно включить отслеживание строк.
В следующем примере показано, как включить отслеживание строк в таблице:
ALTER TABLE source_table SET TBLPROPERTIES (delta.enableRowTracking = true);
Дополнительные сведения см. в разделе "Использование отслеживания строк для таблиц Delta"
Ограничения
- Требования к вычислительным ресурсам и рабочей области см. в разделе "Требования".
- Дополнительные требования к обновлению см. в разделе Добавочное обновление для материализованных представлений.
- Материализованные представления не поддерживают столбцы идентичности или суррогатные ключи.
- Если материализованное представление использует агрегирование суммы по столбцу
NULL
, и в этом столбце остаются только значенияNULL
, результирующее агрегатное значение материализованного представления будет равно нулю вместоNULL
. - Вы не можете прочитать ленту изменений данных из материализованного представления.
- Запросы, использующие функцию перемещения во времени, не поддерживаются в материализованных представлениях.
- Базовые файлы, поддерживающие материализованные представления, могут включать данные из вышестоящих таблиц (включая возможные личные сведения), которые не отображаются в определении материализованного представления. Эти данные автоматически добавляются в базовое хранилище для поддержки добавочного обновления материализованных представлений. Поскольку базовые файлы материализованного представления могут рисковать раскрытием данных из исходных таблиц, не входящих в схему материализованного представления, Databricks рекомендует не предоставлять общий доступ к базовому хранилищу ненадежным нижестоящим потребителям. Например, предположим, что определение материализованного представления включает условие
COUNT(DISTINCT field_a)
. Хотя определение материализованного представления включает только агрегированное предложениеCOUNT DISTINCT
, базовые файлы будут содержать список фактических значенийfield_a
. - Вы можете нести некоторые бессерверные затраты на вычислительные ресурсы, даже если эти функции используются для выделенных вычислений.
- Если вам нужно использовать подключение Azure Private Link с материализованным представлением, обратитесь к вашему представителю Databricks.