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": "#"
    }
  }
}

Passaggi successivi