Использование материализованных представлений в Databricks SQL
Примечание
Если вам нужно использовать Приватный канал Azure подключение к материализованному представлению, обратитесь к представителю Databricks.
В этой статье описывается создание и использование материализованных представлений в Databricks SQL для повышения производительности и снижения затрат на обработку и анализ рабочих нагрузок.
Важно!
Материализованные представления, созданные в Databricks SQL, поддерживаются конвейером бессерверных динамических таблиц Delta Live Tables. Рабочая область должна поддерживать бессерверные конвейеры для использования этой функции.
В Databricks SQL материализованные представления — это управляемые таблицы каталога Unity, которые позволяют пользователям предварительно компетировать результаты на основе последней версии данных в исходных таблицах. Материализованные представления в Azure Databricks отличаются от других реализаций, так как результаты, возвращаемые, отражают состояние данных, когда материализованное представление было последнее обновление, а не всегда обновляло результаты при запросе материализованного представления. Можно вручную обновить материализованные представления или запланировать обновления.
Материализованные представления являются мощными для рабочих нагрузок обработки данных, таких как извлечение, преобразование и загрузка (ETL). Материализованные представления предоставляют простой декларативный способ обработки данных для соответствия, исправлений, агрегатов или общего отслеживания измененных данных (CDC). Материализованные представления снижают затраты и повышают задержку запросов путем предварительного вычисления медленных запросов и часто используемых вычислений. Материализованные представления также позволяют легко использовать преобразования путем очистки, обогащения и денормализации базовых таблиц. Материализованные представления могут снизить затраты, обеспечивая упрощенное взаимодействие с конечным пользователем, так как в некоторых случаях они могут постепенно вычислять изменения из базовых таблиц.
Материализованные представления впервые поддерживаются в Azure Databricks с запуском разностных динамических таблиц. При создании материализованного представления в хранилище SQL Databricks создается бессерверный конвейер для обработки обновлений в материализованном представлении. Вы можете отслеживать состояние операций обновления в пользовательском интерфейсе разностных динамических таблиц или API конвейеров. Просмотр состояния материализованного представления.
Необходимо использовать хранилище sql с поддержкой каталога Unity pro или бессерверным хранилищем SQL.
Чтобы обновить материализованное представление, необходимо находиться в созданной рабочей области.
Рабочая область должна находиться в регионе, поддерживающем бессерверные хранилища SQL.
- Вы должны быть владельцем материализованного представления или иметь
SELECT
на материализованном представлении, а такжеUSE SCHEMA
USE CATALOG
на своих родителях. - Необходимо использовать один из следующих вычислительных ресурсов:
- Хранилище SQL
- Интерфейсы разностных динамических таблиц
- Вычисление в режиме общего доступа
- Режим доступа к одному пользователю в Databricks Runtime 15.4 и более поздней версии, если рабочая область включена для бессерверных вычислений. Подробные инструкции по управлению доступом для отдельных пользователей.
- Только если вы являетесь владельцем материализованного представления: один вычислительный ресурс режима доступа пользователя, на котором выполняется Среда выполнения Databricks в диапазоне от 14.3 до 15.3.
Дополнительные сведения об использовании материализованных представлений см. в разделе "Ограничения".
Операции материализованного представления CREATE
Databricks SQL используют хранилище SQL Databricks для создания и загрузки данных в материализованном представлении. Создание материализованного представления — это синхронная операция, которая означает, что CREATE MATERIALIZED VIEW
команды блоки до создания материализованного представления и начальной загрузки данных. Конвейер бессерверных разностных динамических таблиц автоматически создается для каждого материализованного представления Databricks SQL. Когда материализованное представление обновляется, конвейер Delta Live Tables обрабатывает обновление.
Чтобы создать материализованное представление, используйте инструкцию CREATE MATERIALIZED VIEW
. Чтобы отправить инструкцию создания, используйте редактор SQL в пользовательском интерфейсе Azure Databricks, ИНТЕРФЕЙС командной строки SQL Databricks или API SQL Databricks.
Примечание
Пользователь, создающий материализованное представление, является владельцем материализованного представления и должен иметь следующие разрешения:
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;
Материализованные представления, созданные с помощью хранилищ SQL, автоматически обновляются с помощью конвейера разностных динамических таблиц. Конвейеры delta Live Tables используют среду выполнения в канале current
по умолчанию. Ознакомьтесь с заметками о выпуске Delta Live Tables и процессом обновления выпуска, чтобы узнать о процессе выпуска.
Databricks рекомендует использовать current
канал для рабочих нагрузок. Новые функции сначала выпускаются в preview
канале. Конвейер можно задать для канала delta Live Table для предварительной версии, чтобы протестировать новые функции, указав preview
в качестве свойства таблицы. Это свойство можно указать при создании таблицы или после создания таблицы с помощью инструкции ALTER.
В следующем примере кода показано, как настроить канал для предварительного просмотра в инструкции CREATE:
CREATE OR REPLACE MATERIALIZED VIEW foo.default.bar
TBLPROPERTIES ('pipelines.channel' = 'preview') as
SELECT
*
FROM
range(5)
Databricks рекомендует загружать внешние данные с помощью Федерации Lakehouse для поддерживаемых источников данных. Сведения о загрузке данных из источников, не поддерживаемых федерацией Lakehouse, см . в параметрах формата данных.
Операция REFRESH
обновляет материализованное представление, чтобы отразить последние изменения базовой таблицы. Операция синхронна по умолчанию, что означает, что команды блокируются до завершения операции обновления. Чтобы обновить материализованное представление, используйте инструкцию REFRESH MATERIALIZED VIEW
. Дополнительные сведения о синтаксисе и параметрах SQL для этой команды см. в разделе REFRESH (MATERIALIZED VIEW или STREAMING TABLE ). Дополнительные сведения о типах материализованных представлений, которые могут быть добавочно обновлены, см. в разделе добавочное обновление для материализованных представлений.
Чтобы отправить инструкцию обновления, используйте редактор SQL в пользовательском интерфейсе Azure Databricks, записную книжку, подключенную к хранилищу SQL, интерфейс командной строки SQL Databricks или API SQL Databricks.
Только владелец может REFRESH
материализованное представление.
В следующем примере обновляется материализованное mv1
представление:
REFRESH MATERIALIZED VIEW mv1;
Материализованные представления автоматически создают и используют бессерверные конвейеры Delta Live Tables для обработки операций обновления. Обновление управляется конвейером Delta Live Tables, и обновление отслеживается хранилищем Databricks SQL, используемым для создания материализованного представления. Материализованные представления можно обновить с помощью конвейера Delta Live Tables, который выполняется по расписанию. См . раздел "Активировано и непрерывный режим конвейера".
Примечание
Среда выполнения Delta Live Tables не может обнаруживать изменения в источниках данных, отличных от Delta. Таблица по-прежнему обновляется регулярно, но с более высоким интервалом триггера по умолчанию, чтобы предотвратить чрезмерную перекомпьюцию от замедления добавочной обработки при вычислении.
По умолчанию операции обновления выполняются синхронно. Вы также можете задать операцию обновления для асинхронного выполнения. Это можно задать с помощью команды обновления. См. раздел REFRESH (MATERIALIZED VIEW или STREAMING TABLE) Поведение, связанное с каждым подходом, как показано ниже.
- Синхронное обновление: синхронное обновление предотвращает продолжение других операций до завершения обновления. Если результат необходим для следующего шага, например при последовательности операций обновления в средствах оркестрации, таких как Задания Databricks, используйте синхронное обновление. Для оркестрации материализованных представлений с заданием используйте тип задачи SQL . См . инструкции по расписанию и оркестрации рабочих процессов.
- Асинхронное: асинхронное обновление запускает фоновое задание в разностных динамических таблицах при запуске обновления материализованного представления, что позволяет команде вернуться до завершения загрузки данных. Этот тип обновления может сэкономить на затратах, так как операция не обязательно хранит вычислительные мощности в хранилище, где инициируется команда. Если обновление становится неактивным, а другие задачи не выполняются, хранилище может завершить работу, пока обновление использует другие доступные вычислительные ресурсы. Кроме того, асинхронные обновления поддерживают запуск нескольких операций параллельно.
Некоторые запросы можно постепенно обновлять. См . добавочное обновление для материализованных представлений. Если добавочное обновление не может быть выполнено, вместо этого выполняется полное обновление.
Вы можете настроить материализованное представление Databricks SQL для автоматического обновления на основе определенного расписания. Чтобы задать расписание, выполните одно из следующих действий:
- Настройка расписания с
SCHEDULE
предложением при создании материализованного представления - Добавьте расписание с помощью инструкции ALTER MATERIALIZED VIEW .
При создании расписания новое задание Databricks автоматически настраивается для обработки обновления.
Чтобы просмотреть расписание, выполните одно из следующих действий:
- Запустите инструкцию
DESCRIBE EXTENDED
из редактора SQL в пользовательском интерфейсе Azure Databricks. - Используйте обозреватель каталогов для просмотра материализованного представления. Расписание отображается на вкладке "Обзор " в разделе "Состояние обновления". См. раздел "Что такое обозреватель каталогов?".
Примечание
Так как конвейер разностных динамических таблиц управляет обновлениями материализованного представления, задержка возникает при запуске конвейера. Это время может находиться в секундах до минут, в дополнение к времени, необходимому для выполнения обновления.
Состояние материализованного представления можно просмотреть, просмотрев конвейер, который управляет материализованным представлением в пользовательском интерфейсе разностных динамических таблиц или просмотром сведений об обновлении, возвращаемых DESCRIBE EXTENDED
командой для материализованного представления.
Вы также можете просмотреть журнал обновления материализованного представления, запросить журнал событий Delta Live Tables. Просмотр журнала обновления для материализованного представления.
Вы можете использовать страницу журнала запросов для доступа к сведениям о запросах и профилям запросов, которые помогут определить плохое выполнение запросов и узких мест в конвейере Delta Live Table, используемом для запуска обновлений потоковой таблицы. Общие сведения о типах сведений, доступных для журналов запросов и профилей запросов, см. в разделе "Журнал запросов" и "Профиль запросов".
Важно!
Эта функция предоставляется в режиме общедоступной предварительной версии. Администраторы рабочей области могут включить эту функцию на странице "Предварительные версии". См. статью "Управление предварительными версиями Azure Databricks".
Все инструкции, связанные с материализованными представлениями, отображаются в журнале запросов. Раскрывающийся список инструкций можно использовать для выбора любой команды и проверки связанных запросов. За всеми CREATE
операторами следует REFRESH
инструкция, которая выполняется асинхронно в конвейере Delta Live Table. Инструкции REFRESH
обычно включают подробные планы запросов, которые предоставляют аналитические сведения о оптимизации производительности.
Чтобы получить доступ к REFRESH
операторам в пользовательском интерфейсе журнала запросов, выполните следующие действия.
- Щелкните в левой боковой панели, чтобы открыть пользовательский интерфейс журнала запросов.
- Установите флажок REFRESH в раскрывающемся списке инструкции.
- Щелкните имя инструкции запроса, чтобы просмотреть сводные сведения, такие как длительность запроса и агрегированные метрики.
- Щелкните "Просмотреть профиль запроса", чтобы открыть профиль запроса. Дополнительные сведения о навигации по профилю запроса см. в разделе "Профиль запроса".
- При необходимости используйте ссылки в разделе "Источник запросов", чтобы открыть связанный запрос или конвейер.
Примечание
Материализованное представление должно быть настроено для запуска с помощью канала предварительной версии . См. раздел "Задать канал среды выполнения".
См. статью CREATE MATERIALIZED VIEW.
По умолчанию конвейер Delta Live Tables, который управляет материализованным представлением, не отображается в пользовательском интерфейсе разностных динамических таблиц. Чтобы просмотреть конвейер в пользовательском интерфейсе разностных динамических таблиц, необходимо напрямую получить доступ к ссылке на страницу сведений о конвейере. Чтобы получить доступ к ссылке, выполните следующие действия.
- Скопируйте и вставьте ссылку, показанную в строке последнего обновления таблицы, возвращаемой инструкцией
DESCRIBE EXTENDED
. - На вкладке "Происхождение" для материализованного представления щелкните "Конвейеры" и щелкните ссылку конвейера.
Для асинхронных REFRESH
команд, отправленных с помощью редактора SQL в пользовательском интерфейсе Azure Databricks, можно просмотреть состояние обновления, выполнив ссылку, показанную на панели результатов .
Чтобы остановить активное обновление в пользовательском интерфейсе разностных динамических таблиц, на странице сведений о конвейере нажмите кнопку "Остановить ", чтобы остановить обновление конвейера. Вы также можете остановить обновление с помощью интерфейса командной строки Databricks или POST /api/2.0/pipelines/{pipeline_id}/stop в API конвейеров.
Чтобы обновить определение материализованного представления, сначала необходимо удалить, а затем повторно создать материализованное представление.
Примечание
Чтобы отправить команду для удаления материализованного представления, необходимо быть владельцем этого материализованного представления.
Чтобы удалить материализованное представление, используйте инструкцию 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.
Вы можете изменить владельца материализованного представления, если вы являетесь администратором хранилища метаданных и администратором рабочей области. Материализованные представления автоматически создают и используют конвейеры Delta Live Tables для обработки изменений. Чтобы изменить владельца материализованных представлений, выполните следующие действия.
- На вкладке "Происхождение" для материализованного представления щелкните "Конвейеры" и щелкните ссылку конвейера.
- Щелкните меню kebab справа от имени конвейера и щелкните "Разрешения". Откроется диалоговое окно разрешений.
- Щелкните x справа от имени текущего владельца, чтобы удалить текущего владельца.
- Начните вводить текст, чтобы отфильтровать список доступных пользователей. Щелкните пользователя, который должен быть новым владельцем конвейера.
- Нажмите кнопку "Сохранить", чтобы сохранить изменения и закрыть диалоговое окно.
Все ресурсы конвейера, включая материализованные представления, определенные в конвейере, принадлежат новому владельцу конвейера. Все будущие обновления выполняются с помощью удостоверения нового владельца.
Материализованные представления поддерживают расширенные элементы управления доступом для поддержки общего доступа, избегая предоставления потенциально частных данных. Владелец материализованного представления может предоставлять SELECT
права другим пользователям. Пользователям с SELECT
доступом к материализованному представлению не требуется SELECT
доступ к таблицам, на которые ссылается материализованное представление. Этот контроль доступа обеспечивает общий доступ к данным при управлении доступом к базовым данным.
Чтобы предоставить доступ к материализованному представлению, используйте инструкцию GRANT
:
GRANT
privilege_type [, privilege_type ] ...
ON <mv_name> TO principal;
Privilege_type может быть следующим:
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
привилегии в базовой таблице отозваны от владельца материализованного представления или любого другого пользователя, которому SELECT
были предоставлены привилегии для материализованного представления, или базовая таблица удаляется, материализованный владелец представления или пользователь, которому предоставлен доступ, по-прежнему может запрашивать материализованное представление. Однако происходит следующее поведение:
- Материализованный владелец представления или другие пользователи, которые потеряли доступ к материализованному представлению, больше
REFRESH
не может это материализованное представление, и материализованное представление станет устаревшим. - Если автоматизировано с расписанием, следующий запланированный
REFRESH
сбой или не выполняется.
В следующем примере отозвана привилегияSELECT
:mv1
REVOKE SELECT ON mv1 FROM user1;
Канал изменений данных требуется для материализованных таблиц представлений, за исключением некоторых расширенных вариантов использования. Чтобы включить веб-канал изменений в базовой таблице, задайте delta.enableChangeDataFeed
свойство таблицы с помощью следующего синтаксиса:
ALTER TABLE table1 SET TBLPROPERTIES (delta.enableChangeDataFeed = true);
Чтобы просмотреть состояние операций REFRESH
в материализованном представлении, включая текущие и прошлые обновления, запросите журнал событий Delta Live Tables:
SELECT
*
FROM
event_log(TABLE(<fully-qualified-table-name>))
WHERE
event_type = "update_progress"
ORDER BY
timestamp desc;
Замените <fully-qualified-table-name>
полное имя материализованного представления, включая каталог и схему.
См. раздел " Что такое журнал событий Delta Live Tables?".
- Требования к вычислительным ресурсам и рабочей области см. в разделе "Требования".
- Материализованные представления не поддерживают столбцы удостоверений или суррогатные ключи.
- Если материализованное представление использует статистическое выражение суммы по
NULL
столбцу с возможностью, а толькоNULL
значения остаются в этом столбце, то результирующий результат представления не равен нулюNULL
. - Невозможно прочитать веб-канал измененных данных из материализованного представления.
- Запросы на поездки по времени не поддерживаются в материализованных представлениях.
- Базовые файлы, поддерживающие материализованные представления, могут включать данные из вышестоящих таблиц (включая возможные личные сведения), которые не отображаются в определении материализованного представления. Эти данные автоматически добавляются в базовое хранилище для поддержки добавочного обновления материализованных представлений. Поскольку базовые файлы материализованного представления могут рисковать предоставлением данных из вышестоящих таблиц, не входящих в схему материализованного представления, Databricks рекомендует не предоставлять общий доступ к базовому хранилищу с ненадежными подчиненными потребителями. Например, предположим, что определение материализованного представления включает
COUNT(DISTINCT field_a)
предложение. Несмотря на то, что определение материализованного представления содержит только предложение агрегированияCOUNT DISTINCT
, базовые файлы будут содержать список фактических значенийfield_a
.