Exemplo: aplicativo "Hello World" do Python

Este exemplo é um aplicativo "hello world" muito simples, escrito em Python, que ilustra como:

  • conectar-se a uma instância do Cloud Bigtable;
  • criar uma nova tabela;
  • gravar dados na tabela;
  • ler os dados de volta;
  • excluir a tabela.

Como executar a amostra

Este exemplo mostra o uso do pacote do Cloud Bigtable da biblioteca de cliente do Google Cloud para Python na comunicação com o Cloud Bigtable. O pacote do Cloud Bigtable é a melhor opção para novos aplicativos. Se você precisar mover uma carga de trabalho existente do HBase para o Cloud Bigtable, consulte o exemplo "Hello World" que usa o pacote do HappyBase.

Para executar este programa de amostra, siga as instruções do exemplo no GitHub.

Como usar a biblioteca de cliente do Google Cloud com o Cloud Bigtable

O aplicativo de amostra conecta-se ao Cloud Bigtable e demonstra algumas operações simples.

Como instalar e importar a biblioteca de cliente

Use o PIP para instalar os pacotes em Python necessários em um ambiente virtualenv (em inglês). A amostra inclui um arquivo de requisitos que define os pacotes necessários.

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

Importe os módulos.

import datetime

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

Conexão ao Cloud Bigtable

Conecte-se ao Cloud Bigtable usando um bigtable.Client.

# 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)

Como criar uma tabela

Instancie um objeto de tabela usando Instance.table(). Crie um grupo de colunas e defina a política de coleta de lixo. Em seguida, passe o grupo de colunas para Table.create() a fim de criar a tabela.

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))

Como gravar linhas em uma tabela

Execute um loop em uma lista de strings de saudação para criar algumas linhas novas para a tabela. Em cada iteração, use Table.row() para definir uma linha e atribuir uma chave de linha a ela. Chame Row.set_cell() para definir o valor da célula atual e anexe a nova linha a uma matriz. Por fim, chame Table.mutate_rows() para adicionar as linhas à tabela.

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)

Como criar um filtro

Antes de ler os dados gravados, crie um filtro usando row_filters..CellsColumnLimitFilter() para limitar os dados retornados pelo Cloud Bigtable. Com esse filtro, o Cloud Bigtable retornará apenas a versão mais recente de cada valor, mesmo que a tabela contenha versões mais antigas que não tenham sido coletadas como lixo.

row_filter = row_filters.CellsColumnLimitFilter(1)

Como ler uma linha pela respectiva chave

Chame o método G api-bigtable-table-read-row [Table.read_row()] para receber uma referência da linha com uma chave de linha específica, transmitindo-a com o filtro, a fim de receber uma versão de cada valor naquela linha.

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'))

Como verificar todas as linhas da tabela

Use Table.read_rows() para ler um intervalo de linhas de uma tabela.

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'))

Como excluir uma tabela

Exclua uma tabela com Table.delete().

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

Funcionamento em conjunto

Aqui está o exemplo completo sem comentários.



"""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)
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud Bigtable