Viste materializzate continue

Questo documento fornisce una panoramica delle viste materializzate continue e dei relativi casi d'uso comuni. Prima di leggere questa pagina, devi acquisire familiarità con la panoramica di Bigtable.

In Bigtable, una vista materializzata continua è il risultato di un processo in background continuo e completamente gestito. Questo processo utilizza una query SQL fornita da te per creare e gestire una tabella precalcolata che Bigtable aggiorna in modo incrementale man mano che i dati di origine cambiano. La query SQL può includere aggregazioni e trasformazioni sulla tabella Bigtable sottostante.

I dati in una vista materializzata continua includono:

  • Valori aggregati o trasformati derivati dai dati nella tabella di origine
  • Valori non aggregati che definiscono la chiave di raggruppamento

Le viste materializzate continue consentono di pre-aggregare i dati durante l'importazione. Inoltre, una vista materializzata continua ha uno schema diverso rispetto alla tabella di origine. Presenta i dati della tabella di origine in una struttura ottimizzata per le query con pattern di ricerca diversi rispetto alle query utilizzate nella tabella di origine.

Di seguito sono riportate le caratteristiche principali delle viste materializzate continue in Bigtable:

  • Nessuna manutenzione: una vista materializzata continua viene precalcolata in background. Le modifiche ai dati della tabella di origine, inclusi aggiornamenti ed eliminazioni, vengono propagate automaticamente in background alla vista materializzata continua, senza che sia richiesto alcun intervento da parte dell'utente.
  • Pattern di sviluppo SQL: le viste materializzate continue si basano su query GoogleSQL per Bigtable, tra cui funzioni, filtri e aggregazioni SQL. Sebbene le funzioni siano deterministiche per impostazione predefinita, per casi d'uso limitati puoi attivare l'utilizzo di un insieme selezionato di funzioni non deterministiche.
  • Sincronizzazione con la garbage collection: una vista materializzata continua rimane sincronizzata con le policy di garbage collection della tabella di origine, aggiornandosi automaticamente alla scadenza o all'eliminazione dei dati della tabella.
  • La latenza di lettura e scrittura non è influenzata: una vista materializzata continua ha un impatto minimo sulle prestazioni della tabella di origine quando i cluster dell'istanza sono sottoposti a provisioning adeguato o utilizzano la scalabilità automatica.
  • Coerenza finale: le viste materializzate continue vengono calcolate in background. Gli aggiornamenti di una vista materializzata continua potrebbero essere ritardati, ma i risultati materializzati continui sono sempre coerenti nel tempo.

La chiave di riga, il qualificatore di colonna e i valori di colonna che utilizzi per definire una vista materializzata continua vengono trattati come dati di servizio. Per questo motivo, non creare una vista materializzata continua utilizzando valori di chiave di riga, qualificatore di colonna o colonna che contengono informazioni sensibili. Per informazioni su come vengono gestiti i dati di servizio, consulta l'Informativa sulla privacy diGoogle Cloud .

Puoi creare una vista materializzata continua utilizzando Google Cloud CLI, l'editor di query di Bigtable Studio nella console Google Cloud o le librerie client di Bigtable per Java e Go.

Puoi leggere da una vista materializzata continua utilizzando quanto segue:

Per saperne di più, consulta Lettura da una vista materializzata continua.

Quando utilizzare le viste materializzate continue

Le viste materializzate continue ti consentono di definire una nuova rappresentazione dei tuoi dati Bigtable utilizzando SQL. Dopo la creazione, una vista materializzata continua ristruttura continuamente e automaticamente i dati della tabella di origine nel formato definito dalla query SQL. In seguito, anziché eseguire query sulla tabella e trasformare o aggregare i dati dopo averli letti, puoi eseguire query sulla vista materializzata continua.

Le viste materializzate continue possono migliorare le prestazioni delle query per i seguenti casi d'uso:

  • Pre-aggregazione dei dati: puoi utilizzare una vista materializzata continua per aggregare i dati in entrata tra le righe. In questo modo puoi recuperare rapidamente dati riepilogati e aggregati, come le metriche per le dashboard.
  • Automazione delle architetture lambda e kappa: se la tua applicazione richiede una combinazione di dati della pipeline di streaming in tempo reale e dati della pipeline batch che contengono dati storici, utilizza le viste materializzate continue. Queste visualizzazioni forniscono una vista di tutte le origini dati che viene aggiornata nel tempo per riflettere le modifiche ai dati sottostanti, senza la necessità di strumenti di elaborazione dei flussi aggiuntivi o job ETL personalizzati.
  • Pattern di accesso secondari: le viste materializzate continue creano una rappresentazione alternativa dei dati. Questa rappresentazione può essere ottimizzata per le query con pattern di ricerca diversi da quelli che utilizzi nelle query sulla tabella di origine. Questo rende le viste materializzate continue uno strumento potente per creare un indice secondario asincrono sui tuoi dati. Per saperne di più su questi pattern, consulta Crea un indice secondario asincrono.

Per confrontare le viste materializzate continue con altri tipi di viste Bigtable, consulta Tabelle e viste.

Quando utilizzare i contatori

Un altro modo per pre-aggregare i dati è creare contatori distribuiti utilizzando celle aggregate.

Le scritture nelle celle aggregate sono immediatamente leggibili dal cluster in cui vengono scritte. Le viste materializzate continue vengono elaborate dopo la scrittura dei dati e alla fine diventano coerenti con la tabella di origine.

Utilizza i contatori anziché le viste materializzate continue per:

  • Aggregazioni che non richiedono filtri e non devono essere applicate a più righe.
  • Se devi leggere immediatamente le scritture dal cluster in cui sono state scritte.

Utilizza le viste materializzate continue quando vuoi:

  • Genera una chiave diversa per le query sulle aggregazioni.
  • Visualizza le modifiche alla tabella di base riflesse nelle aggregazioni.
  • Combina automaticamente i dati di più righe.

Utilizza una combinazione di contatori e viste materializzate continue per casi d'uso come i seguenti:

  • Acquisisci nuove metriche in una cella aggregata, ma conserva i rollup storici di queste metriche.
  • Combina le metriche in una vista materializzata continua.

Provisioning e prestazioni delle risorse

L'elaborazione continua delle viste materializzate continue avviene come job in background con priorità bassa. Di conseguenza, l'impatto sulle prestazioni dell'applicazione e sulla latenza di lettura e scrittura nella tabella di origine è minimo, a condizione che i cluster siano dimensionati in modo adeguato.

Come best practice per garantire che i dati nella vista materializzata continua rimangano aggiornati, attiva la scalabilità automatica per i cluster nell'istanza che contiene la vista materializzata continua. La scalabilità automatica aggiunge automaticamente un numero di nodi sufficiente per gestire l'overhead di elaborazione e li rimuove quando non sono più necessari. In questo modo, puoi assicurarti che sia disponibile una capacità di calcolo sufficiente durante l'esecuzione della query SQL in esecuzione continua. La scalabilità automatica può anche garantire che tu abbia nodi sufficienti per gestire le esigenze di archiviazione delle viste materializzate continue.

Le viste materializzate continue vengono conteggiate ai fini del limite di 1000 tabelle per istanza.

Creazione di viste materializzate continue su tabelle esistenti

Quando crei una vista materializzata continua per una tabella esistente, Bigtable avvia un processo una tantum che compila la vista con i dati della tabella esistente. Questo processo è noto come popolamento iniziale. Il tempo necessario per la popolazione iniziale dipende dalle dimensioni della tabella e dalla complessità della query. Per impostazione predefinita, non puoi eseguire query sulla vista durante la compilazione iniziale. Tuttavia, se il tuo caso d'uso può tollerare dati incompleti, ad esempio durante lo sviluppo di applicazioni, puoi utilizzare il suggerimento di query allow_incomplete_view per eseguire query sulla vista prima del completamento della compilazione. Durante questo periodo, se la vista esegue l'aggregazione, le aggregazioni restituite potrebbero riflettere solo alcuni dei dati. Per saperne di più, consulta Lettura dei dati durante la compilazione iniziale.

Questa popolazione iniziale viene eseguita come job in background con priorità bassa per ridurre al minimo l'effetto sulle prestazioni del cluster. Per le tabelle di grandi dimensioni, puoi aggiungere temporaneamente altri nodi al cluster per accelerare la creazione delle visualizzazioni.

Il seguente diagramma mostra il processo di creazione di viste materializzate continue:

Il processo di creazione di viste materializzate continue in Bigtable.
Figura 1. Il processo di creazione di viste materializzate continue in Bigtable (fai clic per ingrandire).

Ad esempio, supponiamo che la tabella di origine contenga righe con chiavi che seguono il pattern advertiser_id#region#ad_id e una famiglia di colonne, data, che include un qualificatore di colonna spend_usd con dati numerici che rappresentano la spesa pubblicitaria:

Chiave di riga data:spend_usd
adv1#us-east#ad1 100
adv1#us-west#ad2 150
adv2#us-east#ad3 200

Se utilizzi la seguente query per definire una vista materializzata continua di questa tabella, il popolamento iniziale di 1 TB di dati viene completato in circa tre ore su un cluster di 175 nodi.

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

Poiché Bigtable scala in modo lineare, un cluster con 175 nodi elabora 2 TB di dati in circa sei ore e 10 TB in circa 30 ore, supponendo che i dati abbiano una forma simile. Per ridurre il tempo necessario per la popolazione iniziale, puoi aggiungere temporaneamente altri nodi al cluster o, se utilizzi la scalabilità automatica, aumentare temporaneamente il numero massimo di nodi.

Funzioni SQL non deterministiche

Per impostazione predefinita, le viste materializzate continue supportano solo funzioni deterministiche per garantire risultati coerenti in tutti i cluster di un'istanza. Tuttavia, puoi attivare l'utilizzo di funzioni non deterministiche, come CLUSTER_ATTRIBUTE(), per filtrare i dati in base al cluster che li elabora. Per saperne di più, consulta Query non deterministiche.

Per utilizzare queste funzioni, quando crei la vista materializzata continua, devi riconoscere le potenziali differenze semantiche. Per saperne di più, consulta Crea una vista materializzata continua.

Archiviazione

Per ogni vista materializzata continua, Bigtable archivia quanto segue:

  • I dati nella vista materializzata continua
  • Archiviazione intermedia

Come qualsiasi tabella Bigtable, una vista materializzata continua esiste su tutti i cluster nell'istanza che la contiene. I cluster nell'istanza devono avere un numero di nodi sufficiente per archiviare la tabella di origine e tutte le viste materializzate continue basate sulla tabella. La scalabilità automatica consente ai cluster di aumentare o diminuire le dimensioni in base alle esigenze di archiviazione.

Una vista materializzata continua deve essere creata nella stessa istanza della tabella di origine, anche se lo spazio di archiviazione della vista materializzata continua è distinto da quello della tabella di origine.

Spazio di archiviazione delle viste materializzate continue

Una vista materializzata continua contiene i dati risultanti dalla query SQL su cui si basa. Ciò significa che contiene valori aggregati definiti dalle clausole di aggregazione nella query SQL e valori non aggregati che definiscono la chiave di raggruppamento.

Archiviazione intermedia

Per supportare la sincronizzazione di una vista materializzata continua con la tabella di origine, Bigtable utilizza uno spazio di archiviazione intermedio per archiviare copie dei dati necessari per aggiornare in modo incrementale la vista materializzata continua.

La quantità di dati nello spazio di archiviazione intermedio è approssimativamente equivalente alla quantità di dati scansionati nella tabella di origine per generare il risultato della query SQL che definisce la vista materializzata continua. Ad esempio, se la query aggrega i dati nell'intera tabella, Bigtable conserva l'equivalente dell'intera tabella nello spazio di archiviazione intermedio. Una vista materializzata continua basata su una query di intervalli di chiave di riga o colonne specifiche conserva solo le righe o le colonne nello spazio di archiviazione intermedio.

Lo spazio di archiviazione intermedio persiste per tutta la durata della vista materializzata continua per supportare in modo efficiente gli aggiornamenti incrementali della vista e propagare le eliminazioni dalla tabella di origine alla vista materializzata continua. Non puoi leggere i dati nello spazio di archiviazione intermedio. Per informazioni sull'utilizzo dello spazio di archiviazione intermedio, consulta Metriche vista materializzata continue.

Replica

Nelle istanze che utilizzano la replica, le viste materializzate continue non vengono replicate nello stesso modo delle tabelle. Ogni cluster di un'istanza elabora invece la vista materializzata continua in modo indipendente, utilizzando la propria copia della tabella di origine. Ciò significa, ad esempio, che i dati scritti in una tabella di origine sul cluster A vengono replicati nella tabella sul cluster B e poi nella vista materializzata continua sul cluster B.

Costi

Non è previsto alcun costo per risorsa per l'utilizzo delle viste materializzate continue. Tuttavia, la creazione e la sincronizzazione delle viste materializzate continue richiedono l'elaborazione e l'archiviazione e ti vengono addebitate le tariffe standard. Quando crei una vista materializzata continua, puoi aspettarti un aumento dei seguenti elementi:

  • Archiviazione: ti viene addebitato il costo per l'archiviazione dei dati nella vista materializzata continua e per l'archiviazione intermedia. Per saperne di più, consulta Archiviazione.
  • Computing: la sincronizzazione continua della tabella di origine e della vista materializzata continua richiede l'elaborazione della CPU e i cluster potrebbero aver bisogno di più nodi per gestire il lavoro in background aggiuntivo.

Allo stesso tempo, potresti notare una riduzione di alcune elaborazioni sulla tabella di origine, ad esempio quando non esegui più scansioni degli intervalli dei dati per eseguire calcoli ripetuti e altre query meno efficienti. Inoltre, potresti eliminare la necessità di eseguire job di pipeline, come Dataflow o Spark, per aggregare i dati di origine e riscriverli in Bigtable.

Per ulteriori informazioni sui prezzi, consulta Prezzi di Bigtable. Per le metriche che possono aiutarti a monitorare l'utilizzo delle vista materializzata continue, consulta Metriche.

Metriche

Una vista materializzata continua segnala a Cloud Logging diverse metriche chiave che puoi utilizzare per monitorare le tue viste materializzate continue.

Metrica Descrizione
materialized_view/max_delay Limite superiore del ritardo di elaborazione per la vista materializzata continua
materialized_view/storage Quantità di dati utilizzati per lo spazio di archiviazione della vista materializzata continua in byte
materialized_view/intermediate_storage Quantità di dati utilizzati dall'elaborazione intermedia per la vista materializzata continua in byte
table/materialized_view_intermediate_storage Quantità di dati utilizzati dall'elaborazione intermedia per le viste materializzate continue definite in questa tabella
materialized_view/user_errors Numero di errori dai dati utente per la vista materializzata continua. Gli errori dell'utente impediscono la propagazione dei dati alla vista.
materialized_view/system_errors Numero di errori del sistema per la vista materializzata continua

Puoi anche utilizzare molte metriche delle tabelle Bigtable per monitorare una vista materializzata continua, utilizzando l'ID della vista materializzata continua al posto dell'ID tabella. In particolare, le viste materializzate continue sono incluse nella suddivisione delle metriche della CPU, il che può aiutarti a comprenderne l'impatto. Le metriche di Bigtable per richieste al secondo, latenza e throughput vengono generate quando leggi una vista materializzata continua utilizzando il metodo ReadRows dell'API di dati. Per saperne di più, consulta Metriche.

Per iniziare a utilizzare Cloud Logging, consulta Panoramica delle query e della visualizzazione dei log.

Limitazioni

  • Puoi creare fino a 50 viste materializzate continue per istanza.
  • Puoi creare fino a 5 viste materializzate continue per tabella. Se necessario, puoi richiedere un aumento di questo limite contattando l'assistenza clienti Google Cloud.
  • Quando crei una vista senza un _key specificato, le colonne selezionate nella tabella di origine non devono essere NULL. Per saperne di più, consulta Chiavi di riga definite dalla clausola GROUP BY o ORDER BY.
  • Non puoi modificare la query SQL che definisce una vista materializzata continua. Devi eliminare la vista materializzata continua e crearne una nuova con le modifiche.
  • Non puoi creare una vista materializzata continua di un'altra vista materializzata continua o di una vista logica.
  • La query che definisce una vista materializzata continua non può utilizzare SELECT *.
  • Non puoi configurare policy di garbage collection per una vista materializzata continua. La conservazione dei dati è regolata dalle policy di garbage collection per la tabella di origine e la garbage collection dell'origine si riflette automaticamente nella vista materializzata continua.
  • Non puoi creare viste materializzate continue su tabelle con granularità del timestamp in microsecondi.

Passaggi successivi