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
STRING
opcional 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 BY
em vez dePARTITIONED 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 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:
SELECT
privilégio sobre as tabelas base referenciadas pela view materializada.USE CATALOG
privilégio no catálogo pai e o privilégioUSE 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égioUSE 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égioUSE 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 valoresNULL
permanecem 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 NULL
deve ser especificado manualmente junto comPRIMARY 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
eVACUUM
. 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