不太清楚能否直接实现你说的这种功能。不过,你可以换一种思路,比如用子查询:
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)
[hidden email]
发件人: Tony Wei
发送时间: 2019-07-27 00:37
收件人: user-zh
主题: 請問在 Flink SQL 上能不能指定 WHERE 裡的判斷式的執行順序?
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_TO_QUERY_DB(user)
謝謝大家的幫忙。
Best regards,
Tony Wei