通过Google DataFlow Transformer查询关系数据库

我想在我的Dataflow Pipeline上实现ParDo Transformer,它基本上根据要处理的每个元素提供的数据查询关系数据库。 我知道用户定义的变换器中的每个属性都必须是可序列化的,但是要使用jdbc查询数据到数据库,我需要创建一个自然不可序列化的对象。

仍然可以在Dataflow Pipeline上下文中执行此操作吗?

对的,这是可能的。 您可以使Connection对象处于瞬态状态,以便不对其进行序列化,并通过startBundle方法为每个bundle创建一次。 处理完捆绑中的所有元素后,可以通过finishBundle方法关闭连接。

 class MyDoFn extends DoFn { private transient Connection jdbc; @Setup public void setup(Context c) { jdbc = // Create connection } @ProcessElement public void processElement(ProcessContext c) { // query database } @Teardown public void tearDown(Context c) { // close connection } } 

请参阅Apache Beam中最近添加的JDBC连接器 (孵化) 。