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


CREATE MATERIALIZED VIEW

Область применения:флажок Databricks SQL

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

Дополнительные сведения о том, как выполнить обновление вручную, см. в REFRESH (MATERIALIZED VIEW или STREAMING TABLE).

Дополнительные сведения о том, как запланировать обновление, см. в разделе Примеры или в разделе ALTER MATERIALIZED VIEW.

Материализованные представления можно создавать только с помощью хранилища Pro, бессерверного SQL-хранилища или в конвейере Delta Live Tables.

Примечание.

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

Синтаксис

{ CREATE OR REPLACE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] }
  view_name
  [ column_list ]
  [ view_clauses ]
  [schedule_clause]
  AS query

column_list
   ( { column_name column_type column_properties } [, ...]
      [ , table_constraint ] [...])

   column_properties
      { NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]

view_clauses
  { PARTITIONED BY (col [, ...]) |
    COMMENT view_comment |
    TBLPROPERTIES clause |
    SCHEDULE [ REFRESH ] schedule_clause |
    WITH { ROW FILTER clause } } [...]

schedule_clause
  { EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS } |
    CRON cron_string [ AT TIME ZONE timezone_id ] }

Параметры

  • REPLACE

    Если задано, замените представление и его содержимое, если оно уже существует.

  • IF NOT EXISTS

    Создает представление, если оно не существует. Если представление по этому имени уже существует, CREATE MATERIALIZED VIEW оператор игнорируется.

    Можно указать не более одного предложения из числа IF NOT EXISTS и OR REPLACE.

  • view_name

    Имя созданного представления. Полное имя представления должно быть уникальным.

  • column_list

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

    • column_name

      Имена столбцов должны быть уникальными и сопоставляться с выходными столбцами запроса.

    • column_type

      Указывает тип данных столбца. Не все типы данных, поддерживаемые Azure Databricks, поддерживаются материализованными представлениями.

    • column_comment

      Необязательный STRING литерал, описывающий столбец. Этот параметр должен быть указан вместе с column_type. Если тип столбца не указан, комментарий столбца пропускается.

    • column_constraint

      Добавляет ограничение на информационный первичный ключ или информационный внешний ключ в столбец в материализованном представлении. Если тип столбца не указан, ограничение столбца пропускается.

    • Предложение MASK

      Внимание

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

      Добавляет функцию маски столбца для анонимизации конфиденциальных данных. Все последующие запросы из этого столбца получают результат оценки этой функции по столбцу вместо исходного значения столбца. Это может быть полезно для точного контроля доступа, когда функция может проверить идентификацию или членство в группах вызывающего пользователя, чтобы определить, следует ли скрыть это значение. Если тип столбца не указан, маска столбца пропускается.

  • table_constraint

    Добавляет основное информационное ограничение или внешнее информационное ограничение в таблицу в материализованном представлении. Если тип столбца не указан, ограничение таблицы пропускается.

  • view_clauses

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

    • PARTITIONED BY

      Необязательный список столбцов таблицы для секционирования таблицы по.

    • КОММЕНТАРИЙ view_comment

      Литерал STRING для описания таблицы.

    • TBLPROPERTIES

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

      Используйте этот параметр, чтобы указать канал среды выполнения Delta Live Tables, используемый для выполнения этой инструкции. Задайте для свойства pipelines.channel значение "PREVIEW" или "CURRENT". Значение по умолчанию — "CURRENT". Дополнительные сведения о каналах Delta Live Tables см. в каналах среды выполнения Delta Live Tables.

    • РАСПИСАНИЕ [ REFRESH ] пункт_расписания

      • EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }

        Чтобы запланировать периодические обновления, используйте синтаксис EVERY. Если указан синтаксис EVERY, то потоковая таблица или материализованное представление периодически обновляется с заданным интервалом на основе указанного значения, например HOUR, HOURS, DAY, DAYS, WEEKили WEEKS. В следующей таблице перечислены принятые целые значения для number.

        Time unit Целое значение
        HOUR or HOURS 1 <= H <= 72
        DAY or DAYS 1 <= D <= 31
        WEEK or WEEKS 1 <= W <= 8

        Примечание.

        Семантические и множественные формы включенной единицы времени семантики.

      • CRON cron_string [ AT TIME ZONE timezone_id ]

        Чтобы запланировать обновление, используя значение кварцевого cron: . Допустимые time_zone_values принимаются. Функция AT TIME ZONE LOCAL не поддерживается.

        Если AT TIME ZONE нет, используется часовой пояс сеанса. Если AT TIME ZONE отсутствует, а часовой пояс сеанса не задан, возникает ошибка. SCHEDULE семантически эквивалентен SCHEDULE REFRESH.

    • с ROW FILTER

      Внимание

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

      Добавляет функцию фильтра строк в таблицу. Все последующие запросы из этой таблицы получают подмножество строк, для которых функция принимает булево значение TRUE. Это может быть полезно для точного контроля доступа, где функция может проверить удостоверение или членство в группах вызывающего пользователя, чтобы определить, следует ли фильтровать определенные строки.

  • AS query

    Запрос, который создает представление из базовых таблиц или других представлений.

Необходимые разрешения

Пользователь, создающий материализованное представление (MV), является владельцем MV и должен иметь следующие разрешения:

  • SELECT привилегии на управление базовыми таблицами, на которые ссылается MV.
  • USE CATALOG привилегия в отношении родительского каталога и привилегия USE SCHEMA в отношении родительской схемы.
  • CREATE MATERIALIZED VIEW привилегии схемы для MV.

Для того чтобы пользователь мог обновить MV, им требуется:

  • USE CATALOG привилегия на родительский каталог и привилегия USE SCHEMA на родительскую схему.
  • Владение MV или REFRESH привилегией на MV.
  • Владелец MV должен иметь привилегию SELECT на управление базовыми таблицами, на которые ссылается MV.

Для того чтобы пользователь мог запрашивать MV, им требуется:

  • USE CATALOG привилегия родительского каталога и привилегия USE SCHEMA родительской схемы.
  • SELECT привилегии над материализованным представлением.

Фильтры строк и маски столбцов

Внимание

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

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

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

Дополнительные сведения о том, как использовать фильтры строк и маски столбцов, см. в разделе Фильтрация конфиденциальных данных таблицы с помощью фильтров строк и маски столбцов.

Управление фильтрами строк и масками столбцов

Фильтры строк и маски столбцов для материализованных представлений должны быть добавлены с помощью инструкции CREATE.

Поведение

  • Обновить как определяющего: когда инструкция REFRESH MATERIALIZED VIEW обновляет материализованное представление, функции фильтрации строк выполняются с правами определителя (как владелец таблицы). Это означает, что обновление таблицы использует контекст безопасности пользователя, создавшего материализованное представление.
  • Запрос. Хотя большинство фильтров выполняются с правами определителя, функции, которые проверяют контекст пользователя (например CURRENT_USER , и IS_MEMBER) являются исключениями. Эти функции выполняются в качестве вызывающего средства. Этот подход применяет элементы управления безопасностью и доступом для определенных пользователей на основе контекста текущего пользователя.
  • При создании материализованных представлений по исходным таблицам, содержащим фильтры строк и маски столбцов, обновление материализованного представления всегда является полным обновлением. Полное обновление повторно обрабатывает все данные, доступные в источнике с помощью последних определений. Это гарантирует, что политики безопасности в исходных таблицах оцениваются и применяются с наиболее up-toданных и определений даты.

Наблюдаемость

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

Ограничения

  • Если в материализованном представлении с агрегацией sum по столбцу, допускающему значения NULL, удалено последнее ненулевое значение из этого столбца, и таким образом в нём остаются только значения NULL, то итоговое агрегатное значение материализованного представления возвращает нуль вместо NULL.
  • Ссылка на столбец не требует псевдонима. Для ссылочных выражений, отличных от столбцов, требуется псевдоним, как показано в следующем примере:
    • Дозволенный: SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
    • Запрещено: SELECT col1, SUM(col2) FROM t GROUP BY col1
  • NOT NULL необходимо вручную указать вместе с PRIMARY KEY тем, чтобы быть допустимым оператором.
  • Материализованные представления не поддерживают столбцы идентичности или суррогатные ключи.
  • Материализованные представления не поддерживают команды OPTIMIZE и VACUUM. Обслуживание происходит автоматически.
  • Материализованные представления не поддерживают ожидания для определения ограничений качества данных.

Примеры

-- Create a materialized view if it doesn't exist
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies
  AS SELECT mo.member_id, mb.full_name, mo.movie_title
       FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;

-- Create and schedule a materialized view to be refreshed every day.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
  COMMENT 'Daily sales numbers'
  SCHEDULE EVERY 1 DAY
  AS SELECT date AS date, sum(sales) AS sumOfSales
       FROM table1
       GROUP BY date;

-- Sets the runtime channel to "PREVIEW"
> CREATE MATERIALIZED VIEW mv_preview
  TBLPROPERTIES(pipelines.channel = "PREVIEW")
  AS SELECT * FROM RANGE(10)

-- Create a materialized view with a table constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    member_id int NOT NULL,
    full_name string,
    movie_title string,
    CONSTRAINT movie_pk PRIMARY KEY(member_id)
  )
  AS SELECT mo.member_id, mb.full_name, mo.movie_title
       FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;

-- Create or replace the materialized view to remove the table constraint and add a partition
> CREATE OR REPLACE MATERIALIZED VIEW subscribed_movies
  PARTITIONED BY (member_id)
  AS SELECT mo.member_id, mb.full_name, mo.movie_title
       FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;

-- Create a materialized view with a row filter and a column mask
> CREATE MATERIALIZED VIEW masked_view (
    id int,
    name string,
    region string,
    ssn string MASK catalog.schema.ssn_mask_fn
  )
  WITH ROW FILTER catalog.schema.us_filter_fn ON (region)
  AS SELECT id, name, region, ssn
       FROM employees;