Ejemplo: aplicación de “Hello World” de Python a través de la API de HappyBase

En este ejemplo, se usa una aplicación muy simple llamada “Hello World” escrita en Python y se demuestra cómo realizar las siguientes acciones:

  • Conectarse a una instancia de Cloud Bigtable.
  • Crear una tabla nueva.
  • Escribir datos en la tabla.
  • Volver a leer datos.
  • Borrar la tabla.

Cómo ejecutar la muestra

En este ejemplo, se usa el paquete de HappyBase de la biblioteca cliente de Google Cloud para Python, una implementación de las API de HappyBase, a fin de comunicarse con Cloud Bigtable. Usa el paquete de HappyBase si necesitas mover una carga de trabajo existente en HBase a Cloud Bigtable. En el caso de aplicaciones nuevas, consulta el ejemplo de “hello world” que usa el paquete de Cloud Bigtable.

Para ejecutar este programa de muestra, sigue las instrucciones que se indican en GitHub.

Cómo usar las API de HappyBase con Cloud Bigtable

La aplicación de muestra se conecta con Cloud Bigtable y demuestra algunas operaciones simples.

Cómo instalar bibliotecas cliente y cómo importarlas

Se pueden instalar los paquetes de Python obligatorios mediante PIP en un entorno de virtualenv. La muestra incluye el archivo de requisitos en el que se definen los paquetes necesarios.

google-cloud-happybase==0.33.0

Los módulos pueden ser importados.

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

Cómo conectarse con Cloud Bigtable

Te puedes conectar a Cloud Bigtable si pasas un bigtable.Client a 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)

Crea una tabla

Usa Connection.create_table() para crear una tabla y sus familias de columnas.

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

Escribe filas en una tabla

Obtén una Table existente con Connection.table(). Usa Table.put() para escribir una fila en ella.

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

Cómo leer una fila por su clave

Obtén una fila directamente con su clave con Table.row()

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

Cómo analizar todas las filas de una tabla

Usa Table.scan() para obtener un rango de filas.

print('Scanning for all greetings:')

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

Cómo borrar una tabla

Borra una tabla con Connection.delete_table().

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

Revisión general

Se muestra el ejemplo completo sin comentarios.


"""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)
¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Cloud Bigtable