Использование материализованных представлений в Databricks SQL
В этой статье описывается создание и использование материализованных представлений в Databricks SQL для повышения производительности и снижения затрат на обработку и анализ рабочих нагрузок.
Примечание.
Если вам нужно использовать подключение Azure Private Link с материализованным представлением, обратитесь к вашему представителю Databricks.
Внимание
Материализованные представления, созданные в Databricks SQL, поддерживаются бессерверным конвейером DLT. Рабочая область должна поддерживать бессерверные конвейеры для использования этой функции.
Что такое материализованные представления?
В Databricks SQL материализованные представления — это управляемые таблицы каталога Unity, которые позволяют пользователям предварительно компетировать результаты на основе последней версии данных в исходных таблицах. Материализованные представления в Azure Databricks отличаются от других реализаций, так как возвращаемые результаты отражают состояние данных на момент последнего обновления материализованного представления, вместо того чтобы всегда обновлять результаты каждый раз при запросе материализованного представления. Можно вручную обновить материализованные представления или запланировать обновления.
Материализованные представления являются мощными для рабочих нагрузок обработки данных, таких как извлечение, преобразование и загрузка (ETL). Материализованные представления предоставляют простой декларативный способ обработки данных для соответствия, исправлений, агрегаций или общего захвата измененных данных (CDC). Материализованные представления снижают затраты и повышают задержку запросов путем предварительного вычисления медленных запросов и часто используемых вычислений. Материализованные представления также позволяют легко использовать преобразования путем очистки, обогащения и денормализации базовых таблиц. Материализованные представления могут снизить затраты, обеспечивая упрощенное взаимодействие с конечным пользователем, так как в некоторых случаях они могут постепенно вычислять изменения из базовых таблиц.
Материализованные представления впервые поддерживаются в Azure Databricks с запуском DLT. При создании материализованного представления в хранилище SQL Databricks создается бессерверный конвейер для обработки обновлений в материализованном представлении. Вы можете отслеживать состояние операций обновления в пользовательском интерфейсе DLT или конвейерах API. См. Просмотр состояния обновления материализованного представления.
Требования
Создание или обновление материализованных представлений:
- Необходимо использовать SQL-склад с поддержкой Unity Catalog, либо профессиональный или бессерверный SQL-склад.
- Чтобы обновить материализованное представление, необходимо находиться в рабочей области, в которой оно было создано.
- Рабочая область должна находиться в регионе, поддерживающем бессерверные хранилища SQL.
Запрос материализованных представлений:
- Вы должны быть владельцем материализованного представления или иметь
SELECT
на материализованном представлении, а такжеUSE SCHEMA
иUSE CATALOG
на соответствующих родительских объектах. - Необходимо использовать один из следующих вычислительных ресурсов:
- Хранилище SQL
- Интерфейсы DLT
- Вычисление в стандартном режиме доступа (прежнее название — режим общего доступа)
- Выделенный режим доступа (прежнее название — режим однопользовательского доступа) в Databricks Runtime 15.4 и более поздней версии, если рабочая область включена для бессерверных вычислений. См. детализированное управление доступом для выделенных ресурсов (ранее однопользовательских вычислительных ресурсов).
- Только если вы являетесь владельцем материализованного представления: вычислительный ресурс выделенного режима доступа, на котором выполняется среда выполнения Databricks в диапазоне от 14.3 до 15.3.
Дополнительные сведения об использовании материализованных представлений см. в разделе Ограничения.
Создание материализованного представления
Операции материализованного представления CREATE
Databricks SQL используют хранилище SQL Databricks для создания и загрузки данных в материализованном представлении. Создание материализованного представления — это синхронная операция, что означает, что команда CREATE MATERIALIZED VIEW
блокирует до тех пор, пока материализованное представление не будет создано и начальная загрузка данных не закончится. Бессерверный конвейер DLT автоматически создается для каждого материализованного представления Databricks SQL. Когда материализованное представление обновлено конвейер DLT обрабатывает обновление.
Чтобы создать материализованное представление, используйте инструкцию CREATE MATERIALIZED VIEW
. Чтобы отправить инструкцию создания, используйте редактор SQL в пользовательском интерфейсе Azure Databricks, Databricks SQL CLI или Databricks SQL API.
Примечание.
Пользователь, создающий материализованное представление, является владельцем материализованного представления и должен иметь следующие разрешения:
-
SELECT
привилегия на базовые таблицы, на которые ссылается материализованное представление. - Привилегии
USE CATALOG
иUSE SCHEMA
на каталоге и схеме, содержащих исходные таблицы для материализованного представления. - Привилегии
USE CATALOG
иUSE SCHEMA
на целевой каталог и схему для материализованного представления. -
CREATE TABLE
иCREATE MATERIALIZED VIEW
привилегии на схему, содержащую материализованное представление.
В следующем примере создается материализованное представление mv1
из базовой таблицы base_table1
:
CREATE MATERIALIZED VIEW mv1
AS SELECT
date,
sum(sales) AS sum_of_sales
FROM
base_table1
GROUP BY
date;
Примечания столбцов в базовой таблице автоматически распространяются в новое материализованное представление. Чтобы добавить расписание, ограничения таблицы или другие свойства, измените определение материализованного представления. Сведения о синтаксисе определения материализованного представления см. в CREATE MATERIALIZED VIEW.
Настройка канала среды выполнения
Материализованные представления, созданные с помощью хранилищ SQL, автоматически обновляются с помощью конвейера DLT. DLT-конвейеры по умолчанию используют среду выполнения в канале current
. Ознакомьтесь с заметками о выпуске DLT и процессом обновления выпуска, чтобы узнать больше о процессе выпуска.
Databricks рекомендует использовать канал current
для производственных нагрузок. Новые функции сначала выпускаются на preview
канале. Конвейер можно задать для канала DLT предварительной версии, чтобы протестировать новые функции, указав preview
в качестве свойства таблицы. Это свойство можно указать при создании таблицы или после создания таблицы с помощью инструкции ALTER.
В следующем примере кода показано, как настроить канал для предварительного просмотра в инструкции CREATE:
CREATE OR REPLACE MATERIALIZED VIEW foo.default.bar
TBLPROPERTIES ('pipelines.channel' = 'preview') as
SELECT
*
FROM
range(5)
Загрузка данных из внешних систем
Databricks рекомендует загружать внешние данные, используя Lakehouse Federation для поддерживаемых источников данных. Для получения информации о загрузке данных из источников, не поддерживаемых федерацией Lakehouse, смотрите параметры формата данных.
Обновить материализованное представление
Операция REFRESH
обновляет материализованное представление, чтобы отразить последние изменения базовой таблицы. Операция синхронна по умолчанию, то есть команда находится в состоянии блокировки до завершения операции обновления. Чтобы обновить материализованное представление, используйте инструкцию 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;
Как обновляются материализованные представления Databricks SQL?
Материализованные представления автоматически создают и используют бессерверные конвейеры DLT для обработки операций обновления. Обновление управляется конвейером DLT, и обновление отслеживается хранилищем Databricks SQL, используемым для создания материализованного представления. Материализованные представления можно обновить с помощью конвейера DLT, который выполняется по расписанию. См. Триггерный и непрерывный режим конвейера.
Примечание.
Среда выполнения DLT не может обнаруживать изменения в источниках данных, отличных от Delta. Таблица по-прежнему обновляется регулярно, но с увеличенным интервалом триггера по умолчанию, чтобы предотвратить замедление, вызванное чрезмерным пересчётом в процессе обработки данных.
По умолчанию операции обновления выполняются синхронно. Вы также можете задать операцию обновления для асинхронного выполнения. Это можно задать с помощью команды обновления. См. REFRESH (MATERIALIZED VIEW или STREAMING TABLE) Поведение, связанное с каждым подходом, выглядит следующим образом:
- синхронный: синхронное обновление не позволяет продолжать другие операции до завершения обновления. Если результат необходим для следующего шага, например, при последовательном обновлении средствами оркестрации, такими как Databricks Jobs, используйте синхронное обновление. Для управления материализованными представлениями посредством задания используйте тип задачи SQL. См. раздел обзор оркестрации в системе Databricks.
- Асинхронный: асинхронное обновление запускает фоновое задание на вычислительном узле DLT при начале обновления материализованного представления, что позволяет команде завершить выполнение до завершения загрузки данных. Этот тип обновления может сэкономить на затратах, так как операция не обязательно хранит вычислительные мощности в хранилище, где инициируется команда. Если обновление становится неактивным, а другие задачи не выполняются, хранилище может завершить работу, пока обновление использует другие доступные вычислительные ресурсы. Кроме того, асинхронные обновления поддерживают запуск нескольких операций параллельно.
Некоторые запросы можно постепенно обновлять. См. инкрементное обновление для материализованных представлений. Если добавочное обновление не может быть выполнено, вместо этого выполняется полное обновление.
Планирование обновлений материализованного представления
Вы можете настроить материализованное представление Databricks SQL для автоматического обновления на основе определенного расписания. Чтобы задать расписание, выполните одно из следующих действий:
- Настройте расписание при помощи
SCHEDULE
при создании материализованного представления - Добавьте расписание с помощью инструкции ALTER MATERIALIZED VIEW.
При создании расписания новое задание Databricks автоматически настраивается для обработки обновления.
Чтобы просмотреть расписание, выполните одно из следующих действий:
- Запустите инструкцию
DESCRIBE EXTENDED
из редактора SQL в пользовательском интерфейсе Azure Databricks. - Используйте обозреватель каталогов для просмотра материализованного представления. Расписание отображается на вкладке Обзор в разделе Состояние обновления. См. Что такое Catalog Explorer?.
просмотр состояния обновления материализованного представления
Примечание.
Задержка возникает из-за того, что конвейер DLT управляет обновлениями материализованного представления и требуется время на его запуск. Это время может находиться в секундах до минут, в дополнение к времени, необходимому для выполнения обновления.
Состояние обновления материализованного представления можно узнать, просматривая конвейер, который управляет материализованным представлением в пользовательском интерфейсе DLT, или проверяя информацию об обновлении, возвращенную командой DESCRIBE EXTENDED
для материализованного представления.
Вы также можете просмотреть журнал обновления материализованного представления, запросив журнал событий DLT. См. историю обновлений для материализованного представления.
Мониторинг запусков с помощью журнала запросов
Вы можете использовать страницу журнала запросов для доступа к сведениям о запросах и профилям запросов, которые помогут определить плохое выполнение запросов и узких мест в конвейере DLT, используемом для запуска обновлений потоковой таблицы. Общие сведения о типах сведений, доступных для журналов запросов и профилей запросов, см. в разделе "Журнал запросов" и "Профиль запросов".
Внимание
Эта функция предоставляется в режиме общедоступной предварительной версии. Администраторы рабочей области могут включить эту функцию на странице "Предварительные версии". См. статью "Управление предварительными версиями Azure Databricks".
Все запросы, связанные с материализованными представлениями, отображаются в журнале запросов. Вы можете использовать раскрывающийся список фильтра Statement, чтобы выбрать любую команду и проверить связанные запросы. За каждым оператором CREATE
следует оператор REFRESH
, который выполняется асинхронно в конвейере DLT. Инструкции REFRESH
обычно включают подробные планы запросов, которые предоставляют аналитические сведения о оптимизации производительности.
Чтобы получить доступ к REFRESH
запросам в журнале запросов, выполните следующие действия.
- Щелкните
в левой боковой панели, чтобы открыть Историю запросов.
- Выберите флажок REFRESH в фильтре выпадающего списка Инструкция.
- Щелкните имя инструкции запроса, чтобы просмотреть сводные сведения, такие как длительность запроса и агрегированные метрики.
- Щелкните "Просмотреть профиль запроса", чтобы открыть профиль запроса. Дополнительные сведения о навигации по профилю запроса см. в разделе "Профиль запроса".
- При необходимости используйте ссылки в разделе "Источник запросов", чтобы открыть связанный запрос или конвейер.
Просмотр состояния обновления в пользовательском интерфейсе DLT
По умолчанию конвейер DLT, который управляет материализованным представлением, не отображается в пользовательском интерфейсе DLT. Чтобы просмотреть конвейер в пользовательском интерфейсе DLT, необходимо напрямую получить доступ к ссылке на страницу с деталями о конвейере . Чтобы получить доступ к ссылке, выполните следующие действия.
- Скопируйте и вставьте ссылку, показанную в строке Последнего обновления таблицы, возвращаемой оператором
DESCRIBE EXTENDED
. - На вкладке «Родословная» для материализованного представления щелкните «Конвейеры» и затем щелкните ссылку на конвейер.
Для асинхронных команд REFRESH
, отправленных с помощью редактора SQL в пользовательском интерфейсе Azure Databricks, можно просмотреть состояние обновления, перейдя по ссылке, указанной на панели результатов .
Остановить активное обновление
Чтобы остановить активное обновление в интерфейсе DLT, на странице сведений о конвейере щелкните Остановить, чтобы прекратить обновление конвейера. Вы также можете остановить обновление с помощью 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
задачи обслуживания DLT, включая операциюVACUUM
, необходимую для окончательного удаления записей, выполняются автоматически. См. задачи обслуживания , выполняемые DLT.
Удалить материализованное представление
Примечание.
Чтобы отправить команду для удаления материализованного представления, необходимо быть владельцем этого материализованного представления или иметь права MANAGE
в материализованном представлении.
Чтобы удалить материализованное представление, используйте инструкцию DROP VIEW. Чтобы отправить инструкцию DROP
, можно использовать редактор SQL в пользовательском интерфейсе Azure Databricks, интерфейсе командной строки SQL Databricks или API SQL Databricks. В следующем примере удаляется материализованное mv1
представление:
DROP MATERIALIZED VIEW mv1;
Описание материализованного представления
Чтобы получить столбцы и типы данных для материализованного представления, используйте инструкцию DESCRIBE
. Чтобы получить столбцы, типы данных и метаданные, такие как владелец, расположение, время создания и состояние обновления для материализованного представления, используйте DESCRIBE EXTENDED
. Чтобы отправить DESCRIBE
инструкцию, используйте редактор SQL в пользовательском интерфейсе Azure Databricks, интерфейс командной строки SQL Databricks или API SQL Databricks.
Изменение владельца материализованного представления
Вы можете изменить владельца материализованного представления, если вы являетесь администратором хранилища метаданных и администратором рабочей области. Материализованные представления автоматически создают и используют конвейеры DLT для обработки изменений. Чтобы изменить владельца материализованных представлений, выполните следующие действия.
- На вкладке "Происхождение" для материализованного представления щелкните "Пайплайны" и затем щелкните ссылку пайплайна.
- Щелкните Поделиться. Откроется диалоговое окно "Параметры разрешений".
- Щелкните x справа от имени текущего владельца, чтобы удалить текущего владельца.
- Начните вводить текст, чтобы отфильтровать список доступных пользователей. Щелкните пользователя, который должен быть новым владельцем конвейера.
- Нажмите кнопку "Сохранить", чтобы сохранить изменения и закрыть диалоговое окно.
Все активы конвейера, включая определенные в нем материализованные представления, принадлежат новому владельцу конвейера. Все будущие обновления выполняются от имени нового владельца.
Контроль доступа к материализованным представлениям
Материализованные представления поддерживают расширенные элементы управления доступом для поддержки общего доступа, избегая предоставления потенциально частных данных. Владелец материализованного вида или пользователь с привилегиями MANAGE
может предоставлять привилегии SELECT
другим пользователям. Пользователям с доступом SELECT
к материализованному представлению не нужен доступ SELECT
к таблицам, на которые ссылается материализованное представление. Этот контроль доступа обеспечивает общий доступ к данным при управлении доступом к базовым данным.
Предоставление привилегий материализованному представлению
Чтобы предоставить доступ к материализованному представлению, используйте команду GRANT
:
GRANT
privilege_type [, privilege_type ] ...
ON <mv_name> TO principal;
Тип_привилегии может быть одним из следующих значений:
-
SELECT
— пользователь можетSELECT
материализованное представление. -
REFRESH
— пользователь можетREFRESH
материализованное представление. Обновления выполняются с помощью разрешений владельца.
В следующем примере создается материализованное представление и предоставляются права выбора и обновления для пользователя:
CREATE MATERIALIZED VIEW <mv_name> AS SELECT * FROM <base_table>;
GRANT SELECT ON <mv_name> TO user;
GRANT REFRESH ON <mv_name> TO user;
Отмена привилегий из материализованного представления
Чтобы отозвать доступ к материализованному представлению, используйте инструкцию REVOKE
:
REVOKE
privilege_type [, privilege_type ]
ON <name> FROM principal;
Если привилегии SELECT
на базовую таблицу отзываются у владельца материализованного представления или любого другого пользователя, которому были предоставлены привилегии MANAGE
или SELECT
на материализованное представление, или если базовая таблица удаляется, владелец материализованного представления или пользователь с предоставленным доступом все равно может выполнять запросы к материализованному представлению. Однако происходит следующее поведение:
- Владелец материализованного представления или другие пользователи, которые потеряли доступ к материализованному представлению, больше не могут им воспользоваться, и представление станет устаревшим.
- Если автоматизировано с расписанием, следующий запланированный
REFRESH
либо не выполняется, либо завершится сбоем.
В следующем примере привилегия SELECT
отзывается у mv1
.
REVOKE SELECT ON mv1 FROM user1;
Включить поток данных изменений
Канал передачи изменений данных требуется для базовых таблиц материализованных представлений, за исключением некоторых расширенных вариантов использования. Чтобы включить поток изменений данных в базовой таблице, задайте свойство таблицы delta.enableChangeDataFeed
с помощью следующего синтаксиса:
ALTER TABLE table1 SET TBLPROPERTIES (delta.enableChangeDataFeed = true);
Просмотр истории обновлений для материализованного представления
Чтобы просмотреть состояние операций REFRESH
с материализованным представлением, включая текущие и прошлые обновления, выполните запрос к журналу событий DLT:.
SELECT
*
FROM
event_log(TABLE(<fully-qualified-table-name>))
WHERE
event_type = "update_progress"
ORDER BY
timestamp desc;
Замените <fully-qualified-table-name>
на полное имя материализованного представления, включая каталог и схему.
См. Что такое журнал событий DLT?.
Получение подробных сведений о материализованных представлениях с помощью обозревателя каталогов
Вы можете использовать обозреватель каталогов для просмотра сведений о материализованном представлении.
- Щелкните значок каталога
на боковой панели.
- В дереве обозревателя каталогов слева откройте каталог и выберите схему, в которой находится материализованное представление.
- Откройте элемент таблиц в выбранной схеме и щелкните материализованное представление.
Здесь вы можете использовать вкладки под именем материализованного представления для просмотра и редактирования сведений о материализованном представлении, в том числе:
- Обновление состояния и истории
- Схема таблицы
- Примеры данных (требуется активный вычислительный ресурс)
- Разрешения
- Происхождение, включая таблицы и потоки данных, от которых зависит это материализованное представление
- Аналитические сведения об использовании
- Мониторы, созданные для этого материализованного представления
Ограничения
- Требования к вычислительным ресурсам и рабочей области см. в разделе "Требования".
- Материализованные представления не поддерживают столбцы идентификаций или суррогатные ключи.
- Если материализованное представление использует агрегирование суммы по столбцу
NULL
, и в этом столбце остаются только значенияNULL
, результирующее агрегатное значение материализованного представления будет равно нулю вместоNULL
. - Вы не можете прочитать ленту изменений данных из материализованного представления.
- Запросы, использующие функцию перемещения во времени, не поддерживаются в материализованных представлениях.
- Базовые файлы, поддерживающие материализованные представления, могут включать данные из вышестоящих таблиц (включая возможные личные сведения), которые не отображаются в определении материализованного представления. Эти данные автоматически добавляются в базовое хранилище для поддержки добавочного обновления материализованных представлений. Поскольку базовые файлы материализованного представления могут рисковать раскрытием данных из исходных таблиц, не входящих в схему материализованного представления, Databricks рекомендует не предоставлять общий доступ к базовому хранилищу ненадежным нижестоящим потребителям. Например, предположим, что определение материализованного представления включает условие
COUNT(DISTINCT field_a)
. Несмотря на то что определение материализованного представления включает лишь агрегированное предложениеCOUNT DISTINCT
, базовые файлы будут содержать фактический список значенийfield_a
.