Visualizações materializadas contínuas

Neste documento, você encontra uma visão geral das visualizações materializadas contínuas e dos 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é-calculada 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 do Bigtable subjacente.

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

  • Valores agregados ou transformados 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 pré-agregar 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 mudanças 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 a necessidade de uma ação do usuário.
  • Padrões de desenvolvimento em SQL: as visualizações materializadas contínuas são baseadas no GoogleSQL para consultas do Bigtable, incluindo funções, filtros e agregações do SQL. Embora as funções sejam determinísticas por padrão, para casos de uso limitados, é possível ativar um conjunto selecionado de funções não determinísticas.
  • Sincronização com coleta de lixo: uma visualização materializada contínua permanece sincronizada com as políticas de coleta de lixo da tabela de origem, atualizando 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 eventual: 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 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 informações sobre como os dados de serviço são tratados, 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 de uma visualização materializada contínua usando o seguinte:

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

Quando usar visualizações materializadas contínuas

Com as visualizações materializadas contínuas, é possível definir uma nova representação dos dados do Bigtable usando SQL. Depois de criada, uma visualização materializada contínua reestrutura continuamente e automaticamente os dados da tabela de origem no formato definido pela consulta SQL. 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 visão geral de todas as fontes de dados que é atualizada ao longo do tempo para refletir as mudanças nos dados subjacentes, sem a necessidade de ferramentas adicionais de processamento de stream ou jobs de ETL personalizados.
  • Padrões de acesso secundário: 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 usados em consultas na tabela de origem. Isso faz das visualizações materializadas contínuas uma ferramenta poderosa para criar o que é efetivamente 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 visualizações materializadas contínuas com outros tipos de visualizações do Bigtable, consulte Tabelas e visualizações.

Quando usar contadores

Outra maneira de agregar dados previamente é criar contadores distribuídos usando células de agregação.

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 depois que os dados são gravados e acabam ficando 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 estar em várias linhas.
  • Se você precisar ler imediatamente as gravações do cluster em que elas foram feitas.

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

  • Gere uma chave diferente para consultas nas suas agregações.
  • Veja as mudanças na tabela de base refletidas nas suas agregações.
  • Combinar dados automaticamente em 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 atualizadas em uma célula agregada, mas manter os resumos históricos dessas métricas.
  • Combine métricas em uma visualização materializada contínua.

Provisionamento e desempenho de recursos

O processamento contínuo das 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 sua visualização materializada contínua. O escalonamento automático adiciona automaticamente 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 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 atender às 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

Ao criar uma visualização materializada contínua para uma tabela existente, o Bigtable inicia um processo único que preenche a visualização com os dados da tabela. Esse processo é conhecido como população inicial. O tempo necessário para o preenchimento 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 de aplicativos, use a dica de consulta allow_incomplete_view para consultar a visualização antes que o preenchimento termine. Durante esse período, se a visualização realizar agregação, os agregados retornados 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 na performance do cluster. Para tabelas grandes, adicione 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 sua 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 o gasto 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, o preenchimento inicial de 1 TB de dados será concluído 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 linearmente, 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 o preenchimento inicial, adicione mais nós ao cluster ou, se você estiver usando o escalonamento automático, aumente 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ó são compatíveis com funções determinísticas para garantir resultados consistentes em todos os clusters de uma instância. No entanto, é possível ativar o uso de 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 deterministas.

Para usar essas funções, ao criar a visualização materializada contínua, você precisa 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 sua instância precisam ter nós suficientes para armazenar a tabela de origem e todas as visualizações materializadas contínuas com base na tabela. Com o escalonamento automático, os clusters podem escalonar verticalmente ou diminuir de tamanho conforme os requisitos de armazenamento mudam.

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

Armazenamento de visualização materializada contínua

Uma visualização materializada contínua contém dados resultantes da consulta SQL em que ela se baseia. Isso significa que ele 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 incrementalmente a visualização materializada contínua.

A quantidade de dados no armazenamento intermediário é aproximadamente equivalente à quantidade de dados 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 em 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 ou colunas de chave de linha específicas mantém apenas essas linhas ou colunas no armazenamento intermediário.

O armazenamento intermediário persiste durante toda a vida útil da visualização materializada contínua para oferecer suporte eficiente a atualizações incrementais da 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 forma 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ê recebe cobranças nas taxas padrão. Ao criar uma visualização materializada contínua, você pode esperar aumentos no seguinte:

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

Ao mesmo tempo, você pode notar uma diminuição no processamento da tabela de origem, como quando não estiver mais realizando verificações de intervalo dos dados para executar cálculos repetidos e outras consultas menos eficientes. Você também pode eliminar a necessidade de executar jobs de pipeline, como Dataflow ou Spark, para agregar dados de origem e gravar de volta no Bigtable.

Para mais informações sobre preços, consulte Preços do Bigtable. Para métricas que podem ajudar você a monitorar o uso contínuo de visualizações materializadas, 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 suas 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ção materializada 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 nos dados do usuário para a visualização materializada contínua. 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 em vez do ID da tabela. Em especial, as visualizações materializadas contínuas estão incluídas no detalhamento das métricas de CPU, o que ajuda 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. Você precisa excluir a visualização materializada contínua e criar uma nova com suas 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 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.

A seguir