Pular para o conteúdo principal

CREATE MATERIALIZED VIEW ( )DLT

Um viewmaterializado é um view em que os resultados pré-computados estão disponíveis para consulta e podem ser atualizados para refletir as alterações na entrada. A visualização materializada definida em um notebook pipeline é apoiada por um notebook DLT pipeline. Sempre que um view materializado é atualizado, os resultados da consulta são recalculados para refletir as alterações no conjunto de dados upstream. O senhor pode atualizar a visualização materializada manualmente ou em um programa.

Para saber mais sobre como executar ou programar atualizações, consulte executar uma atualização em um site DLT pipeline .

Sintaxe

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 } } [...]

Parâmetros

  • REFRESH

    Se especificado, criará o view ou atualizará um view existente e seu conteúdo.

  • PRIVADO

    Cria um view materializado privado. Uma view materializada privada pode ser útil como uma tabela intermediária em uma pipeline que o senhor não deseja que seja publicada no catálogo.

    • Eles não são adicionados ao catálogo e só podem ser acessados dentro do pipeline de definição
    • Eles podem ter o mesmo nome de um objeto existente no catálogo. No site pipeline, se um view materializado privado e um objeto no catálogo tiverem o mesmo nome, as referências ao nome serão resolvidas para o view materializado privado.
    • As visualizações materializadas privadas são mantidas apenas durante o tempo de vida do site pipeline, não apenas em uma única atualização.

As visualizações materializadas privadas foram criadas anteriormente com o parâmetro TEMPORARY.

  • visualização

    O nome do site recém-criado view. O nome view totalmente qualificado deve ser exclusivo.

    A visão materializada privada pode ter o mesmo nome de um objeto publicado no catálogo.

  • lista_coluna

    Opcionalmente, o senhor pode rotular as colunas no resultado da consulta do site view. Se você fornecer uma lista de colunas, o número de aliases de coluna deverá corresponder ao número de expressões na consulta. Se nenhuma lista de colunas for especificada, os aliases serão derivados do corpo do site view.

    • nome_coluna

      Os nomes das colunas devem ser exclusivos e mapeados para as colunas de saída da consulta.

    • tipo_coluna

      Especifica o tipo de dados da coluna. Nem todos os tipos de dados suportados pelo site Databricks são suportados pela visualização materializada.

    • comentário_coluna

      Um literal STRING opcional descrevendo a coluna. Essa opção deve ser especificada junto com column_type. Se o tipo de coluna não for especificado, o comentário da coluna será ignorado.

    • restrição_coluna

      Adiciona uma restrição que valida os dados à medida que eles fluem para a tabela. Veja como gerenciar a qualidade dos dados com pipeline expectativas.

    • Cláusula MASK

info

Visualização

Esse recurso está em Public Preview.

Adiciona uma função de máscara de coluna para anonimizar dados confidenciais. Consulte Filtro sensível à tabela uso de dados filtros de linha e máscaras de coluna.

  • restrição_de_tabela
info

Visualização

Esse recurso está em Public Preview.

Ao especificar um esquema, o senhor pode definir chaves primárias e estrangeiras. As restrições são informativas e não são aplicadas. Consulte a cláusula CONSTRAINT na referência da linguagem SQL.

nota

Para definir restrições de tabela, seu pipeline deve ser um pipeline habilitado para o Unity Catalog.

  • visualização

    Opcionalmente, especifique o particionamento, os comentários e as propriedades definidas pelo usuário para o site materializado view. Cada subcláusula só pode ser especificada uma vez.

    • USANDO DELTA

      Especifica o formato dos dados. A única opção é DELTA.

      Essa cláusula é opcional e o padrão é DELTA.

    • PARTICIONADO POR

      Uma lista opcional de uma ou mais colunas a serem usadas para particionar na tabela. Mutuamente exclusivo com CLUSTER BY.

      O Liquid clustering oferece soluções flexíveis e otimizadas para clustering. Considere a possibilidade de usar CLUSTER BY em vez de PARTITIONED BY para DLT.

    • agrupamento POR

      Habilite o clustering líquido na tabela e defina as colunas a serem usadas como chave clustering. Mutuamente exclusivo com PARTITIONED BY.

      Consulte Usar clustering líquido para tabelas Delta.

    • Localização

      Um local de armazenamento opcional para dados da tabela. Se não estiver definido, o sistema adotará como padrão o local de armazenamento do pipeline.

      Essa opção só está disponível ao publicar em HMS. No uc, o local é gerenciado automaticamente.

    • comentário

      Uma descrição opcional para a tabela.

    • PROPRIEDADES DA TABELA

      Uma lista opcional de propriedades da tabela.

    • COM FILTRO DE LINHA

info

Visualização

Esse recurso está em Public Preview.

Adiciona uma função de filtro de linha à tabela. As consultas futuras dessa tabela recebem um subconjunto das linhas para as quais a função é avaliada como TRUE. Isso é útil para um controle de acesso refinado, pois permite que a função inspecione a identidade e as associações de grupo do usuário que está invocando para decidir se deseja filtrar determinadas linhas.

Veja a cláusulaROW FILTER.

  • query

    Uma consulta DLT que define o dataset para a tabela.

Permissões necessárias

O usuário executor de um pipeline deve ter as seguintes permissões:

  • SELECT privilégio sobre as tabelas de base referenciadas pelo site materializado view.
  • USE CATALOG privilégio no catálogo principal e o privilégio USE SCHEMA no esquema principal.
  • CREATE MATERIALIZED VIEW privilégio no esquema do site materializado view.

Para que um usuário possa atualizar o pipeline no qual o view materializado está definido, ele precisa:

  • USE CATALOG privilégio no catálogo principal e o privilégio USE SCHEMA no esquema principal.
  • Propriedade do privilégio materializado view ou REFRESH no privilégio materializado view.
  • O proprietário do view materializado deve ter o privilégio SELECT sobre as tabelas de base referenciadas pelo view materializado.

Para que um usuário possa consultar o materializado resultante view, ele precisa:

  • USE CATALOG privilégio no catálogo principal e o privilégio USE SCHEMA no esquema principal.
  • SELECT privilégio sobre o site materializado view.

Limitações

  • Quando um view materializado com um agregado sum sobre uma coluna NULL-able tem o último valor não NULL removido dessa coluna - e, portanto, somente os valores NULL permanecem nessa coluna - o valor agregado resultante do viewmaterializado retorna zero em vez de NULL.

  • A referência de coluna não exige um alias. Expressões de referência que não são de coluna exigem um alias, como no exemplo a seguir:

    • Permitido: SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
    • Não permitido: SELECT col1, SUM(col2) FROM t GROUP BY col1
  • NOT NULL deve ser especificado manualmente junto com PRIMARY KEY para ser uma declaração válida.

  • A visualização materializada não oferece suporte a colunas de identidade ou chave substituta.

  • A visualização materializada não é compatível com OPTIMIZE e VACUUM comando. A manutenção acontece automaticamente.

  • Não há suporte para renomear a tabela ou alterar o proprietário.

  • Não há suporte para colunas geradas, colunas de identidade e colunas default.

Exemplos

SQL
-- 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