我运行一个数据流作业来读取存储在GCS中的文件中的数据,每个记录都有一个“事件类型”,我的目标是按“事件类型”拆分数据并将每个输出写入bq表,现在我我正在使用过滤器来执行此操作,但是我想尝试使用GroupByKey变换,希望这可以使过程动态,因为新的事件类型将随着时间流逝而无法在开发时预测。所以现在我的挑战是,我不知道是否有可能为每个KEY构建一个WRITE转换(来自输出GroupByKey的密钥)?如果它可行,或任何其他方式可以实现这一点将是理想的,任何建议将不胜感激
答案 0 :(得分:1)
您不需要为事件类型的每个值编写变换;你只需要编写一个可以处理事件类型的所有值的转换。
GroupByKey将产生PCollection< KV< EventType,Iterable< ValueType>>。因此,此PCollection的每条记录都是一个键值对。键是EventType,值是具有此键类型的值的可迭代值。然后,您可以应用一个转换,将每个键转换为表示要在BigQuery中创建的行的TableRow。您可以通过定义:
来完成此操作ParDo<KV<EventType, Iterable<ValueType>>, TableRow>
例如,如果您的EventType是一个字符串而您的ValueType是一个字符串,那么您可能会为每个键值对发出一个包含两列的行。第一列可能只是与EventType对应的字符串,第二列可能是以逗号分隔的值列表。