diff --git a/bigtable/hello/main.py b/bigtable/hello/main.py index eab295161ff1..938fc2064c54 100644 --- a/bigtable/hello/main.py +++ b/bigtable/hello/main.py @@ -27,13 +27,17 @@ """ import argparse -import uuid from gcloud import bigtable from gcloud.bigtable import happybase def main(project, cluster_id, zone, table_name): + # [START connecting_to_bigtable] + # project = "my-project-id" + # cluster_id = "my-cluster" + # zone = "your-zone-id" + # The client must be created with admin=True because it will create a # table. client = bigtable.Client(project=project, admin=True) @@ -42,7 +46,10 @@ def main(project, cluster_id, zone, table_name): cluster = client.cluster(zone, cluster_id) cluster.reload() connection = happybase.Connection(cluster=cluster) + # [END connecting_to_bigtable] + # [START creating_a_table] + # table_name = 'Hello-Bigtable' print('Creating the {} table.'.format(table_name)) column_family_name = 'cf1' connection.create_table( @@ -50,27 +57,49 @@ def main(project, cluster_id, zone, table_name): { column_family_name: dict() # Use default options. }) - table = connection.table(table_name) + # [END creating_a_table] + # [START writing_rows] print('Writing some greetings to the table.') + table = connection.table(table_name) column_name = '{fam}:greeting'.format(fam=column_family_name) greetings = [ 'Hello World!', 'Hello Cloud Bigtable!', 'Hello HappyBase!', ] - for value in greetings: - # Use a random key to distribute writes more evenly across shards. - # See: https://cloud.google.com/bigtable/docs/schema-design - row_key = str(uuid.uuid4()) + 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) table.put(row_key, {column_name: value}) + # [END writing_rows] + + # [START getting_a_row] + print('Getting a single greeting by row key.') + key = 'greeting0' + row = table.row(key) + print('\t{}: {}'.format(key, row[column_name])) + # [END getting_a_row] + # [START scanning_all_rows] print('Scanning for all greetings:') for key, row in table.scan(): print('\t{}: {}'.format(key, row[column_name])) + # [END scanning_all_rows] + # [START deleting_a_table] print('Deleting the {} table.'.format(table_name)) connection.delete_table(table_name) + # [END deleting_a_table] if __name__ == '__main__': diff --git a/bigtable/hello/main_test.py b/bigtable/hello/main_test.py index 7826a5dbeab3..581d10a04717 100644 --- a/bigtable/hello/main_test.py +++ b/bigtable/hello/main_test.py @@ -16,7 +16,7 @@ import re import sys -from hello import main +from main import main import pytest @@ -41,7 +41,9 @@ def test_main(cloud_config, capsys): assert re.search( re.compile(r'Creating the Hello-Bigtable-[0-9]+ table\.'), out) assert re.search(re.compile(r'Writing some greetings to the table\.'), out) - assert re.search(re.compile(r'Scanning for all greetings'), out) + assert re.search(re.compile(r'Getting a single greeting by row key.'), out) assert re.search(re.compile(r'greeting0: Hello World!'), out) + assert re.search(re.compile(r'Scanning for all greetings'), out) + assert re.search(re.compile(r'greeting1: Hello Cloud Bigtable!'), out) assert re.search( re.compile(r'Deleting the Hello-Bigtable-[0-9]+ table\.'), out)