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, richiedendo di codificarlo o decodificarlo nel codice dell'applicazione. Per un elenco dei tipi di dati Bigtable, consulta Type nella documentazione di riferimento dell'API Data.
Tipi applicati
Il tipo di dati viene applicato ai seguenti dati:
- Aggrega famiglie di colonne (contatori)
- Timestamp
- Viste materializzate
Aggregati
Per il tipo di dati aggregato, 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 Data, Bigtable restituisce byte, quindi la tua applicazione deve
decodificare i valori utilizzando la codifica che Bigtable ha utilizzato per mappare i
dati digitati in 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 ulteriori informazioni sulla creazione di tabelle con famiglie di colonne aggregate, vedi Creare una tabella. Per esempi di codice che mostrano come incrementare una cella aggregata con valori codificati, consulta Incrementare un valore.
Timestamp
Ogni cella Bigtable ha un timestamp Int64
che deve essere un valore in microsecondi con una precisione massima di un millisecondo. Bigtable
rifiuta un timestamp con precisione in microsecondi, ad esempio 3023483279876543. In
questo esempio, il valore accettabile per il timestamp รจ 3023483279876000. Un timestamp รจ
il numero di microsecondi trascorsi dall'epoca
Unix, 1970-01-01 00:00:00 UTC
.
Viste materializzate continue
Le viste materializzate continue sono risorse di sola lettura che puoi leggere utilizzando
SQL o con una chiamata API ReadRows
Data. I dati in una vista materializzata sono tipizzati
in base alla query che la definisce. Per una panoramica, vedi 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 dell'API Data ReadRows
, 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 della 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) | 64 bit big-endian |
FLOAT64 | IEEE 754 a 64 bit, escluso NaN e +/-inf |
STRING | UTF-8 |
TIME/TIMESTAMP | Numero intero a 64 bit che rappresenta il numero di microsecondi trascorsi dall'epoca Unix (coerente con GoogleSQL) |
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 delle chiavi di riga che puoi aggiungere facoltativamente a una tabella Bigtable. I dati della chiave di riga strutturata 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 di chiave di riga per eseguire query su una tabella con una richiesta ReadRows
non รจ
supportato. Per impostazione predefinita, una vista materializzata continua ha uno schema di chiave di riga. Per
ulteriori informazioni sulle chiavi di riga strutturate, consulta Gestire chiave di riga riga.
Tipi non applicati
Se non vengono fornite informazioni sul tipo, Bigtable considera ogni cella come byte con una codifica sconosciuta.
Quando esegui query sulle famiglie di colonne create senza l'applicazione del tipo, devi fornire informazioni sul tipo al momento della lettura per assicurarti che i dati vengano letti correttamente. Ciรฒ รจ pertinente 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 da varie funzioni.
Sebbene Bigtable non applichi i tipi, alcune operazioni presuppongono un tipo di dati. Conoscere questo aspetto ti aiuta a garantire che i tuoi 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.