Поделиться через


Использование материализованных представлений в Databricks SQL

Внимание

Эта функция предоставляется в режиме общедоступной предварительной версии.

В этой статье описывается создание и использование материализованных представлений в Databricks SQL для повышения производительности и снижения затрат на обработку и анализ рабочих нагрузок.

Что такое материализованные представления?

В Databricks SQL материализованные представления — это управляемые таблицы каталога Unity, которые позволяют пользователям предварительно компетировать результаты на основе последней версии данных в исходных таблицах. Материализованные представления в Azure Databricks отличаются от других реализаций, так как результаты, возвращаемые, отражают состояние данных, когда материализованное представление было последнее обновление, а не всегда обновляло результаты при запросе материализованного представления. Можно вручную обновить материализованные представления или запланировать обновления.

Материализованные представления являются мощными для рабочих нагрузок обработки данных, таких как извлечение, преобразование и загрузка (ETL). Материализованные представления предоставляют простой декларативный способ обработки данных для соответствия, исправлений, агрегатов или общего отслеживания измененных данных (CDC). Материализованные представления снижают затраты и повышают задержку запросов путем предварительного вычисления медленных запросов и часто используемых вычислений. Материализованные представления также позволяют легко использовать преобразования путем очистки, обогащения и денормализации базовых таблиц. Материализованные представления могут снизить затраты, обеспечивая упрощенное взаимодействие с конечным пользователем, так как в некоторых случаях они могут постепенно вычислять изменения из базовых таблиц.

Материализованные представления впервые поддерживаются на платформе аналитики данных Databricks с запуском разностных динамических таблиц. При создании материализованного представления в хранилище Databricks SQL конвейер Delta Live Tables создается для обработки обновлений в материализованном представлении. Вы можете отслеживать состояние операций обновления в пользовательском интерфейсе разностных динамических таблиц, API разностных динамических таблиц или интерфейсе командной строки разностных динамических таблиц. Просмотр состояния материализованного представления.

Требования

  • Для создания и обновления материализованных представлений необходимо использовать хранилище Databricks SQL с поддержкой каталога Unity.

  • Рабочая область должна находиться в бессерверном регионе.

Сведения об ограничениях при использовании материализованных представлений с Databricks SQL см. в разделе "Ограничения".

Создание материализованного представления

Чтобы создать материализованное представление, используйте инструкцию CREATE MATERIALIZED VIEW . См. статью CREATE MATERIALIZED VIEW в справочнике по Databricks SQL. Чтобы отправить инструкцию создания, используйте редактор 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
  table1
GROUP BY
  date;

Как создаются материализованные представления?

Операции материализованного представления CREATE Databricks SQL используют хранилище SQL Databricks для создания и загрузки данных в материализованном представлении. Так как создание материализованного представления является синхронной операцией в хранилище DATAbricks SQL, CREATE MATERIALIZED VIEW команды блокируются до создания материализованного представления и начальной загрузки данных. Конвейер разностных динамических таблиц автоматически создается для каждого материализованного представления Databricks SQL. При обновлении материализованного представления начинается обновление конвейера Delta Live Tables для обработки обновления.

Загрузка данных из внешних систем

Databricks рекомендует загружать внешние данные с помощью Федерации Lakehouse для поддерживаемых источников данных. Сведения о загрузке данных из источников, не поддерживаемых федерацией Lakehouse, см . в параметрах формата данных.

Обновление материализованного представления

Операция REFRESH обновляет материализованное представление, чтобы отразить последние изменения базовой таблицы. Чтобы обновить материализованное представление, используйте инструкцию REFRESH MATERIALIZED VIEW . См. статью REFRESH (MATERIALIZED VIEW and STREAMING TABLE) в справочнике по Databricks SQL. Чтобы отправить инструкцию обновления, используйте редактор SQL в пользовательском интерфейсе Azure Databricks, ИНТЕРФЕЙС командной строки SQL Databricks или API SQL Databricks.

Только владелец может REFRESH материализованное представление.

В следующем примере обновляется материализованное mv1 представление:

REFRESH MATERIALIZED VIEW mv1;

Как обновляются материализованные представления Databricks SQL?

Материализованные представления автоматически создают и используют конвейеры Delta Live Tables для обработки операций обновления. Так как обновление управляется конвейером разностных динамических таблиц, хранилище SQL Databricks, используемое для создания материализованного представления, не используется и не требует выполнения во время операции обновления.

Конвейеры разностных динамических таблиц используют непрерывный или триггерный режим выполнения. Материализованные представления можно обновлять в любом режиме выполнения. Чтобы избежать ненужной обработки при работе в режиме непрерывного выполнения, конвейеры автоматически отслеживают зависимые таблицы Delta и выполняют обновление только при изменении содержимого этих зависимых таблиц. См. раздел "Что такое конвейер динамических таблиц Delta"?.

Примечание.

Среда выполнения Delta Live Tables не может обнаруживать изменения в источниках данных, отличных от Delta. Таблица по-прежнему обновляется регулярно, но с более высоким интервалом триггера по умолчанию, чтобы предотвратить чрезмерную перекомпьюцию от замедления добавочной обработки при вычислении.

По умолчанию операции обновления выполняются синхронно. Вы также можете задать операцию обновления для асинхронного выполнения. Поведение, связанное с каждым подходом, выглядит следующим образом:

  • Синхронно: синхронное обновление блокирует другие операции до завершения операции обновления. Это позволяет выполнять последовательности операций обновления в средстве оркестрации, например рабочих процессов. Для оркестрации материализованных представлений с рабочими процессами используйте тип задачи SQL . Общие сведения о рабочих процессах Azure Databricks.
  • Асинхронное обновление запускает фоновое задание в разностных динамических таблицах при начале обновления материализованного представления, и команда возвращается до завершения загрузки данных. Так как конвейер Delta Live Tables управляет обновлением, хранилище SQL Databricks, используемое для создания материализованного представления, не используется. Он не должен выполняться во время операции обновления.

Некоторые запросы можно постепенно обновлять. Сведения об операциях обновления см. в разделе "Операции обновления" для материализованных представлений. Если добавочное обновление не может быть выполнено, вместо этого выполняется полное обновление.

Планирование обновлений материализованного представления

Вы можете настроить материализованное представление Databricks SQL для автоматического обновления на основе определенного расписания. Настройте это расписание с SCHEDULE предложением при создании материализованного представления или добавлении расписания с помощью инструкции ALTER VIEW . При создании расписания новое задание Databricks автоматически настраивается для обработки обновления. Вы можете просмотреть расписание в любое время с помощью инструкции DESCRIBE EXTENDED .

Обновление определения материализованного представления

Чтобы обновить определение материализованного представления, сначала необходимо удалить, а затем повторно создать материализованное представление.

Удаление материализованного представления

Примечание.

Чтобы отправить команду для удаления материализованного представления, необходимо быть владельцем этого материализованного представления.

Чтобы удалить материализованное представление, используйте инструкцию 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.

Просмотр состояния материализованного обновления представления

Примечание.

Так как конвейер разностных динамических таблиц управляет обновлениями материализованного представления, задержка возникает при запуске конвейера. Это время может находиться в секундах до минут, в дополнение к времени, необходимому для выполнения обновления.

Состояние материализованного представления можно просмотреть, просмотрев конвейер, который управляет материализованным представлением в пользовательском интерфейсе разностных динамических таблиц или просмотром сведений об обновлении, возвращаемых DESCRIBE EXTENDED командой для материализованного представления.

Вы также можете просмотреть журнал обновления материализованного представления, запросить журнал событий Delta Live Tables. Просмотр журнала обновления для материализованного представления.

Просмотр состояния обновления в пользовательском интерфейсе разностных динамических таблиц

По умолчанию конвейер Delta Live Tables, который управляет материализованным представлением, не отображается в пользовательском интерфейсе разностных динамических таблиц. Чтобы просмотреть конвейер в пользовательском интерфейсе разностных динамических таблиц, необходимо напрямую получить доступ к ссылке на страницу сведений о конвейере. Чтобы получить доступ к ссылке, выполните следующие действия.

  • При отправке REFRESHкоманды в редакторе SQL следуйте ссылке на панели результатов .
  • Следуйте ссылке, возвращаемой инструкцией DESCRIBE EXTENDED .
  • На вкладке "Происхождение" для материализованного представления щелкните "Конвейеры" и щелкните ссылку конвейера.

Остановка активного обновления

Чтобы остановить активное обновление в пользовательском интерфейсе разностных динамических таблиц, на странице сведений о конвейере нажмите кнопку "Остановить ", чтобы остановить обновление конвейера. Вы также можете остановить обновление с помощью интерфейса командной строки Databricks или POST /api/2.0/pipelines/{pipeline_id}/stop в API конвейеров.

Изменение владельца материализованного представления

Вы можете изменить владельца материализованного представления, если вы являетесь администратором хранилища метаданных и администратором рабочей области. Материализованные представления автоматически создают и используют конвейеры 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?".

Определение того, используется ли добавочное или полное обновление

Чтобы оптимизировать производительность материализованных обновлений представления, Azure Databricks использует модель затрат для выбора метода, используемого для обновления. В следующей таблице описаны следующие методы:

Методика Добавочное обновление? Description
FULL_RECOMPUTE No Материализованное представление было полностью перекомпилировано
NO_OP Нет данных Материализованное представление не было обновлено, так как не было обнаружено никаких изменений в базовой таблице.
ROW_BASED или PARTITION_OVERWRITE Да Материализованное представление было постепенно обновлено с помощью указанного метода.

Чтобы определить используемый метод, выполните запрос к журналу событий Delta Live Tables, где находится:event_typeplanning_information

SELECT
  timestamp,
  message
FROM
  event_log(TABLE(<fully-qualified-table-name>))
WHERE
  event_type = 'planning_information'
ORDER BY
  timestamp desc;

Замените <fully-qualified-table-name> полное имя материализованного представления, включая каталог и схему.

См. раздел " Что такое журнал событий Delta Live Tables?".

Ограничения

  • Существуют ограничения на управление MV и их запросы:

    • Материализованные представления DATAbricks SQL можно создавать и обновлять только в хранилищах pro SQL и бессерверных хранилищах SQL.
    • Материализованное представление SQL Databricks можно обновить только из созданной рабочей области.
    • Владелец материализованного представления Databricks SQL может запрашивать материализованное представление из одного кластера режима доступа пользователей. В противном случае материализованные представления Databricks SQL можно запрашивать только из хранилищ SQL Databricks, Delta Live Tables и общих кластеров под управлением Databricks Runtime 11.3 или более поздней версии.
  • Материализованные представления не поддерживают столбцы удостоверений или суррогатные ключи.

  • Если материализованное представление использует статистическое выражение суммы по NULLстолбцу с возможностью, а только NULL значения остаются в этом столбце, то результирующий результат представления не равен нулю NULL.

  • Базовые файлы, поддерживающие материализованные представления, могут включать данные из вышестоящих таблиц (включая возможные личные сведения), которые не отображаются в определении материализованного представления. Эти данные автоматически добавляются в базовое хранилище для поддержки добавочного обновления материализованных представлений. Поскольку базовые файлы материализованного представления могут рисковать предоставлением данных из вышестоящих таблиц, не входящих в схему материализованного представления, Databricks рекомендует не предоставлять общий доступ к базовому хранилищу с ненадежными подчиненными потребителями. Например, предположим, что определение материализованного представления включает COUNT(DISTINCT field_a) предложение. Несмотря на то, что определение материализованного представления содержит только предложение агрегирования COUNT DISTINCT , базовые файлы будут содержать список фактических значений field_a.

  • Материализованные представления Databricks SQL не поддерживаются в регионах южной части США и западной части США 2.