Gestisci gli schemi delle chiave di riga
Le chiavi di riga strutturate ti consentono di accedere ai dati Bigtable utilizzando chiavi in più parti, simili alle chiavi composite nei database relazionali. La definizione di chiavi di riga strutturate per una tabella ti consente di accedere a parti specifiche delle chiavi di riga utilizzando GoogleSQL per le query Bigtable.
Creando uno schema di chiavi di riga, puoi definire il tipo di dati di ogni segmento di una chiave di riga e la relativa codifica. Bigtable archivia le chiavi di riga come byte ordinati lessicograficamente e lo schema della chiave di riga indica a GoogleSQL per Bigtable come decodificare e interpretare questi byte.
Le best practice per la progettazione delle chiavi di riga si applicano indipendentemente dal fatto che tu utilizzi chiavi di riga strutturate o meno. Per ulteriori informazioni, consulta Chiavi riga.
Considera la seguente chiave di riga di esempio, che presenta delimitatori tra i valori per tipo di dispositivo, paese, ID produttore e numero di serie:
`phone#india#pke5preri2eru#8923695`
Nello schema della chiave di riga, potresti identificare #
come delimitatore e definire i segmenti della chiave di riga come segue:
Segmento di chiavi di riga | Tipo | Codifica |
---|---|---|
Tipo di dispositivo (smartphone) | STRING | UTF-8 |
Paese (India) | STRING | UTF-8 |
ID produttore (pke5preri2eru) | STRING | UTF-8 |
Numero di serie (8923695) | BYTES | Dati |
Autorizzazioni obbligatorie
Le autorizzazioni necessarie dipendono dall'azione che vuoi eseguire.
Per ottenere queste autorizzazioni, chiedi all'amministratore di concederti un ruolo nella tabella che includa le autorizzazioni:
- Visualizza uno schema di chiave di riga:
bigtable.tables.get
- Crea uno schema di chiave di riga:
bigtable.tables.update
- Elimina uno schema di chiave di riga:
bigtable.tables.update
Per saperne di più sulla concessione dell'accesso, vedi Gestire l'accesso a progetti, cartelle e organizzazioni.
Creare uno schema di chiave di riga
Quando crei una vista materializzata continua, Bigtable crea automaticamente uno schemachiave di rigaa per la vista. Per ulteriori informazioni, consulta Viste materializzate continue.
Per definire uno schema di chiave di riga per una tabella che non è una vista materializzata continua, aggiorna la tabella aggiungendo un campo RowKeySchema
memorizzato come parte della tabella.
gcloud
Per definire uno schema di chiave di riga utilizzando gcloud CLI, utilizza il comando gcloud beta bigtable tables
update
con un file YAML o JSON che definisce lo schema.
gcloud bigtable beta tables update TABLE_ID \
--instance=INSTANCE_ID \
--row-key-schema-definition-file=ROW_KEY_SCHEMA_DEFINITION_FILE \
--row-key-schema-pre-encoded-bytes
Sostituisci quanto segue:
- TABLE_ID: l'ID univoco della tabella che vuoi aggiornare
- INSTANCE_ID: l'ID dell'istanza in cui si trova la tabella
- ROW_KEY_SCHEMA_DEFINITION_FILE: il percorso del file YAML o JSON che definisce lo schema della chiave di riga. Per esempi di come dovrebbero apparire questi file, consulta Example-schema-files.
Per impostazione predefinita, la codifica Base64 viene applicata a tutti i campi binari di un file YAML o JSON, ad esempio encoding.delimitedBytes.delimiter
per il delimitatore della chiave di riga. Il flag --row-key-schema-pre-encoded-bytes
indica
a Bigtable che i campi binari sono codificati nel file e non devono
essere codificati di nuovo.
Vai
Utilizza la funzione UpdateTableWithRowKeySchema
per creare uno schema di chiave di riga per una
tabella.
func (ac *AdminClient) UpdateTableWithRowKeySchema(ctx context.Context, tableID
string, rowKeySchema StructType) error
L'esempio seguente crea uno schema denominato rks
e lo aggiunge alla
tabella.
rks := StructType{
Fields: []StructField{
{FieldName: "key1", FieldType: Int64Type{Encoding: Int64OrderedCodeBytesEncoding{}}},
{FieldName: "key2", FieldType: StringType{Encoding: StringUtf8BytesEncoding{}}},
},
Encoding: StructDelimitedBytesEncoding{Delimiter: []byte{'#'}}}
err := c.UpdateTableWithRowKeySchema(context.Background(), "my-table", rks)
Elimina uno schema di chiave di riga
gcloud
Per eliminare lo schema della chiave di riga di una tabella, utilizza il
comando gcloud beta bigtable tables
update
con il flag --clear-row-key-schema
.
gcloud beta bigtable tables update TABLE_NAME \
--instance=INSTANCE_ID \
--clear-row-key-schema
Sostituisci quanto segue:
- TABLE_NAME: il nome univoco della tabella da cui vuoi eliminare lo schema della chiave di riga
- INSTANCE_ID: l'ID dell'istanza in cui si trova la tabella
Vai
Utilizza la funzione UpdateTableRemoveRowKeySchema
per cancellare lo schema della chiave di riga
per una tabella:
func (ac *AdminClient) UpdateTableRemoveRowKeySchema(ctx context.Context,
tableID string) error
Modificare uno schema di chiave di riga
Non puoi modificare direttamente uno schema di chiave di riga. Per modificare uno schema di chiave di riga, devi eliminare lo schema e crearne uno nuovo che includa le modifiche.
Visualizzare uno schema di chiave di riga
gcloud
Per visualizzare uno schema di chiave di riga, utilizza il comando gcloud beta bigtable tables
describe
:
gcloud bigtable tables describe TABLE_NAME \
--instance=INSTANCE_ID
Sostituisci quanto segue:
- TABLE_NAME: il nome univoco della tabella di cui vuoi visualizzare lo schema della chiave di riga
- INSTANCE_ID: l'ID dell'istanza in cui si trova la tabella
La risposta nel terminale è simile alla seguente. Se la tabella
non ha uno schema di chiave di riga, la risposta non include una sezione rowKeySchema
.
columnFamilies:
cf: {}
createTime: '2025-05-28T17:25:39.433058Z'
granularity: MILLIS
name: projects/<project>/instances/<instance>/tables/<table>
rowKeySchema:
encoding:
delimitedBytes:
delimiter: Iw==
fields:
- fieldName: <field_name_1>
type:
stringType:
encoding:
utf8Bytes: {}
- fieldName: <field_name_2>
type:
intType:
encoding:
bigEndianBytes: {}
- fieldName: <field_name_3>
type:
timestampType:
encoding:
unixMicrosInt64: {
encoding: {
orderedCodeBytes: {}
}
}
updateTime: '2025-05-28T17:25:39.433058Z'
Vai
Il campo RowKeySchema
è disponibile nell'oggetto TableInfo
e
lo recuperi utilizzando il metodo .TableInfo()
.
type TableInfo struct {
...
RowKeySchema *StructType
}
func (ac *AdminClient) TableInfo(ctx context.Context, table string) (*TableInfo, error)
Esecuzione di query sulle chiavi di riga strutturate
Per eseguire query sulle colonne nelle chiavi di riga strutturate, devi utilizzare SQL. Il metodo
Bigtable Data API ReadRows
ignora uno schema di chiave di riga quando
legge da una tabella.
Per esempi di query che selezionano chiavi di riga strutturate, vedi Query con chiavi di riga strutturate.
Per un elenco delle librerie client Bigtable che supportano le query SQL, inclusi esempi di codice, consulta Utilizzare SQL con una libreria client Bigtable.
File schema di esempio
Quando crei uno schema di chiave di riga utilizzando gcloud CLI, puoi definire le chiavi di riga strutturate utilizzando un file YAML o un file JSON.
YAML
fields:
- field_name: "user_id"
type:
bytesType:
encoding:
raw: {}
- fieldBame: "purchase_date"
type:
stringType:
encoding:
utf8Bytes: {}
- fieldName: "order_number"
type:
bytes_type:
encoding:
utf8Bytes: {}
encoding:
delimited_bytes:
delimiter: "#"
JSON
{
"fields": [
{
"fieldName": "user_id",
"type": {
"bytesType": {
"encoding": {
"raw": {}
}
}
}
},
{
"fieldName": "purchase_date",
"type": {
"stringType": {
"encoding": {
"utf8Bytes": {}
}
}
}
},
{
"fieldName": "order_number",
"type": {
"bytesType": {
"encoding": {
"utf8Bytes": {}
}
}
}
}
],
"encoding": {
"delimitedBytes": {
"delimiter": "#"
}
}
}