Java 通过Google DataFlow Transformer查询关系数据库
我想在我的数据流管道上实现一个Java 通过Google DataFlow Transformer查询关系数据库,java,mysql,google-cloud-dataflow,Java,Mysql,Google Cloud Dataflow,我想在我的数据流管道上实现一个ParDo转换器,它基本上是根据要处理的每个元素提供的数据查询关系数据库。我知道用户定义的转换器中的每个属性都必须是可序列化的,但要使用jdbc向数据库查询数据,我需要创建一个连接,它自然是不可序列化的对象 在数据流管道上下文中仍然可以这样做吗?是的,这是可能的。您可以使您的连接对象是暂时的,这样它就不会被序列化,并通过startBundle方法为每个bundle创建一次。处理完捆绑包中的所有元素后,可以通过finishBundle方法关闭连接 class MyDo
ParDo
转换器,它基本上是根据要处理的每个元素提供的数据查询关系数据库。我知道用户定义的转换器中的每个属性都必须是可序列化的,但要使用jdbc
向数据库查询数据,我需要创建一个连接,它自然是不可序列化的对象
在数据流管道上下文中仍然可以这样做吗?是的,这是可能的。您可以使您的连接对象是暂时的,这样它就不会被序列化,并通过startBundle
方法为每个bundle创建一次。处理完捆绑包中的所有元素后,可以通过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
}
}
类MyDoFn扩展了DoFn{
专用瞬时连接jdbc;
@设置
公共无效设置(上下文c){
jdbc=//创建连接
}
@过程元素
公共void processElement(ProcessContext c){
//查询数据库
}
@拆卸
公共无效拆卸(上下文c){
//密切联系
}
}
请参见最近添加的。请参见。如果有人回答“是”而其他人回答“否”,您会接受哪一个?在这个问题的上下文中使用JDBC连接器是不可能的,因为将它用作源意味着读取数据流,因此允许在初始化期间提供查询。这并不意味着,因此不允许基于来自另一个流的传入元素进行查询。