通过Google DataFlow Transformer查询关系数据库
问题描述:
我想在我的Dataflow Pipeline上实现一个ParDo
Transformer,它基本上根据每个要处理的元素提供的数据查询关系数据库。我知道用户定义的变换器中的每个属性都必须是可序列化的,但要将数据查询到数据库,使用jdbc
我需要创建一个Connection
,它是自然不可序列化的对象。通过Google DataFlow Transformer查询关系数据库
在Dataflow Pipeline上下文中仍然可以这么做吗?
答
是的,这是可能的。你可以使你的Connection对象是暂态的,这样它就不会被序列化,并且通过startBundle
方法在每个包中创建一次。一旦处理了包中的所有元素,就可以通过finishBundle
方法关闭连接。
class MyDoFn extends DoFn<X, Y> {
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 (incubating)添加JDBC connector。
+0
在这个问题的上下文中使用JDBC连接器是不可能的,因为使用它作为源是为了读取数据流,因此允许在初始化期间提供查询。 这并不意味着,因此不允许根据来自另一个流的传入元素进行查询。 – erankl
请参阅http://*.com/help/how-to-ask。如果某人回答“是”,而其他人回答“否”,您会接受哪一个? – zhon