Bigtable でカウンタを作成して更新する

書き込み時に値を集計するテーブルセルである集計を使用して、Bigtable でカウンタを作成して更新する方法について説明します。このクイックスタートでは、Google Cloud CLI と cbt CLI を使用して 3 つのカウンタを作成します。

  • 実行中の合計を保持するカウンタ
  • 追加されたすべての値の最小値を追跡するカウンタ
  • 追加されたすべての値の最大値を追跡するカウンタ

始める前に

  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. Google Cloud CLI をインストールします。

  3. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  4. gcloud CLI を初期化するには、次のコマンドを実行します。

    gcloud init
  5. gcloud CLI を初期化した後に更新して、必要なコンポーネントをインストールします。

    gcloud components update
    gcloud components install cbt
  6. Google Cloud プロジェクトを作成または選択します

    プロジェクトの選択または作成に必要なロール

    • プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトであれば、どのプロジェクトでも選択できます。
    • プロジェクトを作成する: プロジェクトを作成するには、resourcemanager.projects.create 権限を含むプロジェクト作成者ロール(roles/resourcemanager.projectCreator)が必要です。ロールを付与する方法を確認する
    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、 Google Cloud プロジェクトの名前に置き換えます。

  7. Google Cloud プロジェクトに対して課金が有効になっていることを確認します

  8. Cloud Bigtable API と Cloud Bigtable Admin API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。ロールを付与する方法を確認する

    gcloud services enable bigtable.googleapis.com bigtableadmin.googleapis.com
  9. Google Cloud CLI をインストールします。

  10. 外部 ID プロバイダ(IdP)を使用している場合は、まず連携 ID を使用して gcloud CLI にログインする必要があります。

  11. gcloud CLI を初期化するには、次のコマンドを実行します。

    gcloud init
  12. gcloud CLI を初期化した後に更新して、必要なコンポーネントをインストールします。

    gcloud components update
    gcloud components install cbt
  13. Google Cloud プロジェクトを作成または選択します

    プロジェクトの選択または作成に必要なロール

    • プロジェクトを選択する: プロジェクトの選択に特定の IAM ロールは必要ありません。ロールが付与されているプロジェクトであれば、どのプロジェクトでも選択できます。
    • プロジェクトを作成する: プロジェクトを作成するには、resourcemanager.projects.create 権限を含むプロジェクト作成者ロール(roles/resourcemanager.projectCreator)が必要です。ロールを付与する方法を確認する
    • Google Cloud プロジェクトを作成します。

      gcloud projects create PROJECT_ID

      PROJECT_ID は、作成する Google Cloud プロジェクトの名前に置き換えます。

    • 作成した Google Cloud プロジェクトを選択します。

      gcloud config set project PROJECT_ID

      PROJECT_ID は、 Google Cloud プロジェクトの名前に置き換えます。

  14. Google Cloud プロジェクトに対して課金が有効になっていることを確認します

  15. Cloud Bigtable API と Cloud Bigtable Admin API を有効にします。

    API を有効にするために必要なロール

    API を有効にするには、serviceusage.services.enable 権限を含む Service Usage 管理者 IAM ロール(roles/serviceusage.serviceUsageAdmin)が必要です。ロールを付与する方法を確認する

    gcloud services enable bigtable.googleapis.com bigtableadmin.googleapis.com
  16. 次のコマンドを実行して、gcloud CLI が最新の状態であり、cbt CLI が含まれていることを確認します。
    gcloud components update
    gcloud components install cbt

Bigtable インスタンスを作成する

  1. bigtable instances create コマンドを使用して、インスタンスを作成します。

    gcloud bigtable instances create counters-quickstart-instance \
        --display-name="Counters quickstart instance" \
        --cluster-config=id="counters-quickstart-cluster",zone="us-east1-c"
    

インスタンスに接続する

  1. プロジェクトとインスタンスを使用するように cbt CLI を構成するため、.cbtrc ファイルを作成します。

    echo project = PROJECT_ID >> ~/.cbtrc && echo instance = counters-quickstart-instance >> ~/.cbtrc
    

    PROJECT_ID は、使用しているプロジェクトの ID に置き換えます。

  2. .cbtrc ファイルを正しく設定したことを確認します。

    cat ~/.cbtrc
    

    ターミナルに .cbtrc ファイルの内容が次のように表示されます。

    project = PROJECT_ID
    instance = counters-quickstart-instance

    これで、インスタンスで cbt CLI を使用できるようになりました。

集計列ファミリーを含むテーブルを作成する

  1. cbt createtable コマンドを使用して、3 つの集計列ファミリーを持つ counters_quickstart_table という名前のテーブルを作成します。各列ファミリーを異なる集計タイプで構成します。

    • 列ファミリー max_familyMax 型で、入力型は Integer です。
    • 列ファミリー min_familyMin 型で、入力型は Integer です。
    • 列ファミリー sum_familySum 型で、入力型は Integer です。
    cbt createtable counters_quickstart_table families=sum_family:never:intsum,min_family:never:intmin,max_family:never:intmax
    
  2. cbt ls コマンドを実行して、列ファミリーを一覧表示します。

    cbt ls counters_quickstart_table
    

    シェルによって次のような出力が表示されます。

    Family Name     GC Policy
    -----------     ---------
    max_family      <never>
    min_family      <never>
    sum_family      <never>
    

テーブルにカウンタを作成する

  1. cbt addtocell コマンドを使用して、行キー row-key1 とタイムスタンプ 0 を使用して、3 つの列ファミリーのそれぞれにある新しい列に初期値 5 を書き込みます。このオペレーションでは、カウンタとして使用する集計セルを作成します。

    cbt addtocell counters_quickstart_table row-key1 sum_family:sum_column=5@0
    cbt addtocell counters_quickstart_table row-key1 min_family:min_column=5@0
    cbt addtocell counters_quickstart_table row-key1 max_family:max_column=5@0
    

データを読み取る

  1. カウンタ値をバイトではなく整数として表示するには、cbt CLI が出力のフォーマットに使用できる yaml ファイルを定義します。以下のコマンドを実行します。

    echo "families:" > cbtformat.yaml
    echo "  max_family:" >> cbtformat.yaml
    echo "    default_encoding: BigEndian" >> cbtformat.yaml
    echo "    default_type: INT64" >> cbtformat.yaml
    echo "  min_family:" >> cbtformat.yaml
    echo "    default_encoding: BigEndian" >> cbtformat.yaml
    echo "    default_type: INT64" >> cbtformat.yaml
    echo "  sum_family:" >> cbtformat.yaml
    echo "    default_encoding: BigEndian" >> cbtformat.yaml
    echo "    default_type: INT64" >> cbtformat.yaml
    
  2. cbtformat.yaml ファイルを正しく設定したことを確認します。

    cat ~/cbtformat.yaml
    

    ターミナルに cbtformat.yaml ファイルの内容が次のように表示されます。

    families:
      max_family:
        default_encoding: BigEndian
        default_type: INT64
      min_family:
        default_encoding: BigEndian
        default_type: INT64
      sum_family:
        default_encoding: BigEndian
        default_type: INT64
    
  3. cbt read コマンドを使用して yaml ファイルを渡し、テーブルに追加したデータを読み取ります。テーブルには 3 つの列があり、それぞれ異なる集計タイプが設定されています。

    cbt read counters_quickstart_table format-file=$HOME/cbtformat.yaml
    

    シェルによって次のような出力が表示されます。値は整数としてフォーマットされ、タイムスタンプは UTC 形式です。

    row-key1
      max_family:max_column                    @ 1970/01/01-00:00:00.000000
        5
      min_family:min_column                    @ 1970/01/01-00:00:00.000000
        5
      sum_family:sum_column                    @ 1970/01/01-00:00:00.000000
        5
    

カウンタを更新する

  1. セルを作成したときに使用した同じタイムスタンプを使用して、テーブルの各列に値 3 を追加します。各列で、セルの値はセルの集計タイプに基づいて既存の値と統合されます。

    cbt addtocell counters_quickstart_table row-key1 sum_family:sum_column=3@0
    cbt addtocell counters_quickstart_table row-key1 min_family:min_column=3@0
    cbt addtocell counters_quickstart_table row-key1 max_family:max_column=3@0
    
  2. cbt read コマンドをもう一度使用して、テーブル内のデータを読み取ります。各セルに集計値が表示されます。

    cbt read counters_quickstart_table format-file=$HOME/cbtformat.yaml
    

    sum_column には 5 と 3 の合計(8)が格納され、min_column には書き込まれた 2 つの値の最小値(3)が格納され、max_column には書き込まれた 2 つの値の最大値(5)が格納されます。

    row-key1
        max_family:max_column                    @ 1970/01/01-00:00:00.000000
            5
        min_family:min_column                    @ 1970/01/01-00:00:00.000000
            3
        sum_family:sum_column                    @ 1970/01/01-00:00:00.000000
            8
    
  3. 省略可: Google Cloud コンソールで SQL を使用してテーブルをクエリします。

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

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

    2. リストから counters-quickstart-instance を選択します。

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

    4. [エディタ] タブをクリックします。

    5. 次のクエリをエディタに貼り付けます。

      SELECT * FROM `counters_quickstart_table`
      
    6. [実行] をクリックします。クエリの結果は [結果] テーブルに表示され、次のようになります。

    _key max_family min_family sum_family
    row-key1 { "max_column": 5 } { "min_column": 5 } { "sum_column": 8 }

クリーンアップ

このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、リソースを含む Google Cloud プロジェクトを削除します。

  1. ターミナルで、テーブル counters_quickstart_table を削除します。

    cbt deletetable counters_quickstart_table
    
  2. インスタンスを削除します。

    cbt deleteinstance counters-quickstart-instance
    
  3. .cbtrc ファイルを削除します。

    rm ~/.cbtrc
    
  4. フォーマット ファイルを削除します。

    rm ~/cbtformat.yaml
    
  5. (省略可)gcloud CLI から認証情報を取り消します。

    gcloud auth revoke
    

次のステップ