Regression in filtered aggregate for double columns
- Lingua principale
- Java
- Stelle
- 14.1k
- Fork
- 3.8k
- Merge medio
- 1g 19h
- PR unite (30g)
- 209
Descrizione
### Affected Version
Druid 29.0.1
### Description
```
SELECT
(TIME_FLOOR("__time", 'P1D', NULL, 'Asia/Calcutta')) AS "__time",
SUM(CASE WHEN "countryIsoCode" IN ('US') THEN added ELSE 0 END) AS "CASE_LONG",
SUM(CASE WHEN "countryIsoCode" IN ('US') THEN CAST(added as double) ELSE 0.0 END) AS "CASE_DOUBLE"
FROM "wikipedia"
WHERE ("__time" >= '2024-10-23T09:00:00.000Z' AND "__time" < '2024-10-30T11:00:00.000Z')
GROUP BY 1
ORDER BY "__time"
LIMIT 10001
```
If we check the query plan for above query, `CASE_LONG` aggregate gets converted to a filtered aggregator where as `CASE_DOUBLE` gets translated to a virtual column with `case_searched` expression which impacts the performance. Performance wise there is a big difference for real use case if there are multiple dimension values to check. Filtered aggregator is much faster than virtual column based aggregate with `case_searched` expression.
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia eseguendo la query SQL fornita su Druid 29.0.1 e confrontando il relativo piano di query, in particolare gli aggregati CASE_LONG e CASE_DOUBLE. Traccia il percorso del planner che traduce le espressioni SUM filtrate e determina perché l’espressione double diventa una case_searched virtual column; il lavoro è completato quando aggregati double equivalenti utilizzano il percorso filtered-aggregator più veloce senza modificare i risultati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- java, sql
- Ambito
- data, databases
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 35/100