Zeilenschlüsselschemas verwalten
Mit strukturierten Zeilenschlüsseln können Sie mit mehrteiligen Schlüsseln auf Ihre Bigtable-Daten zugreifen, ähnlich wie mit zusammengesetzten Schlüsseln in relationalen Datenbanken. Wenn Sie strukturierte Zeilenschlüssel für eine Tabelle definieren, können Sie mit GoogleSQL für Bigtable-Abfragen auf bestimmte Teile der Zeilenschlüssel zugreifen.
Durch das Erstellen eines Zeilenschlüsselschemas können Sie den Datentyp jedes Segments von einem Zeilenschlüssel und dessen Codierung definieren. Bigtable speichert die Zeilenschlüssel als lexikografisch sortierte Byte. Das Zeilenschlüsselschema teilt GoogleSQL für Bigtable mit, wie diese Byte decodiert und interpretiert werden.
Die Best Practices für das Entwerfen von Zeilenschlüsseln gelten unabhängig davon, ob Sie strukturierte Zeilenschlüssel verwenden oder nicht. Weitere Informationen finden Sie unter Zeilen schlüssel.
Betrachten Sie den folgenden Beispiel-Zeilenschlüssel, der Trennzeichen zwischen den Werten für Gerätetyp, Land, Hersteller-ID und Seriennummer enthält:
`phone#india#pke5preri2eru#8923695`
Im Zeilenschlüsselschema können Sie # als Trennzeichen identifizieren und die Zeilenschlüsselsegmente so definieren:
| Zeilenschlüsselsegment | Typ | Codierung |
|---|---|---|
| Gerätetyp (Smartphone) | STRING | UTF-8 |
| Land (Indien) | STRING | UTF-8 |
| Hersteller-ID (pke5preri2eru) | STRING | UTF-8 |
| Seriennummer (8923695) | BYTES | Rohdaten |
Erforderliche Berechtigungen
Die erforderlichen Berechtigungen hängen von der Aktion ab, die Sie ausführen möchten.
Bitten Sie Ihren Administrator, Ihnen eine Rolle für die Tabelle zuzuweisen, die die folgenden Berechtigungen enthält:
- Zeilenschlüsselschema ansehen:
bigtable.tables.get - Zeilenschlüsselschema erstellen:
bigtable.tables.update - Zeilenschlüsselschema löschen:
bigtable.tables.update
Weitere Informationen zum Gewähren des Zugriffs finden Sie unter Zugriff auf Projekte, Ordner und Organisationen verwalten.
Zeilenschlüsselschema erstellen
Wenn Sie eine kontinuierliche materialisierte Ansicht erstellen, erstellt Bigtable automatisch ein Zeilenschlüsselschema für die Ansicht. Weitere Informationen finden Sie unter Kontinuierliche materialisierte Ansichten.
Wenn Sie ein Zeilenschlüsselschema für eine Tabelle definieren möchten, die keine kontinuierliche materialisierte Ansicht ist, aktualisieren Sie die Tabelle, indem Sie ein Feld RowKeySchema hinzufügen, das als Teil der Tabelle gespeichert wird.
gcloud
Verwenden Sie den
gcloud beta bigtable tables
update
Befehl mit einer YAML- oder JSON-Datei, die das Schema definiert, um ein Zeilenschlüsselschema mit der gcloud CLI zu definieren.
gcloud beta bigtable tables update TABLE_ID \
--instance=INSTANCE_ID \
--row-key-schema-definition-file=ROW_KEY_SCHEMA_DEFINITION_FILE \
--row-key-schema-pre-encoded-bytes
Ersetzen Sie Folgendes:
- TABLE_ID: die eindeutige ID der Tabelle, die Sie aktualisieren möchten
- INSTANCE_ID: die ID der Instanz, in der sich die Tabelle befindet
- ROW_KEY_SCHEMA_DEFINITION_FILE: der Pfad zu Ihrer YAML- oder JSON-Datei, die das Zeilenschlüsselschema definiert. Beispiele für das Aussehen dieser Dateien finden Sie unter Beispieldateien für Schemas.
Standardmäßig wird die Base64-Codierung auf alle Binärfelder in einer YAML- oder JSON-Datei angewendet, z. B. encoding.delimitedBytes.delimiter für das Trennzeichen des Zeilenschlüssels. Das Flag --row-key-schema-pre-encoded-bytes teilt Bigtable mit, dass Binärfelder in der Datei codiert sind und nicht noch einmal codiert werden müssen.
Go
Verwenden Sie die Funktion UpdateTableWithRowKeySchema, um ein Zeilenschlüsselschema für eine Tabelle zu erstellen.
func (ac *AdminClient) UpdateTableWithRowKeySchema(ctx context.Context, tableID
string, rowKeySchema StructType) error
Im folgenden Beispiel wird ein Schema mit dem Namen rks erstellt und der Tabelle hinzugefügt.
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)
Zeilenschlüsselschema löschen
gcloud
Verwenden Sie den
gcloud beta bigtable tables
update
Befehl mit dem --clear-row-key-schema Flag, um das Zeilenschlüsselschema einer Tabelle zu löschen.
gcloud beta bigtable tables update TABLE_NAME \
--instance=INSTANCE_ID \
--clear-row-key-schema
Ersetzen Sie Folgendes:
- TABLE_NAME: der eindeutige Name der Tabelle, aus der Sie das Zeilenschlüsselschema löschen möchten
- INSTANCE_ID: die ID der Instanz, in der sich die Tabelle befindet
Go
Verwenden Sie die Funktion UpdateTableRemoveRowKeySchema, um das Zeilenschlüsselschema für eine Tabelle zu löschen:
func (ac *AdminClient) UpdateTableRemoveRowKeySchema(ctx context.Context,
tableID string) error
Zeilenschlüsselschema ändern
Sie können ein Zeilenschlüsselschema nicht direkt ändern. Wenn Sie ein Zeilenschlüsselschema ändern möchten, müssen Sie das Schema löschen und ein neues erstellen, das Ihre Änderungen enthält.
Zeilenschlüsselschema ansehen
gcloud
Verwenden Sie den gcloud beta bigtable tables
describe Befehl, um ein Zeilenschlüsselschema anzusehen:
gcloud bigtable tables describe TABLE_NAME \
--instance=INSTANCE_ID
Ersetzen Sie Folgendes:
- TABLE_NAME: der eindeutige Name der Tabelle deren Zeilenschlüsselschema Sie ansehen möchten
- INSTANCE_ID: die ID der Instanz, in der sich die Tabelle befindet
Die Antwort im Terminal sieht in etwa so aus: Wenn die Tabelle kein Zeilenschlüsselschema hat, enthält die Antwort keinen Abschnitt 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'
Go
Das Feld RowKeySchema ist Teil des Objekts TableInfo und
wird mit der Methode .TableInfo() abgerufen.
type TableInfo struct {
...
RowKeySchema *StructType
}
func (ac *AdminClient) TableInfo(ctx context.Context, table string) (*TableInfo, error)
Strukturierte Zeilenschlüssel abfragen
Wenn Sie die Spalten in strukturierten Zeilenschlüsseln abfragen möchten, müssen Sie SQL verwenden. Die Bigtable Data API-Methode ReadRows ignoriert ein Zeilenschlüsselschema, wenn sie Daten aus einer Tabelle liest.
Beispiele für Abfragen, die strukturierte Zeilenschlüssel auswählen, finden Sie unter Abfragen mit strukturierten Zeilenschlüsseln.
Eine Liste der Bigtable-Clientbibliotheken, die SQL-Abfragen unterstützen, einschließlich Codebeispielen, finden Sie unter SQL mit einer Bigtable-Clientbibliothek verwenden.
Beispieldateien für Schemas
Wenn Sie ein Zeilenschlüsselschema mit der gcloud CLI erstellen, können Sie die strukturierten Zeilenschlüssel entweder mit einer YAML- oder einer JSON-Datei definieren.
YAML
fields:
- fieldName: "user_id"
type:
stringType:
encoding:
utf8Bytes: {}
- fieldName: "purchase_date"
type:
stringType:
encoding:
utf8Bytes: {}
- fieldName: "order_number"
type:
stringType:
encoding:
utf8Bytes: {}
encoding:
delimitedBytes:
delimiter: "Iw=="
JSON
{
"fields": [
{
"fieldName": "user_id",
"type": {
"stringType": {
"encoding": {
"utf8Bytes": {}
}
}
}
},
{
"fieldName": "purchase_date",
"type": {
"stringType": {
"encoding": {
"utf8Bytes": {}
}
}
}
},
{
"fieldName": "order_number",
"type": {
"stringType": {
"encoding": {
"utf8Bytes": {}
}
}
}
}
],
"encoding": {
"delimitedBytes": {
"delimiter": "Iw=="
}
}
}
Nächste Schritte
- Kontinuierliche materialisierte Ansichten erstellen und verwalten
- GoogleSQL für Bigtable – Übersicht