Visualizações materializadas contínuas

Neste documento, apresentamos uma visão geral das visualizações materializadas contínuas e os casos de uso comuns delas. Antes de ler esta página, familiarize-se com a visão geral do Bigtable.

No Bigtable, uma visualização materializada contínua é o resultado de um processo em segundo plano contínuo e totalmente gerenciado. Esse processo usa uma consulta SQL que você fornece para criar e manter uma tabela pré-computada que o Bigtable atualiza de forma incremental à medida que os dados de origem mudam. A consulta SQL pode incluir agregações e transformações na tabela subjacente do Bigtable.

Os dados em uma visualização materializada contínua incluem o seguinte:

  • Valores agregados ou transformados que são derivados de dados na tabela de origem.
  • Valores não agregados que definem a chave de agrupamento

Com as visualizações materializadas contínuas, é possível agregar previamente os dados à medida que são ingeridos. Além disso, uma visualização materializada contínua tem um esquema diferente da tabela de origem, apresentando os dados dessa tabela em uma estrutura otimizada para consultas com padrões de pesquisa diferentes das consultas usadas na tabela de origem.

Confira a seguir as principais características das visualizações materializadas contínuas no Bigtable:

  • Manutenção zero: uma visualização materializada contínua é pré-computada em segundo plano. As alterações de dados na tabela de origem, incluindo atualizações e exclusões, são propagadas automaticamente em segundo plano para a visualização materializada contínua, sem que o usuário precise fazer nada.
  • Padrões de desenvolvimento SQL: as visualizações materializadas contínuas são baseadas em consultas do GoogleSQL para Bigtable, incluindo funções, filtros e agregações SQL. Embora as funções sejam determinísticas por padrão, para casos de uso limitados, você pode aceitar usar um conjunto selecionado de funções não determinísticas.
  • Sincronização com a coleta de lixo: uma visualização materializada contínua permanece sincronizada com as políticas de coleta de lixo da tabela de origem, atualizando-se automaticamente à medida que os dados da tabela expiram ou são excluídos.
  • A latência de leitura e gravação não é afetada: uma visualização materializada contínua tem um impacto mínimo no desempenho da tabela de origem quando os clusters da instância são provisionados adequadamente ou usam o escalonamento automático.
  • Consistência posterior: as visualizações materializadas contínuas são calculadas em segundo plano. As atualizações de uma visualização materializada contínua podem ser atrasadas, mas os resultados materializados contínuos são sempre consistentes ao longo do tempo.

A chave de linha, o qualificador de coluna e os valores de coluna usados para definir uma visualização materializada contínua são tratados como dados de serviço. Por isso, não crie uma visualização materializada contínua usando chave de linha, qualificador de coluna ou valores de coluna que contenham informações sensíveis. Para mais informações sobre como os dados de serviço são processados, consulte o Aviso de privacidade doGoogle Cloud .

É possível criar uma visualização materializada contínua usando a Google Cloud CLI, o editor de consultas do Bigtable Studio no console do Google Cloud ou as bibliotecas de cliente do Bigtable para Java e Go.

É possível ler uma visualização materializada contínua usando o seguinte:

Para mais informações, consulte Como ler uma visualização materializada contínua.

Quando usar visualizações materializadas contínuas

As visualizações materializadas contínuas permitem definir uma nova representação dos dados do Bigtable usando SQL. Depois de criada, uma visualização materializada contínua reestrutura de forma contínua e automática os dados da tabela de origem no formato definido pela consulta SQL. Em seguida, em vez de consultar a tabela e transformar ou agregar os dados depois de lê-los, você pode consultar a visualização materializada contínua.

As visualizações materializadas contínuas podem melhorar o desempenho das consultas nos seguintes casos de uso:

  • Pré-agregação de dados: é possível usar uma visualização materializada contínua para agregar dados recebidos em várias linhas. Isso permite recuperar dados resumidos e agregados, como métricas para painéis, rapidamente.
  • Automação de arquiteturas lambda e kappa: se o aplicativo exigir uma combinação de dados de pipeline de streaming em tempo real e dados de pipeline em lote que contenham dados históricos, use visualizações materializadas contínuas. Essas visualizações fornecem uma visualização de todas as fontes de dados que é atualizada ao longo do tempo para refletir as mudanças nos dados subjacentes, sem a necessidade de outras ferramentas de processamento de stream ou jobs de ETL personalizados.
  • Padrões de acesso secundários: as visualizações materializadas contínuas criam uma representação alternativa dos seus dados. Essa representação pode ser otimizada para consultas com padrões de pesquisa diferentes daqueles que você usa em consultas na tabela de origem. Isso faz com que as visualizações materializadas contínuas sejam uma ferramenta poderosa para criar o que é, na verdade, um índice secundário assíncrono nos seus dados. Para mais informações sobre esses padrões, consulte Criar um índice secundário assíncrono.

Para comparar as visualizações materializadas contínuas com outros tipos de visualizações do Bigtable, consulte Tabelas e visualizações.

Quando usar contadores

Outra maneira de pré-agregar seus dados é criar contadores distribuídos usando células agregadas.

As gravações em células agregadas podem ser lidas imediatamente no cluster em que foram gravadas. As visualizações materializadas contínuas são processadas após a gravação dos dados e, por fim, se tornam consistentes com a tabela de origem.

Use contadores em vez de visualizações materializadas contínuas para o seguinte:

  • Agregações que não exigem filtros e não precisam ser feitas em várias linhas.
  • Se você precisar ler imediatamente as gravações do cluster em que elas são gravadas.

Use visualizações materializadas contínuas quando quiser fazer o seguinte:

  • Gere uma chave diferente para consultas nas suas agregações.
  • As mudanças na tabela base são refletidas nas agregações.
  • Combine automaticamente dados de várias linhas.

Use uma combinação de contadores e visualizações materializadas contínuas para casos de uso como quando você quer fazer o seguinte:

  • Capturar métricas novas em uma célula agregada, mas manter os rollups históricos dessas métricas.
  • Combine métricas em uma visualização materializada contínua.

Provisionamento e desempenho de recursos

O processamento contínuo de visualizações materializadas contínuas ocorre como um job em segundo plano de baixa prioridade. Como resultado, ele tem um impacto mínimo no desempenho do aplicativo e na latência de leitura e gravação na tabela de origem, desde que os clusters sejam dimensionados adequadamente.

Como prática recomendada para garantir que os dados na visualização materializada contínua permaneçam atualizados, ative o escalonamento automático para os clusters na instância que contém a visualização materializada contínua. O escalonamento automático adiciona nós suficientes para lidar com a sobrecarga de processamento e os remove quando não são mais necessários. Isso ajuda a garantir que haja capacidade de computação suficiente disponível durante a execução da consulta SQL em execução contínua. O escalonamento automático também garante que você tenha nós suficientes para lidar com as necessidades de armazenamento das visualizações materializadas contínuas.

As visualizações materializadas contínuas são contabilizadas no limite de 1.000 tabelas por instância.

Como criar visualizações materializadas contínuas em tabelas atuais

Quando você cria uma visualização materializada contínua para uma tabela, o Bigtable inicia um processo único que preenche a visualização com os dados da tabela. Esse processo é conhecido como preenchimento inicial. O tempo necessário para a população inicial depende do tamanho da tabela e da complexidade da consulta. Por padrão, não é possível consultar a visualização durante o preenchimento inicial. No entanto, se o caso de uso puder tolerar dados incompletos, como durante o desenvolvimento do aplicativo, use a dica de consulta allow_incomplete_view para consultar a visualização antes que o preenchimento seja concluído. Durante esse período, se a visualização realizar a agregação, as agregações retornadas poderão refletir apenas alguns dos dados. Para mais informações, consulte Ler dados durante o preenchimento inicial.

Essa população inicial é executada como um job em segundo plano de baixa prioridade para minimizar o efeito no desempenho do cluster. Para tabelas grandes, é possível adicionar temporariamente mais nós ao cluster para acelerar a criação de visualizações.

O diagrama a seguir mostra o processo de criação de visualizações materializadas contínuas:

O processo de criação de visualizações materializadas contínuas no Bigtable.
Figura 1. O processo de criação de visualizações materializadas contínuas no Bigtable (clique para ampliar).

Por exemplo, suponha que a tabela de origem contenha linhas com chaves que seguem o padrão advertiser_id#region#ad_id e um grupo de colunas, data, que inclui um qualificador de coluna spend_usd com dados numéricos que representam os gastos com publicidade:

Chave de linha data:spend_usd
adv1#us-east#ad1 100
adv1#us-west#ad2 150
adv2#us-east#ad3 200

Se você usar a consulta a seguir para definir uma visualização materializada contínua dessa tabela, a população inicial de 1 TB de dados será concluída em aproximadamente três horas em um cluster de 175 nós.

SELECT
          SPLIT(_key, "#")[SAFE_OFFSET(0)] AS advertiser_id,
          count(*) AS count,
          sum(cast(cast(data['spend_usd'] as string) as int64)) as sum_spend
        FROM `$0`
        GROUP BY advertiser_id

Como o Bigtable é escalonado de forma linear, um cluster de 175 nós processa 2 TB de dados em aproximadamente seis horas e 10 TB em aproximadamente 30 horas, supondo que os dados tenham um formato semelhante. Para reduzir o tempo necessário para a população inicial, é possível adicionar temporariamente mais nós ao cluster ou, se você estiver usando o escalonamento automático, aumentar temporariamente a contagem máxima de nós.

Funções SQL não determinísticas

Por padrão, as visualizações materializadas contínuas só aceitam funções determinísticas para garantir resultados consistentes em todos os clusters de uma instância. No entanto, é possível usar funções não determinísticas, como CLUSTER_ATTRIBUTE(), para filtrar dados pelo cluster que os processa. Para mais informações, consulte Consultas não determinísticas.

Para usar essas funções, ao criar a visualização materializada contínua, é preciso reconhecer possíveis diferenças semânticas. Para mais informações, consulte Criar uma visualização materializada contínua.

Armazenamento

Para cada visualização materializada contínua, o Bigtable armazena o seguinte:

  • Os dados na visualização materializada contínua
  • Armazenamento intermediário

Como qualquer tabela do Bigtable, uma visualização materializada contínua existe em todos os clusters na instância que a contém. Os clusters na instância precisam ter nós suficientes para armazenar a tabela de origem e as visualizações materializadas contínuas com base na tabela. O escalonamento automático permite que os clusters escalonar verticalmente ou diminuam de tamanho conforme os requisitos de armazenamento mudam.

Uma visualização materializada contínua precisa ser criada na mesma instância que a tabela de origem, mesmo que o armazenamento da visualização materializada contínua seja diferente da tabela de origem.

Armazenamento de visualizações materializadas contínuas

Uma visualização materializada contínua contém dados resultantes da consulta SQL em que ela se baseia. Isso significa que ela contém valores agregados definidos por cláusulas de agregação na consulta SQL e valores não agregados que definem a chave de agrupamento.

Armazenamento intermediário

Para oferecer suporte à sincronização de uma visualização materializada contínua com a tabela de origem, o Bigtable usa o armazenamento intermediário para armazenar cópias dos dados necessários para atualizar de forma incremental a visualização materializada contínua.

A quantidade de dados no armazenamento intermediário é aproximadamente equivalente à quantidade de dados que são verificados na tabela de origem para gerar o resultado da consulta SQL que define a visualização materializada contínua. Por exemplo, se a consulta agregar dados de toda a tabela, o Bigtable vai manter o equivalente a toda a tabela no armazenamento intermediário. Uma visualização materializada contínua baseada em uma consulta de intervalos de chave de linha ou colunas específicas mantém apenas essas linhas ou colunas no armazenamento intermediário.

O armazenamento intermediário persiste durante a vida útil da visualização materializada contínua para oferecer suporte eficiente a atualizações incrementais na visualização e propagar exclusões da tabela de origem para a visualização materializada contínua. Não é possível ler os dados no armazenamento intermediário. Para insights sobre o uso do armazenamento intermediário, consulte Métricas de visualização materializada contínua.

Replicação

Em instâncias que usam replicação, as visualizações materializadas contínuas não são replicadas da mesma forma que as tabelas. Em vez disso, cada cluster em uma instância processa a visualização materializada contínua de maneira independente, usando a própria cópia da tabela de origem. Isso significa, por exemplo, que os dados gravados em uma tabela de origem no cluster A são replicados para a tabela no cluster B e, em seguida, para a visualização materializada contínua no cluster B.

Custos

Não há custo por recurso para usar visualizações materializadas contínuas. No entanto, a criação e a sincronização de visualizações materializadas contínuas exigem processamento e armazenamento, e você vai receber cobranças de acordo com as taxas padrão. Ao criar uma visualização materializada contínua, você pode esperar aumentos nos seguintes itens:

  • Armazenamento: você recebe cobranças para armazenar os dados na visualização materializada contínua e para o armazenamento intermediário. Para mais informações, consulte Armazenamento.
  • Computação: a sincronização contínua da tabela de origem e da visualização materializada contínua requer processamento de CPU, e seus clusters podem precisar de mais nós para lidar com o trabalho em segundo plano adicional.

Ao mesmo tempo, é possível que haja uma redução no processamento na tabela de origem, como quando você não está mais realizando verificações de intervalo dos dados para realizar cálculos repetidos e outras consultas menos eficientes. Também é possível eliminar a necessidade de executar jobs de pipeline, como o Dataflow ou o Spark, para agregar dados de origem e gravá-los de volta no Bigtable.

Para mais informações sobre preços, consulte Preços do Bigtable. Para métricas que podem ajudar a monitorar o uso de visualizações materializadas contínuas, consulte Métricas.

Métricas

Uma visualização materializada contínua informa várias métricas importantes ao Cloud Logging, que podem ser usadas para monitorar as visualizações materializadas contínuas.

Métrica Descrição
materialized_view/max_delay Limite superior do atraso de processamento para a visualização materializada contínua
materialized_view/storage Quantidade de dados usados para o armazenamento contínuo de visualizações materializadas em bytes
materialized_view/intermediate_storage Quantidade de dados usados pelo processamento intermediário para a visualização materializada contínua em bytes
table/materialized_view_intermediate_storage Quantidade de dados usados pelo processamento intermediário para visualizações materializadas contínuas definidas nesta tabela
materialized_view/user_errors Número de erros de dados do usuário para a visualização materializada contínua. Os erros do usuário impedem que os dados sejam propagados para a visualização.
materialized_view/system_errors Número de erros do sistema para a visualização materializada contínua

Também é possível usar muitas métricas de tabela do Bigtable para monitorar uma visualização materializada contínua, usando o ID da visualização materializada contínua no lugar do ID da tabela. Em particular, as visualizações materializadas contínuas estão incluídas no detalhamento das métricas de CPU, o que pode ajudar você a entender o impacto delas. As métricas do Bigtable para solicitações por segundo, latência e capacidade de processamento são geradas quando você lê uma visualização materializada contínua usando o método ReadRows da API Data. Para mais informações, consulte Métricas.

Para começar a usar o Cloud Logging, consulte Visão geral de consultas e registros de registros.

Limitações

  • É possível criar até 50 visualizações materializadas contínuas por instância.
  • É possível criar até cinco visualizações materializadas contínuas por tabela. Se necessário, é possível solicitar um aumento desse limite entrando em contato com o Cloud Customer Care.
  • Quando você cria uma visualização sem um _key especificado, as colunas selecionadas na tabela de origem não podem ser NULL. Para mais informações, consulte Chaves de linha definidas pela cláusula GROUP BY ou ORDER BY.
  • Não é possível modificar a consulta SQL que define uma visualização materializada contínua. É necessário excluir a visualização materializada contínua e criar uma nova com as mudanças.
  • Não é possível criar uma visualização materializada contínua de outra visualização materializada contínua ou de uma visualização lógica.
  • A consulta que define uma visualização materializada contínua não pode usar SELECT *.
  • Não é possível configurar políticas de coleta de lixo para uma visualização materializada contínua. Toda a retenção de dados é regida pelas políticas de coleta de lixo da tabela de origem, e a coleta de lixo da origem é refletida automaticamente na visualização materializada contínua.
  • Não é possível criar visualizações materializadas contínuas em tabelas com granularidade de carimbo de data/hora em microssegundos.

A seguir