Gérer les schémas de clés de ligne
Les clés de ligne structurées vous permettent d'accéder à vos données Bigtable à l'aide de clés en plusieurs parties, semblables aux clés composites des bases de données relationnelles. Définir des clés de ligne structurées pour une table vous permet d'accéder à des parties spécifiques des clés de ligne à l'aide de requêtes GoogleSQL pour Bigtable.
En créant un schéma de clé de ligne, vous pouvez définir le type de données de chaque segment d'une clé de ligne et la façon dont il est encodé. Bigtable stocke les clés de ligne sous forme d'octets triés de façon lexicographique. Le schéma de clé de ligne indique à GoogleSQL pour Bigtable comment décoder et interpréter ces octets.
Les bonnes pratiques pour concevoir des clés de ligne s'appliquent que vous utilisiez ou non des clés de ligne structurées. Pour en savoir plus, consultez Clés de ligne.
Prenons l'exemple de clé de ligne suivant, qui comporte des délimiteurs entre les valeurs du type d'appareil, du pays, de l'ID du fabricant et du numéro de série :
`phone#india#pke5preri2eru#8923695`
Dans le schéma de clé de ligne, vous pouvez identifier #
comme délimiteur et définir les segments de clé de ligne comme suit :
Segment de clé de ligne | Type | Encodage |
---|---|---|
Type d'appareil (téléphone) | STRING | UTF-8 |
Pays (Inde) | STRING | UTF-8 |
ID du fabricant (pke5preri2eru) | STRING | UTF-8 |
Numéro de série (8923695) | BYTES | Brut |
Autorisations requises
Les autorisations dont vous avez besoin dépendent de l'action que vous souhaitez effectuer.
Pour obtenir ces autorisations, demandez à votre administrateur de vous attribuer un rôle dans le tableau qui inclut les autorisations :
- Afficher un schéma de clé de ligne :
bigtable.tables.get
- Créez un schéma de clé de ligne :
bigtable.tables.update
- Supprimez un schéma de clé de ligne :
bigtable.tables.update
Pour en savoir plus sur l'attribution d'accès, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Créer un schéma de clé de ligne
Lorsque vous créez une vue matérialisée continue, Bigtable crée automatiquement un schéma de clé de ligne pour la vue. Pour en savoir plus, consultez Vues matérialisées continues.
Pour définir un schéma de clé de ligne pour une table qui n'est pas une vue matérialisée continue, vous devez mettre à jour la table en ajoutant un champ RowKeySchema
stocké dans la table.
gcloud
Pour définir un schéma de clé de ligne à l'aide de la gcloud CLI, utilisez la commande gcloud beta bigtable tables
update
avec un fichier YAML ou JSON qui définit le schéma.
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
Remplacez les éléments suivants :
- TABLE_ID : ID unique de la table que vous souhaitez mettre à jour
- INSTANCE_ID : ID de l'instance où se trouve la table
- ROW_KEY_SCHEMA_DEFINITION_FILE : chemin d'accès à votre fichier YAML ou JSON qui définit le schéma de clé de ligne. Pour obtenir des exemples de fichiers de schéma, consultez Exemples de fichiers de schéma.
Par défaut, l'encodage Base64 est appliqué à tous les champs binaires d'un fichier YAML ou JSON, tels que encoding.delimitedBytes.delimiter
pour le délimiteur de clé de ligne. L'indicateur --row-key-schema-pre-encoded-bytes
indique à Bigtable que les champs binaires sont encodés dans le fichier et ne doivent pas l'être à nouveau.
Go
Utilisez la fonction UpdateTableWithRowKeySchema
pour créer un schéma de clé de ligne pour une table.
func (ac *AdminClient) UpdateTableWithRowKeySchema(ctx context.Context, tableID
string, rowKeySchema StructType) error
L'exemple suivant crée un schéma appelé rks
et l'ajoute à la table.
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)
Supprimer un schéma de clé de ligne
gcloud
Pour supprimer le schéma de clé de ligne d'une table, utilisez la commande gcloud beta bigtable tables
update
avec l'option --clear-row-key-schema
.
gcloud beta bigtable tables update TABLE_NAME \
--instance=INSTANCE_ID \
--clear-row-key-schema
Remplacez les éléments suivants :
- TABLE_NAME : nom unique de la table à partir de laquelle vous souhaitez supprimer le schéma de clé de ligne
- INSTANCE_ID : ID de l'instance où se trouve la table
Go
Utilisez la fonction UpdateTableRemoveRowKeySchema
pour effacer le schéma de clé de ligne d'une table :
func (ac *AdminClient) UpdateTableRemoveRowKeySchema(ctx context.Context,
tableID string) error
Modifier un schéma de clé de ligne
Vous ne pouvez pas modifier directement un schéma de clé de ligne. Pour modifier un schéma de clé de ligne, vous devez le supprimer et en créer un autre qui inclut vos modifications.
Afficher un schéma de clé de ligne
gcloud
Pour afficher un schéma de clé de ligne, utilisez la commande gcloud beta bigtable tables
describe
:
gcloud bigtable tables describe TABLE_NAME \
--instance=INSTANCE_ID
Remplacez les éléments suivants :
- TABLE_NAME : nom unique de la table dont vous souhaitez afficher le schéma de clé de ligne
- INSTANCE_ID : ID de l'instance où se trouve la table
La réponse dans le terminal est semblable à ce qui suit. Si la table ne comporte pas de schéma de clé de ligne, la réponse n'inclut pas de section 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
Le champ RowKeySchema
est disponible dans l'objet TableInfo
et vous pouvez le récupérer à l'aide de la méthode .TableInfo()
.
type TableInfo struct {
...
RowKeySchema *StructType
}
func (ac *AdminClient) TableInfo(ctx context.Context, table string) (*TableInfo, error)
Interroger des clés de ligne structurées
Pour interroger les colonnes des clés de ligne structurées, vous devez utiliser SQL. La méthode ReadRows
de l'API Bigtable Data ignore un schéma de clé de ligne lorsqu'elle lit des données à partir d'une table.
Pour obtenir des exemples de requêtes sélectionnant des clés de ligne structurées, consultez Requêtes avec clés de ligne structurées.
Pour obtenir la liste des bibliothèques clientes Bigtable compatibles avec les requêtes SQL, y compris des exemples de code, consultez Utiliser SQL avec une bibliothèque cliente Bigtable.
Exemples de fichiers de schéma
Lorsque vous créez un schéma de clé de ligne à l'aide de gcloud CLI, vous pouvez définir les clés de ligne structurées à l'aide d'un fichier YAML ou 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": "#"
}
}
}