Applicazione del tipo di dati in Bigtable

Lo schema flessibile di Bigtable ti consente di archiviare dati di qualsiasi tipo (stringhe, date, numeri, documenti JSON o persino immagini o PDF) in una tabella Bigtable.

Questo documento descrive quando Bigtable applica il tipo, richiedendoti di codificarlo o decodificarlo nel codice dell'applicazione. Per un elenco dei tipi di dati Bigtable, consulta Type nella documentazione di riferimento dell'API di dati.

Tipi applicati

Il tipo di dati viene applicato ai seguenti dati:

  • Famiglie di colonne aggregate (contatori)
  • Timestamp
  • Viste materializzate continue
  • Chiavi di riga strutturate

Aggregati

Per il tipo di dati aggregati, la codifica dipende dal tipo di aggregazione. Quando crei una famiglia di colonne aggregate, devi specificare un tipo di aggregazione.

Questa tabella mostra il tipo di input e la codifica per ogni tipo di aggregazione.

Tipo di aggregazione Tipo di input Codifica
Somma Int64 BigEndianBytes
Min Int64 BigEndianBytes
Max Int64 BigEndianBytes
HLL Byte Zetasketch HLL++

Quando esegui query sui dati nelle celle aggregate utilizzando SQL, SQL incorpora automaticamente le informazioni sul tipo.

Quando leggi i dati nelle celle aggregate utilizzando il metodo ReadRows dell'API di dati, Bigtable restituisce byte, quindi l'applicazione deve decodificare i valori utilizzando la codifica utilizzata da Bigtable per mappare i dati digitati ai byte.

Non puoi convertire una famiglia di colonne che contiene dati non aggregati in una famiglia di colonne aggregate. Le colonne nelle famiglie di colonne aggregate non possono contenere celle non aggregate e le famiglie di colonne standard non possono contenere celle aggregate.

Per saperne di più sulla creazione di tabelle con famiglie di colonne aggregate, consulta Crea una tabella. Per esempi di codice che mostrano come incrementare una cella aggregata con valori codificati, consulta Incrementa un valore.

Timestamp

Ogni cella Bigtable ha un timestamp Int64 che rappresenta il numero di microsecondi dall'epoca di Unix, 1970-01-01 00:00:00 UTC.

Origine del timestamp

Ogni timestamp in una tabella Bigtable ha un'origine che indica come è stato impostato. Bigtable riconosce le seguenti origini dei timestamp:

  • Specificati dall'utente: timestamp impostati da te o da un'applicazione.
  • Generati da Bigtable: timestamp impostati dalla libreria client che utilizza l'orologio di sistema locale del client o generati dal server che utilizza l'ora corrente del server.

Granularità e precisione del timestamp

Bigtable supporta i seguenti livelli di granularità del timestamp:

  • Granularità in millisecondi (predefinita): il timestamp deve essere un valore in microsecondi con una precisione massima di un millisecondo, ad esempio 3023483279876000. Bigtable rifiuta i timestamp specificati dall'utente con precisione al microsecondo e tronca i timestamp generati da Bigtable con precisione al microsecondo alla precisione al millisecondo.
  • Granularità in microsecondi: il timestamp può avere una precisione completa in microsecondi, ad esempio 3023483279876543. Bigtable accetta timestamp specificati dall'utente e generati da Bigtable con precisione al microsecondo.

La granularità del timestamp viene impostata quando crei una tabella.

Limitazioni dei timestamp

Alle tabelle con granularità del timestamp in microsecondi si applicano le seguenti limitazioni:

  • Solo la libreria client Bigtable per Java versione 2.82.0 o successive supporta la granularità del timestamp in microsecondi. Le richieste di lettura o scrittura che utilizzano un altro client non vanno a buon fine.
  • La granularità del timestamp in microsecondi è disponibile solo per le istanze della versione Enterprise Plus.
  • Non puoi modificare la granularità del timestamp di una tabella dopo averla creata.
  • Non puoi creare viste materializzate continue su tabelle con granularità di microsecondi.
  • Non puoi creare viste logiche su tabelle con granularità di microsecondi.
  • Non puoi eseguire il downgrade di un'istanza da Enterprise Plus a Enterprise se contiene tabelle con granularità di microsecondi. Devi eliminare queste tabelle prima di iniziare un downgrade.
  • I backup delle tabelle con granularità di microsecondi possono essere ripristinati solo nelle istanze Enterprise Plus.

Viste materializzate continue

Le viste materializzate continue sono risorse di sola lettura che puoi leggere utilizzando SQL o con una chiamata API di dati ReadRows. I dati in una vista materializzata sono tipizzati in base alla query che li definisce. Per una panoramica, consulta Viste materializzate continue.

Quando utilizzi SQL per eseguire query su una vista materializzata continua, SQL incorpora automaticamente le informazioni sul tipo.

Quando leggi da una vista materializzata continua utilizzando una richiesta ReadRows dell'API di dati, devi conoscere il tipo di ogni colonna e decodificarlo nel codice dell'applicazione.

I valori aggregati in una vista materializzata continua vengono archiviati utilizzando la codifica descritta nella tabella seguente, in base al tipo di output della colonna dalla definizione della vista.

Tipo Codifica
BOOL Valore di 1 byte, 1 = true, 0 = false
BYTES Nessuna codifica
INT64 (o INT, SMALLINT, INTEGER, BIGINT, TINYINT, BYTEINT) Big-endian a 64 bit
FLOAT64 IEEE 754 a 64 bit, esclusi NaN e +/-inf
STRING UTF-8
TIME/TIMESTAMP Numero intero a 64 bit che rappresenta il numero di microsecondi trascorsi dall'epoca di Unix (coerente con GoogleSQL)
Per saperne di più, consulta Codifica nel riferimento API di dati.

Chiavi di riga strutturate

Le chiavi di riga strutturate ti consentono di accedere ai dati utilizzando chiavi multicolonna, simili alle chiavi composite nei database relazionali.

Il tipo e la codifica delle chiavi di riga strutturate sono definiti da uno schema della chiave di riga che puoi aggiungere facoltativamente a una tabella Bigtable. I dati strutturati della chiave di riga vengono archiviati come byte, ma GoogleSQL per Bigtable utilizza automaticamente il tipo e la codifica definiti nello schema della chiave di riga quando esegui una query SQL sulla tabella.

L'utilizzo di uno schema della chiave di riga per eseguire query su una tabella con una richiesta ReadRows non è supportato. Una vista materializzata continua ha uno schema della chiave di riga per impostazione predefinita. Per saperne di più sulle chiavi di riga strutturate, consulta Gestisci chiave di riga riga.

Tipi non applicati

Se non vengono fornite informazioni sul tipo, Bigtable tratta ogni cella come byte con una codifica sconosciuta.

Quando esegui query su famiglie di colonne create senza applicazione del tipo, devi fornire informazioni sul tipo in fase di lettura per assicurarti che i dati vengano letti correttamente. Questo è importante per le funzioni di database il cui comportamento dipende dal tipo di dati. GoogleSQL per Bigtable offre funzioni CAST per eseguire conversioni di tipo al momento della query. Queste funzioni convertono i byte nei tipi previsti dalle varie funzioni.

Sebbene Bigtable non imponga i tipi, alcune operazioni presuppongono un tipo di dati. In questo modo, puoi assicurarti che i dati vengano scritti in modo da poter essere elaborati all'interno del database. Ecco alcuni esempi:

  • Gli incrementi che utilizzano ReadModifyWriteRow presuppongono che la cella contenga un numero intero con segno big-endian a 64 bit.
  • La funzione TO_VECTOR64 in SQL prevede che la cella contenga un array di byte che è una concatenazione dei byte big-endian di numeri in virgola mobile a 64 bit.
  • La funzione TO_VECTOR32 in SQL prevede che la cella contenga un array di byte che è una concatenazione dei byte big-endian di numeri in virgola mobile a 32 bit.

Passaggi successivi