As materialized views pré-computam subinstruções SQL de forma incremental e persistem os resultados. Durante a consulta, o sistema reescreve automaticamente o SQL para ler os dados pré-computados, reduzindo a latência de consultas em painéis e relatórios de minutos para segundos.
Escolha uma estratégia de aceleração
O Simple Log Service (SLS) oferece suporte à análise SQL em tempo real. Cada consulta processa todo o conjunto de dados dentro do intervalo de tempo selecionado. Para grandes volumes de dados, os métodos a seguir melhoram o desempenho:
|
Método de aceleração |
Princípio |
Casos de uso |
Limitações |
|
High-performance, fully accurate query and analysis (Dedicated SQL) |
Aumenta os recursos de computação para melhorar o paralelismo de uma única consulta. |
Grandes conjuntos de dados com consultas SQL que mudam frequentemente. |
A escala de dados tem um limite superior e o tempo de execução pode ser longo para volumes massivos de dados. |
|
Materialized view (este tópico) |
Pré-computa incrementalmente subinstruções de uma consulta SQL fixa. Durante a consulta, o sistema reescreve automaticamente a instrução para ler os resultados pré-computados. |
Cenários de relatórios e painéis com consultas SQL relativamente fixas e grandes volumes de dados. |
Suporta apenas Logstores padrão. Limite de 100 materialized views por projeto. |
Como funciona
Source Logstore: Logstore que contém os dados de log brutos. As materialized views não afetam o Source Logstore.
-
materialized store: Ao criar uma materialized view, o sistema cria automaticamente um materialized store correspondente para armazenar os resultados pré-computados.
O processo de materialização processa os dados ingeridos como um fluxo. Mesmo que os dados brutos cheguem com horários de log fora de ordem, a materialização agendada não produz duplicatas ou omissões.
Computação agendada em segundo plano: O sistema extrai o padrão de materialização do SQL de entrada e calcula periodicamente os resultados intermediários a partir do Source Logstore. Forneça apenas o SQL alvo ao criar uma materialized view; o sistema gerencia a lógica de materialização automaticamente.
transparent rewrite: Ao executar uma consulta SQL, o mecanismo de execução do SLS analisa a estrutura do SQL, corresponde-a a uma materialized view existente e reescreve a consulta automaticamente. Continue consultando o Source Logstore sem modificar seu SQL ou especificar uma materialized view.
Mesclagem automática para integridade dos dados: Para intervalos de tempo já materializados, o mecanismo lê diretamente da materialized view. Para os dados mais recentes não materializados, ele computa a partir do Source Logstore em tempo real. O sistema mescla os dois conjuntos de resultados automaticamente para retornar um resultado completo e atualizado.
A transparent rewrite é o mecanismo central das materialized views. Diferentemente de sistemas que exigem consulta manual a uma tabela de resultados materializados, o SLS automatiza a correspondência de SQL, a reescrita e a mesclagem de resultados sem alterações nas suas consultas existentes. Após criar uma materialized view, a aceleração não é imediata — o sistema precisa pré-computar assincronamente os dados históricos desde o horário inicial até o momento atual. Esse processo de construção geralmente leva de 1 a 12 horas, dependendo do volume e da complexidade dos dados. A aceleração entra em vigor somente após a pré-computação cobrir o intervalo de tempo da consulta.
Escopo e limitações
Suporta apenas Logstores padrão. Query Logstores, MetricStores e StoreViews não são suportados.
Limite de 100 materialized views por projeto.
Crie e gerencie materialized views no console ou via API.
Requisitos de permissão
Uma conta Alibaba Cloud possui todas as permissões necessárias por padrão. Um usuário RAM deve receber as seguintes permissões:
Use materialized views
Crie a partir da página de consulta
Crie uma materialized view diretamente a partir de uma consulta SQL na página de consulta e análise.
Faça login no console do Simple Log Service.
Na lista de Projects, clique em no projeto desejado e, em seguida, clique em no Logstore padrão alvo.
Na página de consulta e análise, insira a instrução SQL que deseja acelerar e clique em Search & Analyze.
Na área de gráfico de estatísticas dos resultados da consulta, clique em Create Materialized View.
No assistente de criação, conclua a configuração. O sistema preenche automaticamente a instrução SQL com a consulta atual. Os outros parâmetros são os mesmos utilizados para criar uma view a partir do painel de materialized views.
Crie e gerencie no console
Crie uma materialized view
Faça login no console do Simple Log Service.
Na lista de Projects, clique em no projeto desejado.
No painel de navegação à esquerda, clique em no ícone de Materialized View.
No painel de materialized views, clique em Create Now.
-
No assistente de criação, configure as seguintes definições.
-
Source Logstore: Configure a fonte de dados para a materialized view.
Parâmetro
Descrição
Project
Preenchido automaticamente com o projeto atual. Não pode ser alterado.
Source type
Selecione Logstore. Atualmente, suporta apenas Logstores padrão.
Logstore
Selecione o Logstore desejado na lista suspensa.
Após concluir a configuração, clique em Next.
-
Configuração da materialized view: Defina o nome, o SQL e outros parâmetros para a materialized view.
Parâmetro
Descrição
Nome da materialized view
Insira um nome para a materialized view. O sistema adiciona automaticamente o prefixo
mv_. Não é necessário adicioná-lo manualmente.Código SQL
Insira a instrução SQL a ser acelerada. O editor oferece suporte a destaque de sintaxe e autocompletar. Após inserir a instrução SQL, clique em Preview para validar o resultado da execução.
NotaOs nomes das colunas usados na instrução SQL devem estar indexados. Caso contrário, ocorrerá um erro durante a visualização.
Horário inicial
Selecione o horário inicial para a materialização dos dados. Este horário baseia-se no momento de gravação dos dados brutos. O sistema materializa apenas os dados gravados após esse momento.
Intervalo de materialização
Defina o intervalo (em minutos) para recálculo da view. Um intervalo menor mantém o resultado materializado mais próximo do tempo real, mas aumenta os custos de computação.
-
-
Após concluir a configuração, clique em Save.
Após a criação da materialized view, o sistema redireciona você automaticamente para a página de consulta da materialized view.
NotaO período de retenção de dados de uma materialized view é igual ao do Source Logstore associado. Limite máximo de 100 materialized views por projeto.
Visualize e gerencie materialized views
Após criar uma materialized view, visualize-a e gerencie-a no console.
-
Visualize a lista de materialized views
No painel de navegação à esquerda do projeto desejado, clique em no ícone de Materialized View. O painel lateral exibido mostra todas as materialized views do projeto atual.
-
Visualize os detalhes da materialized view
Na lista de materialized views, clique em no nome de uma materialized view para abrir sua página de detalhes. A página de detalhes exibe as seguintes informações de configuração:
Materialized View Name: Nome completo da materialized view, incluindo o prefixo
mv_.Start At: Horário inicial para a materialização dos dados.
View Update Interval: Intervalo de recálculo da view.
Data Retention Period: Igual ao período de retenção de dados do Source Logstore.
SQL Code: Instrução SQL correspondente à materialized view.
-
Exclua uma materialized view
Na página de detalhes da materialized view, clique em Delete e, em seguida, clique em OK na caixa de diálogo de confirmação.
AvisoNão é possível recuperar uma materialized view excluída. O materialized store correspondente também é excluído.
Aceleração de consultas em painéis
Se um gráfico do painel apresentar alta latência de consulta, crie uma materialized view para acelerá-lo. Para mais informações, consulte dashboard query acceleration.
Use um SDK
Também é possível criar e gerenciar materialized views programaticamente usando um SDK. O exemplo a seguir utiliza Java.
-
Importe o SDK do SLS para Java.
<dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>aliyun-log</artifactId> <version>0.6.138</version> </dependency> -
O exemplo a seguir mostra como criar, listar, obter e excluir materialized views. Modifique e execute o código conforme necessário.
-
Obtenha os parâmetros no código da seguinte forma:
Para obter um AccessKey ID e um AccessKey secret, consulte Obtain an AccessKey pair.
-
Para obter o endpoint:
Faça login no console do Simple Log Service e, na lista de projetos, clique em no projeto desejado.
Clique em no ícone
ao lado do nome do projeto para abrir a página Project Overview e copie o endpoint público.
import com.aliyun.openservices.log.Client; import com.aliyun.openservices.log.exception.LogException; import com.aliyun.openservices.log.request.CreateMaterializedViewRequest; import com.aliyun.openservices.log.request.ListMaterializedViewsRequest; import com.aliyun.openservices.log.response.GetMaterializedViewResponse; import com.aliyun.openservices.log.response.ListMaterializedViewsResponse; import java.text.SimpleDateFormat; import java.util.concurrent.TimeUnit; public class MvDemo { static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); /** * The endpoint for Simple Log Service. This example uses Hangzhou. Change it to your actual region. */ static String host = "cn-hangzhou.log.aliyuncs.com"; /** * Create a Simple Log Service client. */ static Client client = new Client(host, accessId, accessKey); /** * The project name. */ static String projectName = "xxx"; /** * The Logstore name. */ static String logstoreName = "xxx"; public static void main(String[] args) throws Exception { String materializedViewName = "test_mv"; createMv(materializedViewName); // Create a materialized view with the specified name. listMv(); // Get the list of materialized views in the current project. getMv(materializedViewName); // Get information about the current materialized view. // deleteMv(materializedViewName); // Delete the materialized view. } static int dateStrToSecond(String dateStr) throws Exception { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return (int)TimeUnit.MILLISECONDS.toSeconds(simpleDateFormat.parse(dateStr).getTime()); } static void createMv(String materializedViewName) throws Exception { String originalSql = "* | select count(l1) as cnt, l2 from stability group by l2"; // Modify this to the SQL query you want to accelerate. int aggInternalMins = 60; // The materialization interval, in minutes. int startTime = dateStrToSecond("2025-07-30 00:00:00"); // The start time for materialization, based on the write time of raw data. Only data written after this time is materialized. int ttl = 0; // The TTL of the materialized store. A value of 0 means the TTL matches that of the Source Logstore. This TTL cannot be shorter than the Source Logstore's TTL. // The number of materialized views per project cannot exceed 100. CreateMaterializedViewRequest request = new CreateMaterializedViewRequest(projectName, materializedViewName, logstoreName, originalSql, aggInternalMins, startTime, ttl); client.createMaterializedView(request); System.out.println("create materialized view " + materializedViewName); } static void listMv() throws LogException { ListMaterializedViewsRequest request = new ListMaterializedViewsRequest(projectName, "", 0, 10); // 0 and 10 are pagination parameters. ListMaterializedViewsResponse response = client.listMaterializedViews(request); System.out.println("total materialized view count: " + response.getTotal()); for (String materializedView : response.getMaterializedViews()) { System.out.println(materializedView); } } static void getMv(String materializedViewName) throws Exception { GetMaterializedViewResponse response = client.getMaterializedView(projectName, materializedViewName); System.out.println("get materialized view detail, name: " + materializedViewName); System.out.println("originalSql: " + response.getOriginalSql()); System.out.println("startTime: " + response.getStartTime()); System.out.println("ttl: " + response.getTtl()); } static void deleteMv(String materializedViewName ) throws LogException { client.deleteMaterializedView(projectName, materializedViewName); System.out.println("delete materialized view " + materializedViewName); } }
-
Sintaxe suportada
Suporte a todas as funções escalares e expressões.
Suporte a cláusulas como WHERE, GROUP BY, LIMIT e TOP-N.
Suporte a funções de agregação comuns, conforme listado na tabela a seguir:
|
Funções de agregação |
Sintaxe |
|
count(*) count(1) count(x) count_if(boolean expression) max(x) max(x, n) min(x) min(x, n) sum(x) arbitrary(x) |
|
|
approx_distinct(x) approx_distinct(x, e) approx_percentile(x, percentage) |
Faturamento
O faturamento da materialized view baseia-se no volume de dados gravados no materialized store, que depende do tamanho do resultado do SQL agendado e geralmente é muito menor que o volume do Source Logstore. O faturamento segue o modelo de pay-by-ingested-data do Logstore padrão.
Para reduzir os custos de materialização, evite usar um campo de alta cardinalidade, como timestamp ou ID de usuário, na cláusula GROUP BY. Escolha um intervalo de materialização compatível com a frequência de atualização do seu negócio.