Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Captura o valor de uma expressão tabular para a duração da execução da consulta para que ela possa ser referenciada várias vezes pela consulta sem recálculo.
Sintaxe
materialize(
expressão)
Saiba mais sobre convenções de sintaxe.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| expressão | string |
✔️ | A expressão tabular a ser avaliada e armazenada em cache durante a execução da consulta. |
Observações
A materialize() função é útil nos seguintes cenários:
- Para acelerar consultas que executam cálculos pesados cujos resultados são usados várias vezes na consulta.
- Para avaliar uma expressão tabular apenas uma vez e usá-la muitas vezes em uma consulta. Isso geralmente é necessário se a expressão tabular for não determinística. Por exemplo, se a expressão usa as funções ou as
rand()dcount()funções.
Observação
O Materialize tem um limite de tamanho de cache de 5 GB. Esse limite é por nó de cluster e é mútuo para todas as consultas executadas simultaneamente. Se uma consulta for usada materialize() e o cache não puder conter mais dados, a consulta será abortada com um erro.
Sugestão
- Outra maneira de realizar a materialização da expressão tabular é usando a
hint.materializedbandeira do operador as e do operador de partição. Todos partilham uma única cache de materialização. - Empurre todos os operadores possíveis que reduzem o conjunto de dados materializado e mantêm a semântica da consulta. Por exemplo, use filtros comuns em cima da mesma expressão materializada.
- Use materialize com join ou union quando seus operandos tiverem subconsultas mútuas que podem ser executadas uma vez. Por exemplo, pernas de garfo de junção/união. Veja o exemplo de uso do operador de junção.
- Materialize só pode ser usado em instruções let se você der um nome ao resultado armazenado em cache. Veja o exemplo de uso de instruções let).
Atenção
Compare suas consultas com e sem materialize() para ver se melhora o desempenho de seus dados e padrões de consulta. Em alguns casos, materialize() pode aumentar o uso de memória sem fornecer ganhos significativos de desempenho, portanto, o teste ajuda você a escolher a melhor abordagem.
Exemplos de melhoria do desempenho da consulta
O exemplo a seguir mostra como materialize() pode ser usado para melhorar o desempenho da consulta.
A expressão _detailed_data é definida usando materialize() a função e, portanto, é calculada apenas uma vez.
let _detailed_data = materialize(StormEvents | summarize Events=count() by State, EventType);
_detailed_data
| summarize TotalStateEvents=sum(Events) by State
| join (_detailed_data) on State
| extend EventPercentage = Events*100.0 / TotalStateEvents
| project State, EventType, EventPercentage, Events
| top 10 by EventPercentage
Realização
| Estado | Tipo de Evento | EventPercentage | Eventos |
|---|---|---|---|
| ÁGUAS DO HAVAÍ | Tromba d'água | 100 | 2 |
| LAGO ONTÁRIO | Vento de Trovoada Marinha | 100 | 8 |
| GOLFO DO ALASCA | Tromba d'água | 100 | 4 |
| ATLÂNTICO NORTE | Vento de Trovoada Marinha | 95.2127659574468 | 179 |
| LAGO ERIE | Vento de Trovoada Marinha | 92.5925925925926 | 25 |
| E PACÍFICO | Tromba d'água | 90 | 9 |
| LAGO MICHIGAN | Vento de Trovoada Marinha | 85.1648351648352 | 155 |
| LAGO HURON | Vento de Trovoada Marinha | 79.3650793650794 | 50 |
| GOLFO DO MÉXICO | Vento de Trovoada Marinha | 71.7504332755633 | 414 |
| HAVAI | Surf Alto | 70.0218818380744 | 320 |
O exemplo a seguir gera um conjunto de números aleatórios e calcula:
- Quantos valores distintos no conjunto (
Dcount) - Os três principais valores do conjunto
- A soma de todos esses valores no conjunto
Esta operação pode ser feita utilizando lotes e materializar:
let randomSet =
materialize(
range x from 1 to 3000000 step 1
| project value = rand(10000000));
randomSet | summarize Dcount=dcount(value);
randomSet | top 3 by value;
randomSet | summarize Sum=sum(value)
Conjunto de resultados 1:
| Dcount |
|---|
| 2578351 |
Conjunto de resultados 2:
| valor |
|---|
| 9999998 |
| 9999998 |
| 9999997 |
Conjunto de resultados 3:
| Soma |
|---|
| 15002960543563 |
Exemplos de utilização de materialize()
Sugestão
Materialize sua coluna no momento da ingestão se a maioria das consultas extrair campos de objetos dinâmicos em milhões de linhas. Nesse cenário, use a visão geral da política de atualização.
Para usar a let instrução com um valor que você usa mais de uma vez, use a função materialize(). Tente empurrar todos os operadores possíveis que reduzirão o conjunto de dados materializado e ainda manter a semântica da consulta. Por exemplo, use filtros ou projete apenas colunas necessárias.
let materializedData = materialize(Table
| where Timestamp > ago(1d));
union (materializedData
| where Text !has "somestring"
| summarize dcount(Resource1)), (materializedData
| where Text !has "somestring"
| summarize dcount(Resource2))
O filtro é Text mútuo e pode ser empurrado para a expressão materializar.
A consulta só precisa das colunas Timestamp, Text, Resource1e Resource2. Projete estas colunas dentro da expressão materializada.
let materializedData = materialize(Table
| where Timestamp > ago(1d)
| where Text !has "somestring"
| project Timestamp, Resource1, Resource2, Text);
union (materializedData
| summarize dcount(Resource1)), (materializedData
| summarize dcount(Resource2))
Se os filtros não forem idênticos, como na consulta a seguir:
let materializedData = materialize(Table
| where Timestamp > ago(1d));
union (materializedData
| where Text has "String1"
| summarize dcount(Resource1)), (materializedData
| where Text has "String2"
| summarize dcount(Resource2))
Quando o filtro combinado reduzir drasticamente o resultado materializado, combine ambos os filtros no resultado materializado por uma expressão lógica or como na consulta a seguir. No entanto, mantenha os filtros em cada perna de união para preservar a semântica da consulta.
let materializedData = materialize(Table
| where Timestamp > ago(1d)
| where Text has "String1" or Text has "String2"
| project Timestamp, Resource1, Resource2, Text);
union (materializedData
| where Text has "String1"
| summarize dcount(Resource1)), (materializedData
| where Text has "String2"
| summarize dcount(Resource2))