CREATE MATERIALIZED VIEW

Область применения:проверка помечены да Databricks SQL

Внимание

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

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

Синтаксис

CREATE MATERIALIZED VIEW [IF NOT EXISTS]
  view_name
  [ column_list ]
  [ table_constraints ]
  [ view_clauses ]
  AS query

column_list
   ( { column_alias [ COMMENT column_comment | column_constraint ] [...] } [, ...] [ , table_constraint ] [...])

table_constraints
   ( table_constraint [, ...] )

view_clauses
  { PARTITIONED BY (col [, ...]) |
    COMMENT view_comment |
    TBLPROPERTIES clause |
    SCHEDULE [ REFRESH ] CRON cron_string [ AT TIME ZONE timezone_id ] } [...]

Параметры

  • IF NOT EXISTS

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

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

  • view_name

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

  • column_list

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

    • column_alias

      Псевдонимы столбцов должны быть уникальными.

    • column_comment

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

    • column_constraint

      Внимание

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

      Добавляет ограничение на информационный первичный ключ или информационный внешний ключ в столбец в материализованном представлении. Ограничения не поддерживаются для материализованных представлений в каталоге hive_metastore .

  • table_constraint

    Внимание

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

    Добавляет в материализованное представление ограничения информационных первичных или информационных внешних ключей. Ограничения не поддерживаются для материализованных представлений в каталоге hive-metastore .

  • view_clauses

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

    • PARTITIONED BY

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

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

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

    • TBLPROPERTIES

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

    • SCHEDULE [ REFRESH ] CRON cron_string [ AT TIME ZONE timezone_id ]

      Если это указано, планирует потоковую таблицу или материализованное представление, чтобы обновить свои данные с заданным расписанием крона . Принимаются только time_zone_values . Функция AT TIME ZONE LOCAL не поддерживается. Если AT TIME ZONE нет, используется часовой пояс сеанса. Если AT TIME ZONE отсутствует и часовой пояс сеанса не задан, возникает ошибка. SCHEDULE семантически эквивалентен SCHEDULE REFRESH.

      Синтаксис нельзя использовать в определении SCHEDULE конвейера Delta Live Table.

  • AS query

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

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

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

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

Только владелец может REFRESH MV.

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

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

Ограничения

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

Примеры

-- 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 daily at midnight.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
  COMMENT 'Daily sales numbers'
  SCHEDULE CRON '0 0 0 * * ? *'
  AS SELECT date AS date, sum(sales) AS sumOfSales
       FROM table1
       GROUP BY date;

-- Create a materialized view with a column constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    member_id NOT NULL PRIMARY KEY,
    full_name,
    movie_title
  )
  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 table constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    member_id NOT NULL,
    full_name,
    movie_title,
    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 a materialized view without column list
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
    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;