行キーのスキーマを管理する

構造化された行キーを使用すると、リレーショナル データベースの複合キーと同様に、マルチパートキーを使用して 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 フィールドを追加してテーブルを更新します。

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 ファイルのパス。これらのファイルの形式の例については、 スキーマ ファイルの例 をご覧ください

デフォルトでは、Base64 エンコードは、行キーの区切り文字の encoding.delimitedBytes.delimiter など、YAML ファイルまたは JSON ファイル内のすべてのバイナリ フィールドに適用されます。--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)

行キーのスキーマを削除する

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

行キーのスキーマを変更する

行キーのスキーマを直接変更することはできません。行キーのスキーマを変更するには、スキーマを削除して、変更内容を含む新しいスキーマを作成する必要があります。

行キーのスキーマを表示する

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=="
    }
  }
}

次のステップ