Unnecessary cartesian explosion if multi-value column is reused in expression
- Dominant language
- Java
- Stars
- 14.1k
- Forks
- 3.8k
- Avg merge
- 2d 58m
- Merged PRs (30d)
- 233
Description
### Affected Version
Druid 0.16, 0.15
### Description
With this dataset (as `fs`):
```json
{"time":"2019-08-14T00:00:00.000Z","srcGroups":["x","y","z"],"dstGroups":["a","b","c","d"]}
{"time":"2019-08-14T00:00:00.000Z","srcGroups":["x","y","z"],"dstGroups":["a","c","d"]}
{"time":"2019-08-14T00:00:00.000Z","srcGroups":["x","y","z"],"dstGroups":["a","g"]}
```
Doing this query:
```sql
SELECT
CASE "dstGroups"
WHEN 'b' THEN 'b'
WHEN 'g' THEN 'g'
ELSE 'Other'
END AS "dst",
COUNT(*) AS "Count"
FROM "fs"
GROUP BY 1
ORDER BY "Count" DESC
```
Yields an unexpected cartesian explosion:

This is due to this expression in the underlying plan:
`"case_searched((\"dstGroups\" == 'b'),'b',(\"dstGroups\" == 'g'),'g','Other')"`
Which triggers a cartesian product on the same column `dstGroups` which it should not do.
Contributor guide
Research direction
Reproduce the issue with the provided fs dataset and SQL query, then inspect the generated plan containing the case_searched expression. Trace why reusing dstGroups creates a cartesian product; done means the query returns expected grouped counts without that explosion.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, sql
- Domain
- databases
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100