cube icon indicating copy to clipboard operation
cube copied to clipboard

Cannot use a condition with static comparison

Open alexbadm opened this issue 4 months ago • 2 comments

Failed SQL

SELECT
  date_trunc('month', created_at) AS "time",
  count(total_count) AS "Count"
FROM talents
WHERE
  created_at >= '2019-08-31T22:00:00Z'
  AND created_at <= '2024-03-07T13:39:28.923Z'
  AND ('ALL' = 'Armenia' OR country IN ('Armenia'))
GROUP BY 1
ORDER BY 1

Logical Plan Search for Can't rewrite plan log message.

Error during rewrite: Can't detect Cube query and it may be not supported yet. Please check logs for additional information.

Version: v0.34.25

Additional context The query fails when I add AND ('ALL' = $COUNTRIES OR country IN ($COUNTRIES)) The $COUNTRIES is a variable in Grafana, which is query select distinct country from talents and "Include All option" is enabled. When I select some countries it works fine:

select
  date_trunc('month', created_at) "time",
  count(total_count) "Count"
from
  talents
where
  created_at >= '2019-08-31T22:00:00Z' and created_at <= '2024-03-07T13:49:15.895Z'
  and country in ('Australia','Austria')
group by 1
order by 1

When I select the All option, I get the error:

Error during rewrite: Can't find rewrite due to 10081 AST node limit reached. Please check logs for additional information.

The countries number is slightly above 100 and cube server fails to perform this query.

And my attempt to overcome this limitation is:

  • to specify Custom all value in grafana ('ALL')
  • to avoid the field comparison by defining logical operator ('ALL' = $COUNTRIES OR country IN ($COUNTRIES))

But this also fails for cube. Although such a query works to psql directly:

select count(*) from analytics.talents where ('ALL' = 'ALL' or country in ('ALL'));
select count(*) from analytics.talents where ('ALL' = 'Austria' or country in ('Austria'));

Both return result. The first is equivalent to select count(*) from analytics.talents; and the second is equivalent to select count(*) from analytics.talents where country in ('Austria');

alexbadm avatar Mar 07 '24 14:03 alexbadm

Hi @alexbadm 👋 Could you please check the advice in this issue? I think it's quite similar to yours: https://github.com/cube-js/cube/issues/6307

igorlukanin avatar Mar 20 '24 15:03 igorlukanin

@alexbadm Did my advice help?

igorlukanin avatar May 14 '24 10:05 igorlukanin