apache / apache/druid

Regression in filtered aggregate for double columns

Aperta
#17,455 2 commenti 0 reazioni 0 assegnatari Vedi su GitHub
Area - Querying Performance
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

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.