Exemplo: aplicativo "Hello world" em Java

Este exemplo de código é um aplicativo "hello world" escrito em Java, com o uso da biblioteca de cliente do Cloud Bigtable para Java. Ele mostra como concluir as seguintes tarefas:

  • 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 o exemplo

Esse código se comunica com o Cloud Bigtable usando as bibliotecas da API Admin para Java e da API DATA para Java nas bibliotecas de cliente do Google Cloud para Java .

Siga as instruções dos exemplos do Google Cloud Platform no GitHub antes de começar.

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

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

Como se conectar ao Cloud Bigtable

Para começar, é preciso ter um cliente de dados, que será usado na comunicação com a biblioteca de cliente da API de dados, além de um cliente administrador de tabela, que será usado na comunicação com a biblioteca de cliente da API admin.

Primeiro, instancie um objeto BigtableDataSettings que inclua o ID do projeto e o código da instância que o aplicativo hello world usará. Em seguida, passe as configurações para o método BigtableDataClient.create() para criar o cliente de dados.

Da mesma forma, para o cliente administrador, primeiro estabeleça as configurações criando um objeto BigtableTableAdminSettings. Use-as depois para criar um objeto BigtableTableAdminClient .

Como prática recomendada, você sempre deve criar um cliente apenas uma vez e reutilizá-lo em todo o aplicativo ao usar o Cloud Bigtable.

// Creates the settings to configure a bigtable data client.
BigtableDataSettings settings =
    BigtableDataSettings.newBuilder().setProjectId(projectId).setInstanceId(instanceId).build();

// Creates a bigtable data client.
dataClient = BigtableDataClient.create(settings);

// Creates the settings to configure a bigtable table admin client.
BigtableTableAdminSettings adminSettings =
    BigtableTableAdminSettings.newBuilder()
        .setProjectId(projectId)
        .setInstanceId(instanceId)
        .build();

// Creates a bigtable table admin client.
adminClient = BigtableTableAdminClient.create(adminSettings);

Como criar uma tabela

Para criar uma tabela, crie um objeto CreateTableRequest e passe-o para o método createTable() do cliente administrador.

// Checks if table exists, creates table if does not exist.
if (!adminClient.exists(tableId)) {
  System.out.println("Creating table: " + tableId);
  CreateTableRequest createTableRequest =
      CreateTableRequest.of(tableId).addFamily(COLUMN_FAMILY);
  adminClient.createTable(createTableRequest);
  System.out.printf("Table %s created successfully%n", tableId);
}

Como gravar linhas em uma tabela

Crie uma matriz de strings greetings[] contendo três saudações simples para usar como fonte de dados para gravar na tabela. Execute um loop na matriz. Em cada iteração do loop, crie um objeto RowMutation e use o método setCell() para adicionar uma entrada à mutação.

try {
  System.out.println("\nWriting some greetings to the table");
  String[] greetings = {"Hello World!", "Hello Bigtable!", "Hello Java!"};
  for (int i = 0; i < greetings.length; i++) {
    RowMutation rowMutation =
        RowMutation.create(tableId, ROW_KEY_PREFIX + i)
            .setCell(COLUMN_FAMILY, COLUMN_QUALIFIER, greetings[i]);
    dataClient.mutateRow(rowMutation);
    System.out.println(greetings[i]);
  }
} catch (NotFoundException e) {
  System.err.println("Failed to write to non-existent table: " + e.getMessage());
}

Como ler uma linha pela respectiva chave

Use o método readRow() do cliente de dados para ler a primeira linha que você gravou.

try {
  System.out.println("\nReading a single row by row key");
  Row row = dataClient.readRow(tableId, ROW_KEY_PREFIX + 0);
  System.out.println("Row: " + row.getKey().toStringUtf8());
  for (RowCell cell : row.getCells()) {
    System.out.printf(
        "Family: %s    Qualifier: %s    Value: %s%n",
        cell.getFamily(), cell.getQualifier().toStringUtf8(), cell.getValue().toStringUtf8());
  }
} catch (NotFoundException e) {
  System.err.println("Failed to read from a non-existent table: " + e.getMessage());
}

Como verificar todas as linhas da tabela

Em seguida, analise a tabela inteira. Crie um objeto Query, transmita-o para o método readRows() e atribua os resultados a um fluxo de linha.

try {
  System.out.println("\nReading the entire table");
  Query query = Query.create(tableId);
  ServerStream<Row> rowStream = dataClient.readRows(query);
  for (Row r : rowStream) {
    System.out.println("Row Key: " + r.getKey().toStringUtf8());
    for (RowCell cell : r.getCells()) {
      System.out.printf(
          "Family: %s    Qualifier: %s    Value: %s%n",
          cell.getFamily(), cell.getQualifier().toStringUtf8(), cell.getValue().toStringUtf8());
    }
  }
} catch (NotFoundException e) {
  System.err.println("Failed to read a non-existent table: " + e.getMessage());
}

Como excluir tabelas

Por fim, exclua a tabela com o método deleteTable() .

System.out.println("\nDeleting table: " + tableId);
try {
  adminClient.deleteTable(tableId);
  System.out.printf("Table %s deleted successfully%n", tableId);
} catch (NotFoundException e) {
  System.err.println("Failed to delete a non-existent table: " + e.getMessage());
}

Funcionamento em conjunto

Veja o exemplo de código completo sem comentários.


package com.m.examples.bigtable;

import com.google.api.gax.rpc.NotFoundException;
import com.google.api.gax.rpc.ServerStream;
import com.google.cloud.bigtable.admin.v2.BigtableTableAdminClient;
import com.google.cloud.bigtable.admin.v2.BigtableTableAdminSettings;
import com.google.cloud.bigtable.admin.v2.models.CreateTableRequest;
import com.google.cloud.bigtable.data.v2.BigtableDataClient;
import com.google.cloud.bigtable.data.v2.BigtableDataSettings;
import com.google.cloud.bigtable.data.v2.models.Query;
import com.google.cloud.bigtable.data.v2.models.Row;
import com.google.cloud.bigtable.data.v2.models.RowCell;
import com.google.cloud.bigtable.data.v2.models.RowMutation;
import java.io.IOException;

public class HelloWorld {

  private static final String COLUMN_FAMILY = "cf1";
  private static final String COLUMN_QUALIFIER = "greeting";
  private static final String ROW_KEY_PREFIX = "rowKey";
  private final String tableId;
  private final BigtableDataClient dataClient;
  private final BigtableTableAdminClient adminClient;

  public static void main(String[] args) throws Exception {

    if (args.length != 2) {
      System.out.println("Missing required project id or instance id");
      return;
    }
    String projectId = args[0];
    String instanceId = args[1];

    HelloWorld helloWorld = new HelloWorld(projectId, instanceId, "test-table");
    helloWorld.run();
  }

  public HelloWorld(String projectId, String instanceId, String tableId) throws IOException {
    this.tableId = tableId;

    BigtableDataSettings settings =
        BigtableDataSettings.newBuilder().setProjectId(projectId).setInstanceId(instanceId).build();

    dataClient = BigtableDataClient.create(settings);

    BigtableTableAdminSettings adminSettings =
        BigtableTableAdminSettings.newBuilder()
            .setProjectId(projectId)
            .setInstanceId(instanceId)
            .build();

    adminClient = BigtableTableAdminClient.create(adminSettings);
  }

  public void run() throws Exception {
    createTable();
    writeToTable();
    readSingleRow();
    readTable();
    deleteTable();
    dataClient.close();
    adminClient.close();
  }

  public void createTable() {
    if (!adminClient.exists(tableId)) {
      System.out.println("Creating table: " + tableId);
      CreateTableRequest createTableRequest =
          CreateTableRequest.of(tableId).addFamily(COLUMN_FAMILY);
      adminClient.createTable(createTableRequest);
      System.out.printf("Table %s created successfully%n", tableId);
    }
  }

  public void writeToTable() {
    try {
      System.out.println("\nWriting some greetings to the table");
      String[] greetings = {"Hello World!", "Hello Bigtable!", "Hello Java!"};
      for (int i = 0; i < greetings.length; i++) {
        RowMutation rowMutation =
            RowMutation.create(tableId, ROW_KEY_PREFIX + i)
                .setCell(COLUMN_FAMILY, COLUMN_QUALIFIER, greetings[i]);
        dataClient.mutateRow(rowMutation);
        System.out.println(greetings[i]);
      }
    } catch (NotFoundException e) {
      System.err.println("Failed to write to non-existent table: " + e.getMessage());
    }
  }

  public void readSingleRow() {
    try {
      System.out.println("\nReading a single row by row key");
      Row row = dataClient.readRow(tableId, ROW_KEY_PREFIX + 0);
      System.out.println("Row: " + row.getKey().toStringUtf8());
      for (RowCell cell : row.getCells()) {
        System.out.printf(
            "Family: %s    Qualifier: %s    Value: %s%n",
            cell.getFamily(), cell.getQualifier().toStringUtf8(), cell.getValue().toStringUtf8());
      }
    } catch (NotFoundException e) {
      System.err.println("Failed to read from a non-existent table: " + e.getMessage());
    }
  }

  public void readTable() {
    try {
      System.out.println("\nReading the entire table");
      Query query = Query.create(tableId);
      ServerStream<Row> rowStream = dataClient.readRows(query);
      for (Row r : rowStream) {
        System.out.println("Row Key: " + r.getKey().toStringUtf8());
        for (RowCell cell : r.getCells()) {
          System.out.printf(
              "Family: %s    Qualifier: %s    Value: %s%n",
              cell.getFamily(), cell.getQualifier().toStringUtf8(), cell.getValue().toStringUtf8());
        }
      }
    } catch (NotFoundException e) {
      System.err.println("Failed to read a non-existent table: " + e.getMessage());
    }
  }

  public void deleteTable() {
    System.out.println("\nDeleting table: " + tableId);
    try {
      adminClient.deleteTable(tableId);
      System.out.printf("Table %s deleted successfully%n", tableId);
    } catch (NotFoundException e) {
      System.err.println("Failed to delete a non-existent table: " + e.getMessage());
    }
  }
}
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud Bigtable