Pular para o conteúdo principal

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.

    • nome_da_coluna

      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 STRING opcional que descreve a coluna. Esta 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_de_coluna

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

    • Cláusula MASK

info

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
info

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.

nota

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 BY em vez de PARTITIONED BY para 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 AUTO e Databricks escolhe de forma inteligente a chave clustering para otimizar o desempenho da consulta. Mutuamente exclusivo com PARTITIONED 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

info

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:

  • SELECT privilégio sobre as tabelas base referenciadas pela view materializada.
  • USE CATALOG privilégio no catálogo pai e o privilégio USE SCHEMA no esquema pai.
  • CREATE MATERIALIZED VIEW privilé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 CATALOG privilégio no catálogo pai e o privilégio USE SCHEMA no esquema pai.
  • Propriedade da view materializada ou privilégio REFRESH na view materializada.
  • O proprietário da view materializada deve ter o privilégio SELECT sobre as tabelas base referenciadas pela view materializada.

Para que um usuário possa consultar a view materializada resultante, ele precisa:

  • USE CATALOG privilégio no catálogo pai e o privilégio USE SCHEMA no esquema pai.
  • SELECT privilégio sobre a view materializada.

Limitações

  • Quando uma view materializada com um agregado sum sobre uma coluna NULL-able tem o último valor não NULL removido daquela coluna - e, portanto, somente valores NULL permanecem naquela coluna - o valor agregado resultante da view materializada retorna zero em vez de NULL.

  • 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
  • NOT NULL deve ser especificado manualmente junto com PRIMARY KEY para 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 OPTIMIZE e VACUUM . 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

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