我想在我的Dataflow Pipeline上實現一個ParDo
Transformer,它基本上根據每個要處理的元素提供的數據查詢關係數據庫。我知道用戶定義的變換器中的每個屬性都必須是可序列化的,但要將數據查詢到數據庫,使用jdbc
我需要創建一個Connection
,它是自然不可序列化的對象。通過Google DataFlow Transformer查詢關係數據庫
在Dataflow Pipeline上下文中仍然可以這麼做嗎?
我想在我的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。
在這個問題的上下文中使用JDBC連接器是不可能的,因爲使用它作爲源是爲了讀取數據流,因此允許在初始化期間提供查詢。 這並不意味着,因此不允許根據來自另一個流的傳入元素進行查詢。 – erankl
請參閱http://stackoverflow.com/help/how-to-ask。如果某人回答「是」,而其他人回答「否」,您會接受哪一個? – zhon