例: Python の「Hello World」アプリケーション

は、

この例は、以下の方法を示す、Python で記述された非常に単純な「Hello World」アプリケーションです。

  • Cloud Bigtable インスタンスに接続する
  • 新しいテーブルを作成する
  • テーブルにデータを書き込む
  • そのデータを読み取る
  • テーブルを削除する

サンプルの実行

この例では、Python 用 Google Cloud クライアント ライブラリCloud Bigtable パッケージを使用して、Cloud Bigtable と通信します。Cloud Bigtable パッケージは新しいアプリケーションに最適です。既存の HBase ワークロードを Cloud Bigtable に移動する必要がある場合、HappyBase パッケージを使用した "hello world" 例をご覧ください。

このサンプル プログラムを実行するには、GitHub でのサンプルの手順に沿って操作してください。

Cloud Bigtable での Cloud クライアント ライブラリの使用

このサンプル アプリケーションは Cloud Bigtable に接続して、いくつかの単純なオペレーションを行います。

クライアント ライブラリのインストールとインポート

PIP を使用して、必要な Python パッケージを virtualenv 環境にインストールします。サンプルには、必要なパッケージを定義する要件ファイルが含まれています。

google-cloud-bigtable==0.32.1
google-cloud-core==0.29.1

モジュールをインポートします。

import datetime

from google.cloud import bigtable
from google.cloud.bigtable import column_family
from google.cloud.bigtable import row_filters

Cloud Bigtable への接続

bigtable.Client を使用して Cloud Bigtable に接続します。

# The client must be created with admin=True because it will create a
# table.
client = bigtable.Client(project=project_id, admin=True)
instance = client.instance(instance_id)

テーブルの作成

Instance.table() を使用してテーブル オブジェクトをインスタンス化します。列ファミリーを作成してそのガベージ コレクション ポリシーを設定してから、列ファミリーを Table.create() に渡してテーブルを作成します。

print('Creating the {} table.'.format(table_id))
table = instance.table(table_id)

print('Creating column family cf1 with Max Version GC rule...')
# Create a column family with GC policy : most recent N versions
# Define the GC policy to retain only the most recent 2 versions
max_versions_rule = column_family.MaxVersionsGCRule(2)
column_family_id = 'cf1'
column_families = {column_family_id: max_versions_rule}
if not table.exists():
    table.create(column_families=column_families)
else:
    print("Table {} already exists.".format(table_id))

テーブルへの行の書き込み

グリーティング文字列のリストをループ処理してテーブルに新しい行を作成します。それぞれの反復処理の中で、Table.row() を使用して行を定義し、行のキーを割り当てます。次に、Row.set_cell() を呼び出して現在のセルの値を設定してから、新しい行を行の配列に追加します。最後に、Table.mutate_rows() を呼び出して行の配列をテーブルに追加します。

print('Writing some greetings to the table.')
greetings = ['Hello World!', 'Hello Cloud Bigtable!', 'Hello Python!']
rows = []
column = 'greeting'.encode()
for i, value in enumerate(greetings):
    # Note: This example uses sequential numeric IDs for simplicity,
    # but this can result in poor performance in a production
    # application.  Since rows are stored in sorted order by key,
    # sequential keys can result in poor distribution of operations
    # across nodes.
    #
    # For more information about how to design a Bigtable schema for
    # the best performance, see the documentation:
    #
    #     https://cloud.google.com/bigtable/docs/schema-design
    row_key = 'greeting{}'.format(i).encode()
    row = table.row(row_key)
    row.set_cell(column_family_id,
                 column,
                 value,
                 timestamp=datetime.datetime.utcnow())
    rows.append(row)
table.mutate_rows(rows)

フィルタの作成

書き込んだデータを読み込む前に、row_filters.CellsColumnLimitFilter() を使用してフィルタを作成して、Cloud Bigtable によって返されるデータを制限するためのフィルタを作成します。このフィルタは、ガベージ コレクションが行われていない古いバージョンがテーブルに含まれていても、各値の最新バージョンのみを返すように Cloud Bigtable に指示します。

row_filter = row_filters.CellsColumnLimitFilter(1)

キーによる行の読み取り

テーブルの [Table.read_row()]Gapi-bigtable-table-read-row メソッドを呼び出して、特定の行キーが含まれる行の参照を取得し、キーとフィルタに渡し、その行の各値の 1 つのバージョンを取得します。

print('Getting a single greeting by row key.')
key = 'greeting0'.encode()

row = table.read_row(key, row_filter)
cell = row.cells[column_family_id][column][0]
print(cell.value.decode('utf-8'))

すべてのテーブル行のスキャン

Table.read_rows() を使用して、テーブルから行の範囲を読み取ります。

print('Scanning for all greetings:')
partial_rows = table.read_rows(filter_=row_filter)

for row in partial_rows:
    cell = row.cells[column_family_id][column][0]
    print(cell.value.decode('utf-8'))

テーブルの削除

Table.delete() を使用してテーブルを削除します。

print('Deleting the {} table.'.format(table_id))
table.delete()

すべてのコードをまとめる

コメントなしの例を以下に示します。


"""Demonstrates how to connect to Cloud Bigtable and run some basic operations.

Prerequisites:

- Create a Cloud Bigtable cluster.
  https://cloud.google.com/bigtable/docs/creating-cluster
- Set your Google Application Default Credentials.
  https://developers.google.com/identity/protocols/application-default-credentials
"""

import argparse
import datetime

from google.cloud import bigtable
from google.cloud.bigtable import column_family
from google.cloud.bigtable import row_filters

def main(project_id, instance_id, table_id):
    client = bigtable.Client(project=project_id, admin=True)
    instance = client.instance(instance_id)

    print('Creating the {} table.'.format(table_id))
    table = instance.table(table_id)

    print('Creating column family cf1 with Max Version GC rule...')
    max_versions_rule = column_family.MaxVersionsGCRule(2)
    column_family_id = 'cf1'
    column_families = {column_family_id: max_versions_rule}
    if not table.exists():
        table.create(column_families=column_families)
    else:
        print("Table {} already exists.".format(table_id))

    print('Writing some greetings to the table.')
    greetings = ['Hello World!', 'Hello Cloud Bigtable!', 'Hello Python!']
    rows = []
    column = 'greeting'.encode()
    for i, value in enumerate(greetings):
        row_key = 'greeting{}'.format(i).encode()
        row = table.row(row_key)
        row.set_cell(column_family_id,
                     column,
                     value,
                     timestamp=datetime.datetime.utcnow())
        rows.append(row)
    table.mutate_rows(rows)

    row_filter = row_filters.CellsColumnLimitFilter(1)

    print('Getting a single greeting by row key.')
    key = 'greeting0'.encode()

    row = table.read_row(key, row_filter)
    cell = row.cells[column_family_id][column][0]
    print(cell.value.decode('utf-8'))

    print('Scanning for all greetings:')
    partial_rows = table.read_rows(filter_=row_filter)

    for row in partial_rows:
        cell = row.cells[column_family_id][column][0]
        print(cell.value.decode('utf-8'))

    print('Deleting the {} table.'.format(table_id))
    table.delete()

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.ArgumentDefaultsHelpFormatter)
    parser.add_argument('project_id', help='Your Cloud Platform project ID.')
    parser.add_argument(
        'instance_id', help='ID of the Cloud Bigtable instance to connect to.')
    parser.add_argument(
        '--table',
        help='Table to create and destroy.',
        default='Hello-Bigtable')

    args = parser.parse_args()
    main(args.project_id, args.instance_id, args.table)
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Cloud Bigtable ドキュメント