Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Uma exibição materializada é uma exibição em que os resultados pré-compilados estão disponíveis para consulta e podem ser atualizados para refletir as alterações na entrada. visões materializadas são sustentadas por um pipeline. Sempre que uma exibição materializada é atualizada, os resultados da consulta são recalculados para refletir alterações em conjuntos de dados upstream. Você pode atualizar exibições materializadas manualmente ou em um agendamento.
Para saber mais sobre como executar ou agendar atualizações, consulte Executar uma atualização de 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 modo de exibição ou atualizará um modo de exibição existente e seu conteúdo.
PRIVADO
Cria uma exibição materializada privada. Uma exibição materializada privada pode ser útil como uma tabela intermediária em um pipeline que você não quer 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. No pipeline, se uma exibição materializada privada e um objeto no catálogo tiverem o mesmo nome, as referências ao nome serão resolvidas para a exibição materializada privada.
- As exibições materializadas privadas são mantidas apenas durante o tempo de vida do pipeline, não apenas uma única atualização.
Exibições materializadas privadas foram criadas anteriormente com o
TEMPORARYparâmetro.view_name
O nome da exibição recém-criada. O nome de exibição totalmente qualificado deve ser exclusivo.
Visões materializadas privadas podem ter o mesmo nome de um objeto publicado no catálogo.
column_list
Opcionalmente, rotula as colunas no resultado da consulta da exibição. Se você fornecer uma lista de colunas, o número de aliases de coluna deverá corresponder ao de expressões na consulta. Se nenhuma lista de colunas for especificada, os aliases serão derivados do corpo da exibição.
-
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 com suporte do Azure Databricks são compatíveis com exibições materializadas.
column_comment
Um literal opcional
STRINGque descreve a coluna. Essa opção deve ser especificada junto com ocolumn_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. Confira Gerenciar a qualidade dos dados com as expectativas do pipeline.
-
Importante
Esse recurso está em Visualização Pública.
Adiciona uma função para mascarar colunas e anonimizar dados sensíveis. Veja Filtros de linha e máscaras de coluna.
-
restrição_de_tabela
Importante
Esse recurso está em Visualização Pública.
Ao especificar um esquema, você pode definir as chaves primárias e estrangeiras. As restrições são informativas e não são impostas. Consulte a cláusula CONSTRAINT na referência da linguagem SQL.
Observação
Para definir restrições de tabela, seu pipeline deve ser um pipeline habilitado para o Unity Catalog.
view_clauses
Opcionalmente, especifique o particionamento, os comentários e as propriedades definidas pelo usuário para a exibição materializada. 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 particionamento na tabela. Mutuamente exclusivo com
CLUSTER BY.O agrupamento líquido oferece uma solução flexível e otimizada para agrupamento. Considere usar
CLUSTER BYem vez dePARTITIONED BYpara pipelines.CLUSTER BY
Habilite o agrupamento líquido na tabela e defina as colunas a serem usadas como chaves de agrupamento. Use o agrupamento automático de líquidos com
CLUSTER BY AUTO, e o Databricks escolhe de forma inteligente as chaves de agrupamento 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 os dados da tabela. Se ele não estiver definido, o sistema usará como padrão o local de armazenamento do pipeline.
Essa opção só está disponível ao publicar no metastore do Hive. No Catálogo do Unity, o local é gerenciado automaticamente.
COMENTÁRIO
Uma descrição opcional para a tabela.
TBLPROPERTIES
Uma lista opcional de propriedades da tabela para a tabela.
COM ROW FILTER
Importante
Esse 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 TRUE. Isso pode ser útil para fins de controle de acesso refinado, em que a função pode inspecionar a identidade e/ou as associações de grupo do usuário que a invocou para decidir se deseja filtrar algumas linhas.
Consulte a cláusula
ROW FILTER.query
Uma consulta que define o conjunto de dados da tabela.
Permissões necessárias
O usuário run-as de um pipeline deve ter as seguintes permissões:
- Privilégio
SELECTnas tabelas base referenciadas pela exibição materializada. -
USE CATALOGprivilégio no catálogo pai e o privilégioUSE SCHEMAno esquema pai. - Privilégio
CREATE MATERIALIZED VIEWno esquema para a exibição materializada.
Para que um usuário possa atualizar o pipeline no qual a exibição materializada está definida, é necessário:
-
USE CATALOGprivilégio no catálogo pai e o privilégioUSE SCHEMAno esquema pai. - Propriedade da exibição materializada ou o privilégio
REFRESHna exibição materializada. - O proprietário da exibição materializada deve ter o
SELECTprivilégio sobre as tabelas base referenciadas pela exibição materializada.
Para que um usuário possa consultar a exibição materializada resultante, eles exigem:
-
USE CATALOGprivilégio no catálogo pai e o privilégioUSE SCHEMAno esquema pai. - Privilégio
SELECTsobre a exibição materializada.
Limitações
- Quando uma visão materializada com uma agregação
sumsobre uma coluna que pode ser NULL tem o último valor não NULL removido dessa coluna e, assim, permanecem apenas valoresNULLnessa coluna, o valor de agregação resultante da visão materializada retorna zero em vez deNULL. - A referência de coluna não requer um alias. Expressões de referência não 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
- Permitido:
-
NOT NULLprecisa ser especificado manualmente junto com aPRIMARY KEYpara que seja uma instrução válida. - As exibições materializadas não dão suporte a colunas de identidade ou chaves substitutas.
- As exibições materializadas não são compatíveis com os comandos
OPTIMIZEeVACUUM. A manutenção ocorre 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 padrão.
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