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


CREATE MATERIALIZED VIEW (конвейерные линии)

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

Дополнительные сведения о выполнении или планировании обновлений см. в статье "Запуск обновления конвейера".

Синтаксис

CREATE [OR REFRESH] [PRIVATE] MATERIALIZED VIEW
  view_name
  [ column_list ]
  [ view_clauses ]
  AS query

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

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

view_clauses
  { USING DELTA |
    PARTITIONED BY (col [, ...]) |
    CLUSTER BY clause |
    LOCATION path |
    COMMENT view_comment |
    TBLPROPERTIES clause |
    WITH { ROW FILTER clause } } [...]

Параметры

  • REFRESH

    При указании создадите представление или обновите существующее представление и его содержимое.

  • ЧАСТНЫЙ

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

    • Они не добавляются в каталог и доступны только в определяемом конвейере.
    • Они могут иметь то же имя, что и существующий объект в каталоге. В конвейере, если частное материализованное представление и объект в каталоге имеют то же имя, ссылки на имя разрешаются в частное материализованное представление.
    • Частные материализованные представления сохраняются только в течение всего времени существования конвейера, а не только одного обновления.

    Частные материализованные представления были ранее созданы с параметром TEMPORARY .

  • view_name

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

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

  • column_list

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

  • ограничение_таблицы

    Это важно

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

    При указании схемы можно определить первичные и внешние ключи. Ограничения являются информационными и не применяются. См. пункт CONSTRAINT в справочной информации по языку SQL.

    Замечание

    Чтобы определить ограничения таблицы, конвейер должен поддерживать Unity Catalog.

  • view_clauses

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

    • ИСПОЛЬЗОВАНИЕ DELTA

      Задает формат данных. Единственным вариантом является DELTA.

      Это предложение является необязательным и по умолчанию используется delta.

    • РАЗДЕЛЁННО ПО

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

      Liquid Clustering предоставляет гибкое и оптимизированное решение для кластеризации. Рекомендуется использовать CLUSTER BY вместо PARTITIONED BY для конвейеров.

    • CLUSTER BY

      Включите кластеризацию жидкости в таблице и определите столбцы, используемые в качестве ключей кластеризации. Используйте автоматическую кластеризацию с CLUSTER BY AUTO, и Databricks интеллектуально выбирает ключи кластеризации для оптимизации производительности запросов. Взаимоисключающ с PARTITIONED BY.

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

    • МЕСТОПОЛОЖЕНИЕ

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

      Этот параметр доступен только при публикации в хранилище метаданных Hive. В каталоге Unity расположение управляется автоматически.

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

      Необязательное описание таблицы.

    • TBLPROPERTIES

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

    • С ROW FILTER

    Это важно

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

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

    См. ROW FILTER пункт.

  • query

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

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

Пользователь с правами выполнения для конвейера должен иметь следующие разрешения:

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

Чтобы пользователь мог обновить конвейер, в котором определено материализованное представление, необходимо:

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

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

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

Ограничения

  • Если материализованное представление с агрегатом 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 by reading from an external data source, using the default schema:
CREATE OR REFRESH MATERIALIZED VIEW taxi_raw
AS SELECT * FROM read_files("/databricks-datasets/nyctaxi/sample/json/")

-- Create a materialized view by reading from a dataset defined in a pipeline:
CREATE OR REFRESH MATERIALIZED VIEW filtered_data
AS SELECT
  ...
FROM taxi_raw

-- Specify a schema and clustering columns for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING,
  customer_name STRING,
  number_of_line_items STRING,
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) CLUSTER BY (order_day_of_week, customer_id)
COMMENT "Raw data on sales"
AS SELECT * FROM ...

-- Specify partition columns for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING,
  customer_name STRING,
  number_of_line_items STRING,
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) PARTITIONED BY (order_day_of_week)
COMMENT "Raw data on sales"
AS SELECT * FROM ...

-- Specify a primary and foreign key constraint for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING NOT NULL PRIMARY KEY,
  customer_name STRING,
  number_of_line_items STRING,
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime)),
  CONSTRAINT fk_customer_id FOREIGN KEY (customer_id) REFERENCES main.default.customers(customer_id)
)
COMMENT "Raw data on sales"
AS SELECT * FROM ...

-- Specify a row filter and mask clause for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales (
  customer_id STRING MASK catalog.schema.customer_id_mask_fn,
  customer_name STRING,
  number_of_line_items STRING COMMENT 'Number of items in the order',
  order_datetime STRING,
  order_number LONG,
  order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
)
COMMENT "Raw data on sales"
WITH ROW FILTER catalog.schema.order_number_filter_fn ON (order_number)
AS SELECT * FROM sales_bronze