行キーのスキーマを管理する
構造化された行キーを使用すると、リレーショナル データベースの複合キーと同様に、マルチパートキーを使用して Bigtable データにアクセスできます。 テーブルの構造化された行キーを定義すると、Bigtable 用の GoogleSQL クエリを使用して、行キーの特定の部分にアクセスできます。
行キーのスキーマを作成すると、 行キーの各セグメントのデータ型とエンコード方法を定義できます。Bigtable は、行キーを辞書順に並べ替えられたバイトとして保存します。行キーのスキーマは、これらのバイトをデコードして解釈する方法を Bigtable 用の GoogleSQL に伝えます。
構造化された行キーを使用しているかどうかに関係なく、行キーを設計するためのベスト プラクティスが適用されます。詳細については、行 キーをご覧ください。
デバイスの種類、国、製造元 ID、シリアル番号の値の間に区切り文字がある次のサンプル行キーについて考えてみましょう。
`phone#india#pke5preri2eru#8923695`
行キーのスキーマでは、# を区切り文字として識別し、行キーのセグメントを次のように定義します。
| 行キーのセグメント | 型 | エンコード |
|---|---|---|
| デバイスの種類(スマートフォン) | STRING | UTF-8 |
| 国(インド) | STRING | UTF-8 |
| 製造元 ID(pke5preri2eru) | STRING | UTF-8 |
| シリアル番号(8923695) | BYTES | 未加工 |
必要な権限
必要な権限は、実行するアクションによって異なります。
これらの権限を取得するには、管理者に依頼して、権限を含むテーブルのロールを付与してもらいます。
- 行キーのスキーマを表示する:
bigtable.tables.get - 行キーのスキーマを作成する:
bigtable.tables.update - 行キーのスキーマを削除する:
bigtable.tables.update
アクセス権の付与の詳細については、プロジェクト、 フォルダ、組織へのアクセスを管理するをご覧ください。
行キーのスキーマを作成する
継続的なマテリアライズド ビューを作成すると、Bigtable はビューの行キーのスキーマを自動的に作成します。詳細については、 継続的なマテリアライズド ビューをご覧ください。
継続的なマテリアライズド ビューではないテーブルの行キーのスキーマを定義するには、テーブルの一部として保存される RowKeySchema フィールドを追加してテーブルを更新します。
コンソール
Google Cloud コンソールを使用して行キーのスキーマを定義する手順は次のとおりです。
コンソールで、[Bigtable インスタンス] ページを開きます。 Google Cloud
リストからインスタンスを選択します。
ナビゲーション メニューで [Bigtable Studio] をクリックします。
[エクスプローラ] ペインに、インスタンス内のテーブル、ビュー、クエリのリストが表示されます。
[テーブル] リストで、行 キーのスキーマを作成するテーブルの [アクションを表示] メニューをクリックし、[行キーのスキーマを作成] をクリックします。
[行キーのスキーマ] タブが開きます。
[エンコード] リストで、行キーのスキーマのエンコード タイプを選択します。
[DelimitedBytes] を選択した場合は、[区切り文字] フィールドに、既存の行キーのセグメントを区切る 区切り文字を入力します。デフォルト値はハッシュ記号(
#)です。[セグメント] フィールドに、セグメントの名前(
device_typeなど)を入力します。[型] リストで、行キーのセグメントのデータ型を選択します。
選択したデータ型に応じて、[バイト エンコード] リストで、行キーのセグメントのデフォルトのエンコード タイプをそのままにするか、変更します。
省略可: 行キーのセグメントに複数の部分がある場合は、[行キーのセグメントを追加] をクリックしてフィールドを追加します。
[保存] をクリックします。
gcloud
gcloud CLI を使用して行キーのスキーマを定義するには、スキーマを定義する YAML ファイルまたは JSON ファイルを指定して
gcloud beta bigtable tables
update
コマンドを使用します。
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
次のように置き換えます。
- TABLE_ID: 更新するテーブルの一意の ID
- INSTANCE_ID: テーブルが配置されているインスタンスの ID
- ROW_KEY_SCHEMA_DEFINITION_FILE: 行キーのスキーマを定義する YAML ファイルまたは JSON ファイルのパス。これらのファイルの形式の例については、 Example-schema-files をご覧ください。
デフォルトでは、Base64 エンコードは、YAML ファイルまたは JSON ファイル内のすべてのバイナリ フィールド(行キーの区切り文字の encoding.delimitedBytes.delimiter など)に適用されます。--row-key-schema-pre-encoded-bytes フラグは、ファイル内のバイナリ フィールドがエンコードされているため、再度エンコードしないように Bigtable に指示します。
Go
UpdateTableWithRowKeySchema 関数を使用して、テーブルの行キーのスキーマを作成します。
func (ac *AdminClient) UpdateTableWithRowKeySchema(ctx context.Context, tableID
string, rowKeySchema StructType) error
次の例では、rks という名前のスキーマを作成してテーブルに追加します。
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)
行キーのスキーマを削除する
コンソール
コンソールを使用してテーブルの行キーのスキーマを削除する手順は次のとおりです。 Google Cloud
コンソールで、[Bigtable インスタンス] ページを開きます。 Google Cloud
リストからインスタンスを選択します。
ナビゲーション メニューで [Bigtable Studio] をクリックします。
[エクスプローラ] ペインに、インスタンス内のテーブル、ビュー、クエリのリストが表示されます。
テーブルのリストで、削除する行キーのスキーマを含むテーブルをクリックします。
削除する行キーのスキーマの [**アクションを表示**] メニューをクリックします。
[削除] をクリックします。
gcloud
テーブルの行キーのスキーマを削除するには、
gcloud beta bigtable tables
update
コマンドを--clear-row-key-schemaフラグとともに使用します。
gcloud beta bigtable tables update TABLE_NAME \
--instance=INSTANCE_ID \
--clear-row-key-schema
次のように置き換えます。
- TABLE_NAME: 行キーのスキーマを削除するテーブルの 一意の名前
- INSTANCE_ID: テーブルが配置されているインスタンスの ID
Go
UpdateTableRemoveRowKeySchema 関数を使用して、テーブルの行キーのスキーマをクリアします。
func (ac *AdminClient) UpdateTableRemoveRowKeySchema(ctx context.Context,
tableID string) error
行キーのスキーマを変更する
行キーのスキーマを直接変更することはできません。行キーのスキーマを変更するには、スキーマを削除して、変更内容を含む新しいスキーマを作成する必要があります。
行キーのスキーマを表示する
コンソール
コンソールを使用してテーブルの行キーのスキーマを表示する手順は次のとおりです。 Google Cloud
コンソールで、[Bigtable インスタンス] ページを開きます。 Google Cloud
テーブルの行キーのスキーマを表示するインスタンスをクリックします。
ナビゲーション メニューで [Bigtable Studio] をクリックします。
[エクスプローラ] ペインに、インスタンス内のテーブル、ビュー、クエリのリストが表示されます。
テーブルのリストで、表示する行キーのスキーマを含むテーブルをクリックします。
行キーのスキーマをクリックします。
[詳細] タブが開きます。
gcloud
行キーのスキーマを表示するには、gcloud beta bigtable tables
describe コマンドを使用します。
gcloud bigtable tables describe TABLE_NAME \
--instance=INSTANCE_ID
次のように置き換えます。
- TABLE_NAME: 行キーのスキーマを表示するテーブルの一意の名前
- INSTANCE_ID: テーブルが配置されているインスタンスの ID
ターミナルのレスポンスは次のようになります。テーブルに行キーのスキーマがない場合、レスポンスに 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
RowKeySchema フィールドは TableInfo オブジェクトの一部として使用できます。
取得するには、.TableInfo() メソッドを使用します。
type TableInfo struct {
...
RowKeySchema *StructType
}
func (ac *AdminClient) TableInfo(ctx context.Context, table string) (*TableInfo, error)
構造化された行キーのクエリ
構造化された行キーの列に対してクエリを実行するには、SQL を使用する必要があります。Bigtable Data API の ReadRows メソッドは、テーブルから読み取る際に行キーのスキーマを無視します。
構造化された行キーを選択するクエリの例については、構造化された行 キーのクエリをご覧ください。
コードサンプルなど、SQL クエリをサポートする Bigtable クライアント ライブラリのリストについては、Bigtable クライアント ライブラリで SQL を使用するをご覧ください。
スキーマ ファイルの例
gcloud CLI を使用して行キーのスキーマを作成する場合は、YAML ファイルまたは JSON ファイルを使用して構造化された行キーを定義できます。
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=="
}
}
}