Apache Superset查询Google Sheets时组合过滤条件报错求助
解决Shillelagh连接Google Sheets时组合过滤条件报错的问题
问题背景
通过Shillelagh在Apache Superset中连接Google Sheets,当同时使用Deadline IS NOT NULL和Deadline < DATE('2021-12-31')两个过滤条件时,触发gsheets error: No valid filter found错误,但单独使用任一条件均可正常运行。
核心原因
Shillelagh需要将SQL过滤条件转换为Google Sheets API支持的过滤规则,而Google Sheets API不支持同时包含NULL判断和日期比较的复合过滤表达式,导致转换失败报错。
可行解决方案
方案1:子查询分步过滤
先通过子查询筛选出非空的截止日期记录,再在外层做日期比较:
SELECT * FROM ( SELECT * FROM "https://docs.google.com/spreadsheets/d/****" WHERE Deadline IS NOT NULL ) AS non_null_deadlines WHERE Deadline < DATE('2021-12-31')
这种方式拆分了过滤逻辑,让Shillelagh能分别处理两个简单条件,避免复合条件的转换问题。
方案2:用COALESCE统一空值处理
将空值替换为一个远大于目标日期的虚拟值,合并成单一过滤条件:
SELECT * FROM "https://docs.google.com/spreadsheets/d/****" WHERE COALESCE(Deadline, DATE('9999-12-31')) < DATE('2021-12-31')
空值被转为9999-12-31后不会满足小于2021-12-31的条件,最终结果等价于“非空且日期逾期”的需求,同时避开了复合条件的转换问题。
补充说明
单独使用Deadline < DATE('2021-12-31')返回空值行,是因为Google Sheets API将空值视为“小于任何日期”处理,这和SQL的逻辑不一致,也是需要额外过滤空值的原因。
内容的提问来源于stack exchange,提问作者Anja V.
相关产品推荐
相关产品推荐

