¿Cómo obtener una lista de elementos de un PCollection en el flujo de datos de Google y usarlo en la tubería para hacer un bucle de Transformaciones de escritura?

Estoy usando Google Cloud Dataflow con el SDK de Python.

Me gustaría :

  • Obtenga una lista de fechas únicas de una colección de PC maestra
  • Recorra las fechas en esa lista para crear PCollections filtradas (cada una con una fecha única), y escriba cada PCollection filtrada en su partición en una tabla particionada en el tiempo en BigQuery.

¿Cómo puedo obtener esa lista? Después de la siguiente transformación combinada, creé un objeto ListPCollectionView pero no puedo iterar ese objeto:

class ToUniqueList(beam.CombineFn): def create_accumulator(self): return [] def add_input(self, accumulator, element): if element not in accumulator: accumulator.append(element) return accumulator def merge_accumulators(self, accumulators): return list(set(accumulators)) def extract_output(self, accumulator): return accumulator def get_list_of_dates(pcoll): return (pcoll | 'get the list of dates' >> beam.CombineGlobally(ToUniqueList())) 

¿Estoy haciendo todo mal? ¿Cuál es la mejor manera de hacer eso?

Gracias.

No es posible obtener el contenido de un PCollection directamente; un flujo de Apache Beam o flujo de datos es más como un plan de consulta de qué proceso debe realizarse, siendo PCollection un nodo intermedio lógico en el plan, en lugar de contener los datos. El progtwig principal ensambla el plan (tubería) y lo inicia.

Sin embargo, en última instancia, está intentando escribir datos en tablas BigQuery fragmentadas por fecha. Este caso de uso actualmente se admite solo en el SDK de Java y solo para canalizaciones de transmisión.

Para obtener un tratamiento más general de la escritura de datos en múltiples destinos según los datos, siga BEAM-92 .

Consulte también Crear / Escribir en la tabla BigQuery parititoned a través de Google Cloud Dataflow