E/S de Bigtable

Los SDK de Dataflow proporcionan una API para leer y escribir datos en una base de datos de Google Cloud Bigtable. La fuente y el receptor de BigtableIO te permiten leer o escribir una PCollection de objetos Row de Bigtable desde una base de datos de Bigtable determinada.

Cómo configurar opciones de Bigtable

Cuando lees o escribes en Bigtable, debes proporcionar un ID de tabla y un conjunto de opciones de Bigtable. Estas opciones contienen información necesaria para identificar el clúster de Bigtable de destino, que incluye lo siguiente:

  • ID del proyecto
  • ID de clúster
  • ID de zona

La manera más fácil de proporcionar estas opciones es crearlas mediante BigtableOptions.Builder en el paquete com.google.cloud.bigtable.config.BigtableOptions:

  BigtableOptions.Builder optionsBuilder =
     new BigtableOptions.Builder()
         .setProjectId("project")
         .setClusterId("cluster")
         .setZoneId("zone");

Lee desde Bigtable

Para leer desde Bigtable, aplica la transformación BigtableIO.read() a tu objeto Pipeline. Deberás especificar el ID de la tabla y BigtableOptions mediante .withTableId y .withBigtableOptions, respectivamente. De forma predeterminada, BigtableIO.read() analiza toda la tabla de Bigtable especificada y muestra una PCollection de los objetos Row de Bigtable:

  // Scan the entire table.
  PCollection <Row> btRows = p.apply("read",
      BigtableIO.read()
          .withBigtableOptions(optionsBuilder)
          .withTableId("table"));

Si deseas analizar un subconjunto de las filas de la tabla de Bigtable especificada, puedes proporcionar un objeto RowFilter de Bigtable. Si proporcionas un RowFilter, BigtableIO.read() mostrará solo los objetos Row que coincidan con el filtro:

  // Read only rows that match the specified filter.

  RowFilter filter = ...;

  PCollection <Row> filteredBtRows = p.apply("filtered read",
      BigtableIO.read()
          .withBigtableOptions(optionsBuilder)
          .withTableId("table")
          .withRowFilter(filter));

Escribe en Bigtable

Para escribir en Bigtable, aplica la transformación BigtableIO.write() a la PCollection que contiene tus datos de salida. Deberás especificar el ID de la tabla y BigtableOptions mediante .withTableId y .withBigtableOptions, respectivamente.

Define el formato de los datos de salida de Bigtable

El receptor de datos de BigtableIO realiza cada operación de escritura como un conjunto de modificaciones de filas en la tabla de Bigtable de destino. Por lo tanto, debes darles a tus datos de salida el formato de PCollection<KV<ByteString, Iterable<Mutation>>>. Cada elemento de la PCollection debe contener lo siguiente:

  • La clave de la fila que se escribirá como ByteString
  • Un Iterable de objetos Mutation que representen una serie de operaciones idempotentes de modificación de fila