Hi,
非常感謝你的回覆。但我認為子查詢可能沒有辦法滿足我想要的功能,原因是 sql optimizar 會
嘗試做 where condition pushdown,其結果會跟原本的 sql 相似。
我在 user mailing list 上問了相同的問題,並得到了一個可行的解法 [1],給你參考看看。
Best,
Tony Wei
[1]
http://apache-flink-user-mailing-list-archive.2336050.n4.nabble.com/Is-it-possible-to-decide-the-order-of-where-condition
不太清楚能否直接实现你说的这种功能。不过,你可以换一种思路,比如用子查询:
select * from ( select * from (select *, if(user.is_robot,0, 1) flag
from users) tab_a where flag=1) tab_b where UDF_NEED_TO_QUERY_DB(user)
shicheng31...@gmail.com
发件人: Tony Wei
发送时间: 2019-07-27 00:37
收件人: user-zh
主题: 請問在 Flink SQL 上能不能指定
Hi,
想請問是否有辦法在 Flink SQL 上指明 WHERE 裡的判斷式的執行順序,來做到一些特定情況下的
查詢優化?
舉例來說,在下面的 SQL,假如有個很耗時的 UDF 需要每次都去查詢資料庫。在這樣的狀況下,
如果可以確保優先執行 `!user.is_robot` 的判斷,再去執行後面的 UDF 的話,就能減少許多的資料
庫查詢。因為那些在 `user.is_robot` 裡得到 `true` 的數據就可以提早被丟棄,而不用去執行後面
較為花費時間的 UDF 了。
select *
from users
where !user.is_robot and UDF_NEED