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

構造化された行キーを使用すると、リレーショナル データベースの複合キーと同様に、マルチパートキーを使用して 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 コンソールを使用して行キーのスキーマを定義する手順は次のとおりです。

  1. コンソールで、[Bigtable インスタンス] ページを開きます。 Google Cloud

    インスタンス リストに移動

  2. リストからインスタンスを選択します。

  3. ナビゲーション メニューで [Bigtable Studio] をクリックします。

    [エクスプローラ] ペインに、インスタンス内のテーブル、ビュー、クエリのリストが表示されます。

  4. [テーブル] リストで、行 キーのスキーマを作成するテーブルの [アクションを表示] メニューをクリックし、[行キーのスキーマを作成] をクリックします。

    [行キーのスキーマ] タブが開きます。

  5. [エンコード] リストで、行キーのスキーマのエンコード タイプを選択します。

  6. [DelimitedBytes] を選択した場合は、[区切り文字] フィールドに、既存の行キーのセグメントを区切る 区切り文字を入力します。デフォルト値はハッシュ記号(#)です。

  7. [セグメント] フィールドに、セグメントの名前(device_type など)を入力します。

  8. [] リストで、行キーのセグメントのデータ型を選択します。

  9. 選択したデータ型に応じて、[バイト エンコード] リストで、行キーのセグメントのデフォルトのエンコード タイプをそのままにするか、変更します。

  10. 省略可: 行キーのセグメントに複数の部分がある場合は、[行キーのセグメントを追加] をクリックしてフィールドを追加します。

  11. [保存] をクリックします。

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

  1. コンソールで、[Bigtable インスタンス] ページを開きます。 Google Cloud

    インスタンス リストに移動

  2. リストからインスタンスを選択します。

  3. ナビゲーション メニューで [Bigtable Studio] をクリックします。

    [エクスプローラ] ペインに、インスタンス内のテーブル、ビュー、クエリのリストが表示されます。

  4. テーブルのリストで、削除する行キーのスキーマを含むテーブルをクリックします。

  5. 削除する行キーのスキーマの [**アクションを表示**] メニューをクリックします。

  6. [削除] をクリックします。

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

  1. コンソールで、[Bigtable インスタンス] ページを開きます。 Google Cloud

    インスタンス リストに移動

  2. テーブルの行キーのスキーマを表示するインスタンスをクリックします。

  3. ナビゲーション メニューで [Bigtable Studio] をクリックします。

    [エクスプローラ] ペインに、インスタンス内のテーブル、ビュー、クエリのリストが表示されます。

  4. テーブルのリストで、表示する行キーのスキーマを含むテーブルをクリックします。

  5. 行キーのスキーマをクリックします。

    [詳細] タブが開きます。

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

次のステップ