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.
Aplica-se a:
Databricks SQL
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. Sempre que uma exibição materializada é atualizada, os resultados da consulta são recalculados para refletir alterações em conjuntos de dados upstream. Todas as visões materializadas são apoiadas por um pipeline ETL. Você pode atualizar as exibições materializadas manualmente ou como parte de uma programação.
Para saber mais sobre como executar uma atualização manual, confira REFRESH (MATERIALIZED VIEW ou STREAMING TABLE).
Para saber mais sobre como agendar uma atualização, confira Exemplos ou ALTER MATERIALIZED VIEW.
Exibições materializadas só podem ser criadas usando um SQL Warehouse Pro ou sem servidor ou dentro de um pipeline.
Observação
As operações de criação e atualização em visões materializadas e tabelas de streaming são impulsionadas por pipelines declarativos do Lakeflow Spark sem servidor. Você pode usar o Gerenciador de Catálogos para exibir detalhes sobre os pipelines de backup na interface do usuário. Confira O que é o Explorador de Catálogos?.
Sintaxe
{ CREATE OR REPLACE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] }
view_name
[ column_list ]
[ view_clauses ]
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 [, ...]) |
CLUSTER BY clause |
COMMENT view_comment |
DEFAULT COLLATION UTF8_BINARY |
TBLPROPERTIES clause |
SCHEDULE [ REFRESH ] schedule_clause |
schedule |
WITH { ROW FILTER clause } } [...]
schedule
{ SCHEDULE [ REFRESH ] schedule_clause |
TRIGGER ON UPDATE [ AT MOST EVERY trigger_interval ] }
schedule_clause
{ EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS } |
CRON cron_string [ AT TIME ZONE timezone_id ] }
Parâmetros
MUDAR
Se for especificado, substitui a exibição e seu conteúdo, caso já exista.
SE NÃO EXISTIR
Cria a exibição se ela não existir. Se já houver uma exibição com esse nome, a instrução
CREATE MATERIALIZED VIEWserá ignorada.Você pode especificar no máximo uma opção:
IF NOT EXISTSouOR REPLACE.-
O nome da exibição recém-criada. O nome de exibição totalmente qualificado deve ser exclusivo.
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.column_constraint
Adiciona uma chave primária informativa ou uma restrição de chave estrangeira informativa à coluna em uma exibição materializada. Se o tipo de coluna não for especificado, a restrição da coluna será ignorada.
-
Adiciona uma função de máscara de coluna para anonimizar dados confidenciais. Todas as consultas provenientes 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 detalhado, em que a função pode inspecionar a identidade ou as associações de grupo do usuário que a invoca para determinar se o valor deve ser redigido. Se o tipo de coluna não for especificado, a máscara da coluna será ignorada.
-
restrição_de_tabela
Adiciona uma chave primária informativa ou uma restrição de chave estrangeira informativa à tabela em uma exibição materializada. Se o tipo de coluna não for especificado, a restrição da tabela será ignorada.
view_clauses
Opcionalmente, especifique particionamento, comentários, propriedades definidas pelo usuário e um agendamento 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.
Observação
O agrupamento líquido oferece uma solução flexível e otimizada para agrupamento. Considere usar
CLUSTER BYem vez dePARTITIONED BYpara exibições materializadas. -
Uma cláusula opcional para agrupamento por um subconjunto de colunas. 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. Consulte Usar clustering líquido para tabelas.O clustering líquido não pode ser combinado com
PARTITIONED BY. COMENTÁRIO view_comment
Um
STRINGliteral para descrever a tabela.COLAÇÃO PADRÃO UTF8_BINARY
Aplica-se a:
Databricks SQL
Databricks Runtime 17.1 and aboveForça a ordenação padrão da exibição materializada a
UTF8_BINARY. Essa cláusula será obrigatória se o esquema no qual a exibição é criada tiver uma ordenação padrão diferente deUTF8_BINARY. A ordenação padrão da exibição materializada é usada como a ordenação padrão dentro do corpo da exibição.-
Opcionalmente, define uma ou mais propriedades definidas pelo usuário.
Use essa configuração para especificar o canal de runtime do Lakeflow Spark Declarative Pipelines usado para executar essa instrução. Defina o valor da propriedade
pipelines.channelcomo"PREVIEW"ou"CURRENT". O valor padrão é"CURRENT". Para obter mais informações sobre os canais do Lakeflow Spark Declarative Pipelines, consulte os canais de runtime do Lakeflow Spark Declarative Pipelines. horário
A agenda pode ser uma
SCHEDULEinstrução ou umaTRIGGERinstrução.SCHEDULE [ REFRESH ] schedule_clause
EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }Para agendar uma atualização que ocorra periodicamente, use a sintaxe
EVERY. Se a sintaxeEVERYfor especificada, a tabela de streaming ou o modo de exibição materializada serão atualizados periodicamente no intervalo especificado com base no valor fornecido, comoHOUR,HOURS,DAY,DAYS,WEEKouWEEKS. A tabela a seguir lista os valores inteiros aceitos paranumber.Unidade de tempo Valor inteiro HOUR or HOURS<1 = H <= 72 DAY or DAYS<1 = D <= 31 WEEK or WEEKS<1 = W <= 8 Observação
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 do Quartz. Valores time_zone_values válidos são aceitos.
AT TIME ZONE LOCALnão é suportado.Se
AT TIME ZONEestiver ausente, o fuso horário da sessão será usado. SeAT TIME ZONEestiver ausente e o fuso horário da sessão não estiver definido, um erro será lançado.SCHEDULEé semanticamente equivalente aSCHEDULE REFRESH.
GATILHO ATIVADO UPDATE [ NO MÁXIMO A CADA TRIGGER_INTERVAL ]
Importante
O
TRIGGER ON UPDATErecurso está em Beta.Opcionalmente, defina a tabela para atualizar quando uma fonte de dados upstream for atualizada, no máximo uma vez a cada minuto. Defina um valor para
AT MOST EVERYexigir pelo menos um tempo mínimo entre as atualizações.As fontes de dados upstream devem ser tabelas Delta externas ou gerenciadas (incluindo exibições materializadas ou tabelas de streaming) ou exibições gerenciadas cujas dependências são limitadas a tipos de tabela compatíveis. Não há suporte para tabelas compartilhadas de Delta Sharing como fontes upstream.
Habilitar eventos de arquivo pode tornar os gatilhos com mais desempenho e aumenta alguns dos limites de atualizações de gatilho.
A
trigger_intervalinstrução INTERVAL é de pelo menos 1 minuto.TRIGGER ON UPDATEtem as seguintes limitações- Não mais do que 10 fontes de dados upstream por exibição materializada ao usar TRIGGER ON UPDATE.
- No máximo 1000 tabelas de streaming ou exibições materializadas podem ser especificadas com TRIGGER ON UPDATE.
- A
AT MOST EVERYcláusula tem o padrão de 1 minuto e não pode ter menos de 1 minuto.
Cláusula WITH ROW FILTER
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 TRUE booliano. Isso pode ser útil para fins de controle de acesso refinado em que a função pode inspecionar as associações de identidade ou grupo do usuário que a está invocando para determinar se deve filtrar determinadas linhas.
-
ConsultaAS
Uma consulta que constrói a exibição com base em tabelas base ou em outras exibições.
Permissões necessárias
O usuário que cria uma exibição materializada (MV) é o proprietário do MV e precisa ter as seguintes permissões:
- Privilégio
SELECTsobre as tabelas base referenciadas pelo MV. -
USE CATALOGprivilégio no catálogo pai e o privilégioUSE SCHEMAno esquema pai. - Privilégio
CREATE MATERIALIZED VIEWno esquema para o MV.
Para que um usuário possa atualizar o MV, é preciso:
-
USE CATALOGprivilégio no catálogo pai e o privilégioUSE SCHEMAno esquema pai. - Propriedade do MV ou privilégio
REFRESHno MV. - O proprietário do MV deve ter o privilégio
SELECTsobre as tabelas base referenciadas pelo MV.
Para que um usuário possa consultar o MV, ele requer:
-
USE CATALOGprivilégio no catálogo pai e o privilégioUSE SCHEMAno esquema pai. - Privilégio
SELECTsobre a exibição materializada.
Filtros de linha e máscaras de coluna
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 de filtro é 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 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 instrução CREATE.
Comportamento
-
Atualizar como Definidor: quando a
REFRESH MATERIALIZED VIEWinstrução atualiza uma exibição materializada, as funções de filtro de linha são executadas com os direitos do definidor (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_USEReIS_MEMBER) são exceções. Essas funções são executadas como o invocador. Essa abordagem impõe controles de acesso e segurança de dados específicos do usuário com base no contexto do usuário atual. - Ao criar exibições materializadas sobre 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 origem 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_SCHEMAou o Catalog Explorer para examinar os filtros de linha e máscaras de coluna existentes que se aplicam a uma determinada exibição materializada. Essa funcionalidade permite que os usuários auditem e examinem as medidas de acesso e proteção de dados em exibições materializadas.
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. - Exibições materializadas não dão suporte a 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 whenever the
-- upstream data is updated
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies
TRIGGER ON UPDATE
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 every day.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
COMMENT 'Daily sales numbers'
SCHEDULE EVERY 1 DAY
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;