Join
本文為您介紹Regular Join、Interval Join、Temporal Join和Lookup Join變更的狀態(tài)兼容性的詳情。
Regular Join
當(dāng)前不支持Regular Join相關(guān)算子的狀態(tài)遷移,因此通常任何Join相關(guān)的變更(包括Join類型、Join condition和Join輸入的Schema等),狀態(tài)都屬于不兼容變更。但如果Join等值或非等值條件發(fā)生了變更,并且變更的等值或非等值條件都可以下推到j(luò)oin的一側(cè)input,形成帶條件的calc節(jié)點(diǎn),并且在運(yùn)行參數(shù)配置中設(shè)置了table.optimizer.state-compatibility.ignore-filter: true
參數(shù),該變更屬于完全兼容。
Interval Join
當(dāng)前不支持Interval Join相關(guān)算子的狀態(tài)遷移,因此通常任何Join相關(guān)的變更(包括Join類型、Join condition、interval的大小和Join輸入的Schema等),狀態(tài)都屬于不兼容變更。但以下場(chǎng)景的變更是完全兼容:
更改時(shí)間單位,但是最終值相同。
Join等值或非等值條件發(fā)生了變更,并且變更的等值或非等值條件都可以下推到Join的一側(cè)input,形成帶條件的calc節(jié)點(diǎn),并且在運(yùn)行參數(shù)配置中設(shè)置了
table.optimizer.state-compatibility.ignore-filter: true
參數(shù)。
Temporal Join
當(dāng)前不支持temporal Join相關(guān)算子的狀態(tài)遷移,因此通常任何Join相關(guān)的變更(包括Join類型、Join condition和Join輸入的Schema等),狀態(tài)都不兼容。
Lookup Join
Lookup Join默認(rèn)為無(wú)狀態(tài)節(jié)點(diǎn),維表Lookup Join的修改不會(huì)影響算子自身的狀態(tài)兼容,但輸出改變時(shí),可能會(huì)影響下游算子的狀態(tài)兼容性。但以下兩種特殊情況會(huì)使得Lookup Join節(jié)點(diǎn)成為有狀態(tài)節(jié)點(diǎn),可能會(huì)導(dǎo)致實(shí)際無(wú)法兼容的變更被錯(cuò)誤顯示為完全兼容,在作業(yè)啟動(dòng)時(shí)報(bào)錯(cuò)無(wú)法恢復(fù):
如果您設(shè)置了作業(yè)參數(shù)
table.optimizer.non-deterministic-update.strategy: TRY_RESOLVE
,當(dāng)Flink檢測(cè)到維表Lookup Join產(chǎn)生了非確定性更新(Non-Deterministic Updates)時(shí),Lookup Join算子會(huì)啟用狀態(tài)。如果維表配置了異步參數(shù),Lookup Join算子將會(huì)啟用狀態(tài)。