Casos de uso de visões materializadas
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer
Casos de uso comuns
A seguir estão os cenários comuns que podem ser abordados usando uma exibição materializada:
Atualizar dados: Atualizar dados retornando o último registro por entidade usando
arg_max()
(função de agregação). Por exemplo, crie uma vista que apenas materialize os registos ingeridos a partir de agora:.create materialized-view ArgMax on table T { T | summarize arg_max(Timestamp, *) by User }
Reduzir a resolução de dados Reduzir a resolução de dados calculando estatísticas periódicas sobre os dados brutos. Use várias funções de agregação por período de tempo. Por exemplo, mantenha um instantâneo de data up-tode usuários distintos por dia:
.create materialized-view UsersByDay on table T { T | summarize dcount(User) by bin(Timestamp, 1d) }
Eliminar duplicação de registos: Eliminar a duplicação de registos numa tabela utilizando
take_any()
(função de agregação). Por exemplo, crie uma exibição materializada que desduplice a tabela de origem com base na colunaEventId
, usando uma retrospetiva de 6 horas. Os registros são desduplicados em relação apenas aos registros ingeridos 6 horas antes dos registros atuais..create materialized-view with(lookback=6h) DeduplicatedTable on table T { T | summarize take_any(*) by EventId }
Observação
Você pode ocultar a tabela de origem criando uma função com o mesmo nome da tabela que faz referência à exibição materializada. Esse padrão garante que os chamadores que consultam a tabela acessem a exibição materializada desduplicada porque funções substituem tabelas com o mesmo nome. Para evitar referências cíclicas na definição de exibição, use a função table()
para fazer referência à tabela de origem: .create materialized-view DeduplicatedTable on table T { table('T') | summarize take_any(*) by EventId }
Para obter mais exemplos, consulte o comando .create materialized-view.
Cenário avançado
Você pode usar uma exibição materializada para criar/atualizar/excluir processamento de eventos. Para registros com informações incompletas ou desatualizadas em cada coluna, uma exibição materializada pode fornecer as atualizações mais recentes para cada coluna, excluindo entidades que foram excluídas.
Considere a seguinte tabela de entrada chamada Events
:
de entrada
Carimbo de data/hora | Cud | Identificação | col1 | col2 | col3 |
---|---|---|---|---|---|
2023-10-24 00:00:00.0000000 | C | 1 | 1 | 2 | |
2023-10-24 01:00:00.0000000 | U | 1 | 22 | 33 | |
2023-10-24 02:00:00.0000000 | U | 1 | 23 | ||
2023-10-24 00:00:00.0000000 | C | 2 | 1 | 2 | |
2023-10-24 00:10:00.0000000 | U | 2 | 4 | ||
2023-10-24 02:00:00.0000000 | D | 2 |
Crie uma vista materializada para obter a atualização mais recente por coluna, utilizando a função de agregação arg_max():
.create materialized-view ItemHistory on table Events
{
Events
| extend Timestamp_col1 = iff(isnull(col1), datetime(1970-01-01), Timestamp),
Timestamp_col2 = iff(isnull(col2), datetime(1970-01-01), Timestamp),
Timestamp_col3 = iff(isnull(col3), datetime(1970-01-01), Timestamp)
| summarize arg_max(Timestamp_col1, col1), arg_max(Timestamp_col2, col2), arg_max(Timestamp_col3, col3), arg_max(Timestamp, cud) by id
}
Output
Identificação | Timestamp_col1 | col1 | Timestamp_col2 | col2 | Timestamp_col3 | col3 | Carimbo de data/hora | Cud |
---|---|---|---|---|---|---|---|---|
2 | 2023-10-24 00:00:00.0000000 | 1 | 2023-10-24 00:10:00.0000000 | 4 | 1970-01-01 00:00:00.0000000 | 2023-10-24 02:00:00.0000000 | D | |
1 | 2023-10-24 00:00:00.0000000 | 1 | 2023-10-24 02:00:00.0000000 | 23 | 2023-10-24 01:00:00.0000000 | 33 | 2023-10-24 02:00:00.0000000 | U |
Você pode criar uma função armazenada para limpar ainda mais os resultados:
ItemHistory
| project Timestamp, cud, id, col1, col2, col3
| where cud != "D"
| project-away cud
Saída Final
A atualização mais recente para cada coluna para ID 1
, uma vez que o ID 2
foi excluído.
Carimbo de data/hora | Identificação | col1 | col2 | col3 |
---|---|---|---|---|
2023-10-24 02:00:00.0000000 | 1 | 1 | 23 | 33 |
Visualizações materializadas versus políticas de atualização
Visualizações materializadas e políticas de atualização funcionam de forma diferente e atendem a casos de uso diferentes. Use as seguintes diretrizes para identificar qual delas você deve usar:
As visualizações materializadas são adequadas para agregações , enquanto as políticas de atualização não são. As políticas de atualização são executadas separadamente para cada lote de ingestão e, portanto, só podem executar agregações dentro do mesmo lote de ingestão. Se você precisar de uma consulta de agregação, sempre use exibições materializadas.
As políticas de atualização são úteis para transformações de dados, enriquecimento com tabelas de dimensão (geralmente usando operador de pesquisa) e outras manipulações de dados que podem ser executadas no escopo de uma única ingestão.
As políticas de atualização são executadas durante o tempo de ingestão. Os dados não estão disponíveis para consultas na tabela de origem ou na tabela de destino até que todas as políticas de atualização sejam executadas. Visões materializadas, por outro lado, não fazem parte do pipeline de ingestão. O processo de materialização corre periodicamente em segundo plano, após a ingestão. Os registros na tabela de origem estão disponíveis para consultas antes de serem materializados.
Tanto as políticas de atualização quanto as exibições materializadas podem incorporar junções, mas sua eficácia é limitada a cenários específicos. Especificamente, as junções são adequadas apenas quando os dados necessários para a junção de ambos os lados estão acessíveis no momento da política de atualização ou do processo de materialização. Se entidades correspondentes forem ingeridas quando a política de atualização ou materialização for executada, há o risco de ignorar os dados. Veja mais sobre
dimension tables
em de parâmetros de consulta de exibição materializada e em tabelas de fatos e dimensões.
Observação
Se você precisar materializar junções que não são adequadas para políticas de atualização e exibições materializadas, você mesmo pode gerenciar esse processo. Para criar e armazenar os resultados de operações de junção, use ferramentas de orquestração e ingerir a partir de comandos de consulta.