Enable vectorized virtual column processing by default. (#12520)
authorGian Merlino <gianmerlino@gmail.com>
Mon, 16 May 2022 10:13:53 +0000 (03:13 -0700)
committerGitHub <noreply@github.com>
Mon, 16 May 2022 10:13:53 +0000 (15:43 +0530)
commit5b6727f3195ac9bad906e3416bf8997b069c222f
treed1bec1c5456409e8588e3e205346b344061a7811
parentc33ff1c745def3844c5f78007999a2bbdf676ba1
Enable vectorized virtual column processing by default. (#12520)

In the majority of cases, this improves performance.

There's only one case I'm aware of where this may be a net negative: for time_floor(__time, <period>) where there are many repeated __time values. In nonvectorized processing, SingleLongInputCachingExpressionColumnValueSelector implements an optimization to avoid computing the time_floor function on every row. There is no such optimization in vectorized processing.

IMO, we shouldn't mention this in the docs. Rationale: It's too fiddly of a thing: it's not guaranteed that nonvectorized processing will be faster due to the optimization, because it would have to overcome the inherent speed advantage of vectorization. So it'd always require testing to determine the best setting for a specific dataset. It would be bad if users disabled vectorization thinking it would speed up their queries, and it actually slowed them down. And even if users do their own testing, at some point in the future we'll implement the optimization for vectorized processing too, and it's likely that users that explicitly disabled vectorization will continue to have it disabled. I'd like to avoid this outcome by encouraging all users to enable vectorization at all times. Really advanced users would be following development activity anyway, and can read this issue
docs/querying/query-context.md
processing/src/main/java/org/apache/druid/query/QueryContexts.java
processing/src/test/java/org/apache/druid/segment/virtual/VectorizedVirtualColumnTest.java