Principios de diseño de la canalización

En esta página, se explica cómo diseñar tu canalización de Google Cloud Dataflow. Se incluye información sobre cómo determinar la estructura de la canalización, cómo elegir qué transformaciones aplicar a tus datos y cómo determinar tus métodos de entrada y salida.

Antes de leer esta sección, recomendamos que te familiarices con la información sobre el modelo de programación de Cloud Dataflow, que incluye Canalizaciones, PCollections, Transformaciones y Canalización E/S.

Qué tener en cuenta cuando diseñas tu canalización

Cuando diseñas tu canalización de Cloud Dataflow, ten en cuenta las siguientes cuestiones básicas:

  • ¿Dónde están almacenados tus datos de entrada? ¿Cuántos conjuntos de datos de entrada tienes? Eso determinará qué tipos de transformaciones de lectura necesitas aplicar al comienzo de tu canalización.
  • ¿Cómo se ven tus datos? Por ejemplo, pueden ser archivos de registro con formato, sin formato o filas de una tabla de BigQuery. Debido a que algunas transformaciones de Dataflow funcionan solo en PCollection de pares clave-valor; deberás determinar cómo se vinculan tus datos y cómo representar eso de la mejor manera en la PCollection de la canalización.
  • ¿Qué quieres hacer con tus datos? Las transformaciones de núcleo en los SDK de Dataflow son de uso general y la manera en la que cambias o manipulas tus datos determinará cómo compilar las transformaciones de núcleo como ParDo, o cuándo usar transformaciones escritas con anterioridad incluidas en los SDK de Dataflow.
  • ¿Cómo se ven tus datos de salida y dónde deben ir? Eso determinará qué tipos de transformaciones de escritura necesitas aplicar al final de tu canalización.

Una canalización básica

Las canalizaciones más simples representan un flujo lineal de operaciones, como se muestra a continuación en la Figura 1:

Figura 1: Una canalización lineal.

Sin embargo, tu canalización puede ser más compleja. Una canalización representa un Grafo acíclico dirigido de pasos. Puede tener fuentes de entrada múltiples, receptores de salida múltiples y sus operaciones (transformaciones) pueden generar PCollection múltiples.

Diferentes formas de canalizaciones

En los ejemplos siguientes, se muestran algunas de las formas que puede tomar la canalización.

Ramifica PCollections

Es importante saber que las transformaciones no consumen PCollection; en su lugar, consideran cada elemento individual de una PCollection y crean una PCollection nueva como una salida. De esa manera, puedes realizar acciones diferentes en elementos diferentes de la misma PCollection.

Las transformaciones múltiples procesan la misma PCollection

Puedes usar la misma PCollection como entrada para transformaciones múltiples sin consumir la entrada o alterarla.

La canalización que se ilustra a continuación en la Figura 2 lee su entrada, nombres (strings), de una fuente única, Google BigQuery y crea una PCollection de las filas de tabla de BigQuery. Luego, la canalización aplica a transformaciones múltiples en la misma PCollection. La transformación A extrae todos los nombres en esa PCollection que comienzan con la letra “A” y la transformación B extrae todos los nombres en esa PCollection que comienzan con la letra “B”. Ambas transformaciones A y B tienen la misma entrada de PCollection.

Figura 2: Una canalización con transformaciones múltiples. Ten en cuenta que la PCollection de las filas de la tabla de BigQuery se procesa por dos transformaciones.

Una transformación que usa salidas laterales

Otra manera de ramificar una canalización es tener una sola salida de transformación para PCollection múltiples mediante salidas laterales. Las transformaciones que usan salidas laterales procesan cada elemento de la entrada una vez y te permiten generar cero o más PCollection.

En la Figura 3 que se encuentra a continuación, se ilustra el mismo ejemplo descrito antes, pero con una transformación que usa una salida lateral; los nombres que comienzan con “A” se agregan a la salida de PCollection y los nombres que comienzan con “B” a la salida lateral de PCollection.

Figura 3: Una canalización con una transformación que genera PCollections múltiples.

La canalización que se muestra en la Figura 2 contiene dos transformaciones que procesan elementos en la misma entrada de PCollection. Una transformación usa el patrón de lógica siguiente:

if (starts with 'A') { outputToPCollectionA }

mientras que la otra transformación usa:

if (starts with 'B') { outputToPCollectionB }

Debido a que cada transformación lee la entrada completa de PCollection, cada elemento en la entrada de PCollection se procesa dos veces.

La canalización que se muestra en la Figura 3 realiza la misma operación de una manera diferente, con solo una transformación que usa la lógica

if (starts with 'A') { outputToPCollectionA } else if (starts with 'B') { outputToPCollectionB }

en la que cada elemento en la entrada de PCollection se procesa una vez.

Puedes usar cualquiera de los mecanismos para producir PCollection de salidas múltiples. Sin embargo, el uso de salidas laterales es más conveniente si el cálculo por elemento de la transformación requiere mucho tiempo.

Combina PCollections

En general, después de ramificar tus PCollection en PCollection múltiples a través de transformaciones múltiples, tienes que combinar algunas o todas las PCollections resultantes. Puedes hacerlo con uno de los siguientes métodos:

  • Flatten: puedes usar la transformación Flatten en el SDK de Dataflow para combinar PCollection múltiples del mismo tipo.
  • Join: puedes usar la transformación CoGroupByKey en el SDK de Dataflow para realizar una unión relacional entre dos PCollection. Las PCollection se deben vincular (es decir, deben ser colecciones de pares clave-valor) y deben usar el mismo tipo de clave.

El ejemplo que se muestra en la Figura 4 que se encuentra a continuación es una continuación del ejemplo ilustrado en la Figura 2 de la sección anterior. Después de ramificarse en dos PCollections, una con nombres que comienzan con “A” y otra con nombres que comienzan con “B”, la canalización combina las dos en una sola PCollection que ahora contiene todos los nombres que comienzan con “A” y “B”. Aquí, es más conveniente usar Flatten debido a que las PCollections que se combinan contienen el mismo tipo.

Figura 4: Parte de una canalización que combina PCollections múltiples.

Fuentes múltiples

Tu canalización puede leer su entrada de una o más fuentes. Si tu canalización lee de fuentes múltiples y los datos de esas fuentes están relacionados, te será útil unir las entradas. En el ejemplo ilustrado a continuación en la Figura 5, la canalización lee nombres y direcciones de BigQuery y nombres y números de pedidos de Google Cloud Storage. La canalización usa CoGroupByKey para unir esta información, en la que la clave es el nombre; la PCollection resultante contiene todas las combinaciones de nombres, direcciones y pedidos.

Figura 5: Una canalización con fuentes de entrada múltiples.

Pasos siguientes

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.