CRIAR VISTA MATERIALIZADA
Aplica-se a: Databricks SQL
Uma vista materializada é uma vista onde os resultados pré-calculados estão disponíveis para consulta e podem ser atualizados para refletir as alterações na entrada. Cada vez que uma exibição materializada é atualizada, os resultados da consulta são recalculados para refletir as alterações nos conjuntos de dados upstream. Todas as visualizações materializadas são apoiadas por um pipeline DLT. Você pode atualizar exibições materializadas manualmente ou em uma agenda.
Para saber mais sobre como executar uma atualização manual, consulte REFRESH (MATERIALIZED VIEW ou STREAMING TABLE).
Para saber mais sobre como agendar uma atualização, consulte Exemplos ou ALTER MATERIALIZED VIEW.
Nota
As operações de criação e atualização em exibições materializadas e tabelas de streaming são alimentadas por um pipeline Delta Live Tables sem servidor. Você pode usar o Gerenciador de Catálogos para exibir detalhes sobre os pipelines de backup na interface do usuário. Consulte O que é o Catalog Explorer?.
Sintaxe
{ CREATE OR REPLACE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] }
view_name
[ column_list ]
[ view_clauses ]
[schedule_clause]
AS query
column_list
( { column_name column_type column_properties } [, ...]
[ , table_constraint ] [...])
column_properties
{ NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]
view_clauses
{ PARTITIONED BY (col [, ...]) |
COMMENT view_comment |
TBLPROPERTIES clause |
SCHEDULE [ REFRESH ] schedule_clause |
WITH { ROW FILTER clause } } [...]
schedule_clause
{ EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS } |
CRON cron_string [ AT TIME ZONE timezone_id ] }
Parâmetros
SUBSTITUIR
Se especificado, substitui o modo de exibição e seu conteúdo, se ele já existir.
SE NÃO EXISTIR
Cria o modo de exibição se ele não existir. Se já existir uma vista com este nome, a
CREATE MATERIALIZED VIEW
instrução é ignorada.Você pode especificar no máximo um dos
IF NOT EXISTS
ouOR REPLACE
.-
O nome do modo de exibição recém-criado. O nome do modo de exibição totalmente qualificado deve ser exclusivo.
column_list
Opcionalmente, rotula as colunas no resultado da consulta do modo de exibição. 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 modo de exibição.
-
Os nomes das colunas devem ser exclusivos e mapeados para as colunas de saída da consulta.
column_type
Especifica o tipo de dados da coluna. Nem todos os tipos de dados suportados pelo Azure Databricks são suportados por vistas materializadas.
column_comment
Um literal opcional
STRING
descrevendo o nome da coluna. Esta opção deve ser especificada juntamente comcolumn_type
. Se o tipo de coluna não for especificado, o comentário da coluna será ignorado.column_constraint
Adiciona uma chave primária informativa ou restrição de chave estrangeira informativa à coluna em uma exibição materializada. Se o tipo de coluna não for especificado, a restrição de coluna será ignorada.
-
Importante
Esta funcionalidade está em Pré-visualização Pública.
Adiciona uma função de máscara de coluna para anonimizar dados confidenciais. Todas as consultas subsequentes dessa coluna recebem o resultado da avaliação dessa função sobre a coluna no lugar do valor original da coluna. Isso pode ser útil para fins de controle de acesso refinado, onde a função pode inspecionar a identidade ou as associações de grupo do usuário que invoca para determinar se o valor deve ser redigido. Se o tipo de coluna não for especificado, a máscara de coluna será ignorada.
-
table_constraint
Adiciona uma chave primária informacional ou restrição de chave estrangeira informativa à tabela em uma exibição materializada. Se o tipo de coluna não for especificado, a restrição de tabela será ignorada.
view_clauses
Opcionalmente, especifique particionamento, comentários, propriedades definidas pelo usuário e uma agenda de atualização para a nova exibição materializada. Cada subcláusula só pode ser especificada uma vez.
-
Uma lista opcional de colunas da tabela para particionar a tabela por.
COMENTAR view_comment
Um
STRING
literal para descrever a tabela.-
Opcionalmente, define uma ou mais propriedades definidas pelo usuário.
Use essa configuração para especificar o canal de tempo de execução Delta Live Tables usado para executar essa instrução. Defina o
pipelines.channel
valor da propriedade como"PREVIEW"
ou"CURRENT"
. O valor predefinido é"CURRENT"
. Para obter mais informações sobre os canais Delta Live Tables, consulte Delta Live Tables runtime channels. AGENDAR [ ATUALIZAR ] schedule_clause
EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }
Importante
Esta funcionalidade está em Pré-visualização Pública.
Para agendar uma atualização que ocorre periodicamente, use
EVERY
a sintaxe. SeEVERY
a sintaxe for especificada, a tabela de streaming ou a exibição materializada será atualizada periodicamente no intervalo especificado com base no valor fornecido, comoHOUR
,HOURS
,DAY
,DAYS
WEEK
, ouWEEKS
. A tabela a seguir lista os valores inteiros aceitos paranumber
.Time unit Valor inteiro HOUR or HOURS
<1 = H <= 72 DAY or DAYS
<1 = D <= 31 WEEK or WEEKS
<1 = W <= 8 Nota
As formas singular e plural da unidade de tempo incluída são semanticamente equivalentes.
CRON cron_string [ AT TIME ZONE timezone_id ]
Para agendar uma atualização usando um valor cron de quartzo . São aceites time_zone_values válidos.
AT TIME ZONE LOCAL
não é suportado.Se
AT TIME ZONE
estiver ausente, o fuso horário da sessão será usado. SeAT TIME ZONE
estiver ausente e o fuso horário da sessão não estiver definido, um erro será lançado.SCHEDULE
é semanticamente equivalente aSCHEDULE REFRESH
.
Cláusula COM FILTRO DE LINHA
Importante
Esta funcionalidade está em Pré-visualização Pública.
Adiciona uma função de filtro de linha à tabela. Todas as consultas subsequentes dessa tabela recebem um subconjunto das linhas para as quais a função é avaliada como booleano TRUE. Isso pode ser útil para fins de controle de acesso refinado, onde a função pode inspecionar a identidade ou as associações de grupo do usuário que invoca para determinar se determinadas linhas devem ser filtradas.
-
-
Uma consulta que constrói o modo de exibição a partir de tabelas base ou outros modos de exibição.
Permissões obrigatórias
O usuário que cria uma visualização materializada (MV) é o proprietário da MV e precisa ter as seguintes permissões:
SELECT
privilégio sobre as tabelas base referenciadas pelo MV.USE CATALOG
privilégio no catálogo pai e oUSE SCHEMA
privilégio no esquema pai.CREATE MATERIALIZED VIEW
privilégio no esquema para o MV.
Para que um usuário possa atualizar a MV, eles precisam:
USE CATALOG
privilégio no catálogo pai e oUSE SCHEMA
privilégio no esquema pai.- Propriedade da MV ou
REFRESH
privilégio na MV. - O proprietário do MV deve ter o
SELECT
privilégio sobre as tabelas base referenciadas pelo MV.
Para que um usuário possa consultar a MV, eles precisam:
USE CATALOG
privilégio no catálogo pai e oUSE SCHEMA
privilégio no esquema pai.SELECT
privilégio sobre a visão materializada.
Filtros de linha e máscaras de coluna
Importante
Esta funcionalidade está em Pré-visualização Pública.
Os filtros de linha permitem especificar uma função que se aplica como um filtro sempre que uma verificação de tabela busca linhas. Esses filtros garantem que as consultas subsequentes retornem apenas linhas para as quais o predicado do filtro seja avaliado como true.
As máscaras de coluna permitem mascarar os valores de uma coluna sempre que uma verificação de tabela busca linhas. Todas as consultas futuras envolvendo essa coluna receberão o resultado da avaliação da função sobre a coluna, substituindo o valor original da coluna.
Para obter mais informações sobre como usar filtros de linha e máscaras de coluna, consulte Filtrar dados de tabela confidenciais usando filtros de linha e máscaras de coluna.
Gerenciando filtros de linha e máscaras de coluna
Filtros de linha e máscaras de coluna em exibições materializadas devem ser adicionados por meio da CREATE
instrução.
Comportamento
- Atualizar como Definer: Quando a
REFRESH MATERIALIZED VIEW
instrução atualiza uma exibição materializada, as funções de filtro de linha são executadas com os direitos do definer (como o proprietário da tabela). Isso significa que a atualização da tabela usa o contexto de segurança do usuário que criou a exibição materializada. - Consulta: Embora a maioria dos filtros seja executada com os direitos do definidor, as funções que verificam o contexto do usuário (como
CURRENT_USER
eIS_MEMBER
) são exceções. Essas funções são executadas como o invocador. Essa abordagem impõe segurança de dados específicos do usuário e controles de acesso com base no contexto do usuário atual. - Ao criar exibições materializadas em tabelas de origem que contêm filtros de linha e máscaras de coluna, a atualização da exibição materializada é sempre uma atualização completa. Uma atualização completa reprocessa todos os dados disponíveis na fonte com as definições mais recentes. Isso garante que as políticas de segurança nas tabelas de origem sejam avaliadas e aplicadas com os dados e definições mais atualizados.
Observabilidade
Use DESCRIBE EXTENDED
, INFORMATION_SCHEMA
ou o Gerenciador de Catálogos para examinar os filtros de linha e as máscaras de coluna existentes que se aplicam a um determinado modo de exibição materializado. Essa funcionalidade permite que os usuários auditem e revisem o acesso a dados e as medidas de proteção em visualizações materializadas.
Limitações
- Quando uma exibição materializada com uma
sum
agregação sobre uma coluna NULL-able tem o último valor não-NULL removido dessa coluna - e, portanto, apenasNULL
os valores permanecem nessa coluna - o valor agregado resultante da exibição 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 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 NULL
deve ser especificado manualmente junto comPRIMARY KEY
para ser uma instrução válida.- As visualizações materializadas não suportam colunas de identidade ou chaves substitutas.
- Visões materializadas não suportam
OPTIMIZE
eVACUUM
comandos. A manutenção acontece automaticamente. - As visualizações materializadas não suportam expectativas para definir restrições de qualidade de dados.
Exemplos
-- Create a materialized view if it doesn't exist
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;
-- Create and schedule a materialized view to be refreshed daily at midnight.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
COMMENT 'Daily sales numbers'
SCHEDULE CRON '0 0 0 * * ? *'
AS SELECT date AS date, sum(sales) AS sumOfSales
FROM table1
GROUP BY date;
-- Sets the runtime channel to "PREVIEW"
> CREATE MATERIALIZED VIEW mv_preview
TBLPROPERTIES(pipelines.channel = "PREVIEW")
AS SELECT * FROM RANGE(10)
-- Create a materialized view with a table constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
member_id int NOT NULL,
full_name string,
movie_title string,
CONSTRAINT movie_pk PRIMARY KEY(member_id)
)
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;
-- Create or replace the materialized view to remove the table constraint and add a partition
> CREATE OR REPLACE MATERIALIZED VIEW subscribed_movies
PARTITIONED BY (member_id)
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;
-- Create a materialized view with a row filter and a column mask
> CREATE MATERIALIZED VIEW masked_view (
id int,
name string,
region string,
ssn string MASK catalog.schema.ssn_mask_fn
)
WITH ROW FILTER catalog.schema.us_filter_fn ON (region)
AS SELECT id, name, region, ssn
FROM employees;