Exemplo: aplicativo "Hello World" escrito em Python, por meio da API do HappyBase

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 usa o pacote do HappyBase da biblioteca de cliente do Google Cloud para Python (em inglês), uma implementação das APIs do HappyBase (em inglês), na comunicação com o Cloud Bigtable. Use o pacote do HappyBase se precisar mover uma carga de trabalho do HBase para o Cloud Bigtable. Para novos aplicativos, veja o exemplo de "hello world" que usa o pacote do Cloud Bigtable.

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

Uso das APIs do HappyBase com o Cloud Bigtable

O aplicativo de amostra é conectado ao Cloud Bigtable e são demonstradas algumas operações simples.

Como instalar e importar a biblioteca de cliente

Os pacotes obrigatórios em Python podem ser instalados usando PIP em um ambiente virtualenv (ambos em inglês). A amostra inclui um arquivo de requisitos (em inglês) que define os pacotes necessários.

google-cloud-happybase==0.33.0

Os módulos podem então ser importados.

from google.cloud import bigtable
from google.cloud import happybase

Conexão ao Cloud Bigtable

Conecte-se ao Cloud Bigtable transferindo um bigtable.Client para uma happybase.Connection.

# 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)
connection = happybase.Connection(instance=instance)

Como criar uma tabela

Use Connection.create_table() (em inglês) para criar uma tabela e os grupos de colunas dela.

print('Creating the {} table.'.format(table_name))
column_family_name = 'cf1'
connection.create_table(
    table_name,
    {
        column_family_name: dict()  # Use default options.
    })

Como gravar linhas em uma tabela

Receba uma Table existente com Connection.table() (ambos em inglês). Use Table.put() (em inglês) para gravar uma linha na tabela.

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 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.encode('utf-8'): value.encode('utf-8')}
    )

Como ler uma linha pela chave dela

Receba uma linha diretamente usando a chave dela com Table.row() (em inglês).

print('Getting a single greeting by row key.')
key = 'greeting0'.encode('utf-8')
row = table.row(key)
print('\t{}: {}'.format(key, row[column_name.encode('utf-8')]))

Como verificar todas as linhas de tabela

Use Table.scan() (em inglês) para acessar um intervalo de linhas.

print('Scanning for all greetings:')

for key, row in table.scan():
    print('\t{}: {}'.format(key, row[column_name.encode('utf-8')]))

Exclusão de uma tabela

Exclua uma tabela com Connection.delete_table() (em inglês).

print('Deleting the {} table.'.format(table_name))
connection.delete_table(table_name)

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
from google.cloud import bigtable
from google.cloud import happybase

def main(project_id, instance_id, table_name):
    client = bigtable.Client(project=project_id, admin=True)
    instance = client.instance(instance_id)
    connection = happybase.Connection(instance=instance)

    try:
        print('Creating the {} table.'.format(table_name))
        column_family_name = 'cf1'
        connection.create_table(
            table_name,
            {
                column_family_name: dict()  # Use default options.
            })

        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 i, value in enumerate(greetings):
            row_key = 'greeting{}'.format(i)
            table.put(
                row_key, {column_name.encode('utf-8'): value.encode('utf-8')}
            )

        print('Getting a single greeting by row key.')
        key = 'greeting0'.encode('utf-8')
        row = table.row(key)
        print('\t{}: {}'.format(key, row[column_name.encode('utf-8')]))

        print('Scanning for all greetings:')

        for key, row in table.scan():
            print('\t{}: {}'.format(key, row[column_name.encode('utf-8')]))

        print('Deleting the {} table.'.format(table_name))
        connection.delete_table(table_name)

    finally:
        connection.close()

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