本文為您介紹Regular Join、Interval Join、Temporal Join和Lookup Join變更的狀態相容性的詳情。
Regular Join
當前不支援Regular Join相關運算元的狀態遷移,因此通常任何Join相關的變更(包括Join類型、Join condition和Join輸入的Schema等),狀態都屬於不相容變更。但如果Join等值或非等值條件發生了變更,並且變更的等值或非等值條件都可以下推到join的一側input,形成帶條件的calc節點,並且在運行參數配置中設定了table.optimizer.state-compatibility.ignore-filter: true
參數,該變更屬於完全相容。
Interval Join
當前不支援Interval Join相關運算元的狀態遷移,因此通常任何Join相關的變更(包括Join類型、Join condition、interval的大小和Join輸入的Schema等),狀態都屬於不相容變更。但以下情境的變更是完全相容:
更改時間單位,但是最終值相同。
Join等值或非等值條件發生了變更,並且變更的等值或非等值條件都可以下推到Join的一側input,形成帶條件的calc節點,並且在運行參數配置中設定了
table.optimizer.state-compatibility.ignore-filter: true
參數。
Temporal Join
當前不支援temporal Join相關運算元的狀態遷移,因此通常任何Join相關的變更(包括Join類型、Join condition和Join輸入的Schema等),狀態都不相容。
Lookup Join
Lookup Join預設為無狀態節點,維表Lookup Join的修改不會影響運算元自身的狀態相容,但輸出改變時,可能會影響下遊運算元的狀態相容性。但以下兩種特殊情況會使得Lookup Join節點成為有狀態節點,可能會導致實際無法相容的變更被錯誤顯示為完全相容,在作業啟動時報錯無法恢複:
如果您設定了作業參數
table.optimizer.non-deterministic-update.strategy: TRY_RESOLVE
,當Flink檢測到維表Lookup Join產生了非確定性更新(Non-Deterministic Updates)時,Lookup Join運算元會啟用狀態。如果維表配置了非同步參數,Lookup Join運算元將會啟用狀態。