CREATE MATERIALIZED VIEW (pipeline declarativo LakeFlow )
Uma viewmaterializada é uma view em que resultados pré-calculados estão disponíveis para consulta e podem ser atualizados para refletir alterações na entrada. visualizações materializadas são apoiadas pelo pipeline declarativo LakeFlow . Cada vez que uma view materializada é atualizada, os resultados da consulta são recalculados para refletir as alterações no conjunto de dados upstream. Você 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 no pipeline declarativo LakeFlow.
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á a view ou atualizará uma view existente e seu conteúdo. 
- 
PRIVADO Cria uma view materializada privada. Uma view materializada privada pode ser útil como uma tabela intermediária dentro de um pipeline que você não deseja publicar no catálogo. - Eles não são adicionados ao catálogo e só são acessíveis dentro do pipeline de definição
- Eles podem ter o mesmo nome de um objeto existente no catálogo. Dentro do pipeline, se uma view materializada privada e um objeto no catálogo tiverem o mesmo nome, as referências ao nome serão resolvidas para a view materializada privada.
- As visualizações materializadas privadas são persistidas somente durante toda a vida útil do pipeline, não apenas durante uma única atualização.
 As visualizações materializadas privadas foram criadas anteriormente com o parâmetro TEMPORARY.
- 
nome_da_visualização O nome da view recém-criada. O nome view totalmente qualificado deve ser exclusivo. A visualização materializada privada pode ter o mesmo nome de um objeto publicado no catálogo. 
- 
lista_de_colunas Opcionalmente, rotule as colunas no resultado da consulta da 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 da view. - 
Os nomes das colunas devem ser exclusivos e mapeados para as colunas de saída da consulta. 
- 
tipo_de_coluna Especifica o tipo de dados da coluna. Nem todos os tipos de dados suportados pelo Databricks são suportados pela visualização materializada. 
- 
comentário_de_coluna Um literal STRINGopcional que descreve a coluna. Esta opção deve ser especificada junto comcolumn_type. Se o tipo de coluna não for especificado, o comentário da coluna será ignorado.
- 
Adiciona uma restrição que valida os dados conforme eles fluem para a tabela. Veja gerenciar a qualidade dos dados com expectativas pipeline. 
 
- 
Visualização
Este recurso está em Visualização Pública.
Adiciona uma função de máscara de coluna para tornar dados confidenciais anônimos. Veja Filtros de linha e máscaras de coluna.
- restrição_de_tabela
Visualização
Este recurso está em Visualização Pública.
Ao especificar um esquema, você pode definir uma chave primária e uma chave estrangeira. As restrições são informativas e não são impostas. Veja a cláusula CONSTRAINT na referência da linguagem SQL.
Para definir restrições de tabela, seu pipeline deve ser um pipeline habilitado para o Unity Catalog.
- 
cláusulas de exibição Opcionalmente, especifique particionamento, comentários e propriedades definidas pelo usuário para a view materializada. Cada subcláusula só pode ser especificada uma vez. - 
USANDO DELTA Especifica o formato dos dados. A única opção é DELTA. Esta cláusula é opcional e o padrão é DELTA. 
- 
PARTICIONADO POR Uma lista opcional de uma ou mais colunas a serem usadas para particionamento na tabela. Mutuamente exclusivo com CLUSTER BY.clustering líquido fornece soluções flexíveis e otimizadas para clustering. Considere usar CLUSTER BYem vez dePARTITIONED BYpara o pipeline declarativo LakeFlow .
- 
cluster POR Habilite clustering líquido na tabela e defina as colunas a serem usadas como chave clustering . Use clustering líquido automático com CLUSTER BY AUTOe Databricks escolhe de forma inteligente a chave clustering para otimizar o desempenho da consulta. Mutuamente exclusivo comPARTITIONED BY.Consulte Usar clustering líquido para tabelas. 
- 
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. Esta opção só está disponível ao publicar no Hive metastore. No Unity Catalog, a localização é gerenciada automaticamente. 
- 
comentário Uma descrição opcional para a tabela. 
- 
PROPRIEDADES TBL Uma lista opcional de propriedades de tabela para a tabela. 
- 
COM FILTRO DE LINHA 
 
- 
Visualização
Este recurso está em Visualização Pública.
Adiciona uma função de filtro de linha à tabela. Consultas futuras para essa tabela recebem um subconjunto das linhas para as quais a função é avaliada como VERDADEIRO. Isso é útil para controle de acesso refinado, porque permite que a função inspecione a identidade e as associações de grupo do usuário que faz a chamada para decidir se deve filtrar determinadas linhas.
Veja a cláusulaROW FILTER.
- 
query Uma consulta de pipeline declarativa LakeFlow que define o dataset para a tabela. 
Permissões necessárias
O usuário execução-as para um pipeline deve ter as seguintes permissões:
- SELECTprivilégio sobre as tabelas base referenciadas pela view materializada.
- USE CATALOGprivilégio no catálogo pai e o privilégio- USE SCHEMAno esquema pai.
- CREATE MATERIALIZED VIEWprivilégio no esquema para a view materializada.
Para que um usuário possa atualizar o pipeline no qual a view materializada está definida, ele precisa:
- USE CATALOGprivilégio no catálogo pai e o privilégio- USE SCHEMAno esquema pai.
- Propriedade da view materializada ou privilégio REFRESHna view materializada.
- O proprietário da view materializada deve ter o privilégio SELECTsobre as tabelas base referenciadas pela view materializada.
Para que um usuário possa consultar a view materializada resultante, ele precisa:
- USE CATALOGprivilégio no catálogo pai e o privilégio- USE SCHEMAno esquema pai.
- SELECTprivilégio sobre a view materializada.
Limitações
- 
Quando uma view materializada com um agregado sumsobre uma coluna NULL-able tem o último valor não NULL removido daquela coluna - e, portanto, somente valoresNULLpermanecem naquela coluna - o valor agregado resultante da view materializada retorna zero em vez deNULL.
- 
A referência de coluna não requer um alias. Expressões de referência que não sejam de coluna requerem 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
 
- Permitido: 
- 
NOT NULLdeve ser especificado manualmente junto comPRIMARY KEYpara ser uma declaração válida.
- 
A visualização materializada não suporta colunas de identidade ou chaves substitutas. 
- 
A visualização materializada não suporta os comandos OPTIMIZEeVACUUM. A manutenção acontece automaticamente.
- 
Não há suporte para renomear a tabela ou alterar o proprietário. 
- 
Colunas geradas, colunas de identidade e colunas default não são suportadas. 
Exemplos
-- 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