This is an automated email from the ASF dual-hosted git repository.
cwylie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/master by this push:
new 1a96bc96a6d make VirtualColumns.equivalence lazy computed (#18370)
1a96bc96a6d is described below
commit 1a96bc96a6d63d77f95247703b2b38ba5490fc60
Author: Clint Wylie <[email protected]>
AuthorDate: Tue Aug 5 16:17:42 2025 -0700
make VirtualColumns.equivalence lazy computed (#18370)
---
.../org/apache/druid/segment/VirtualColumns.java | 22 +++++++++++++++-------
1 file changed, 15 insertions(+), 7 deletions(-)
diff --git
a/processing/src/main/java/org/apache/druid/segment/VirtualColumns.java
b/processing/src/main/java/org/apache/druid/segment/VirtualColumns.java
index 676067a959f..5cff089a11e 100644
--- a/processing/src/main/java/org/apache/druid/segment/VirtualColumns.java
+++ b/processing/src/main/java/org/apache/druid/segment/VirtualColumns.java
@@ -24,6 +24,8 @@ import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonValue;
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
+import com.google.common.base.Supplier;
+import com.google.common.base.Suppliers;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
@@ -133,7 +135,7 @@ public class VirtualColumns implements Cacheable
private final List<VirtualColumn> virtualColumns;
private final List<String> virtualColumnNames;
// For equivalence
- private final Map<VirtualColumn.EquivalenceKey, VirtualColumn> equivalence;
+ private final Supplier<Map<VirtualColumn.EquivalenceKey, VirtualColumn>>
equivalence;
// For getVirtualColumn:
private final Map<String, VirtualColumn> withDotSupport;
@@ -151,15 +153,21 @@ public class VirtualColumns implements Cacheable
this.withoutDotSupport = withoutDotSupport;
this.virtualColumnNames = new ArrayList<>(virtualColumns.size());
this.hasNoDotColumns = withDotSupport.isEmpty();
- this.equivalence = Maps.newHashMapWithExpectedSize(virtualColumns.size());
for (VirtualColumn virtualColumn : virtualColumns) {
detectCycles(virtualColumn, null);
virtualColumnNames.add(virtualColumn.getOutputName());
- VirtualColumn.EquivalenceKey key = virtualColumn.getEquivalanceKey();
- if (key != null) {
- equivalence.put(key, virtualColumn);
- }
}
+ this.equivalence = Suppliers.memoize(() -> {
+ final Map<VirtualColumn.EquivalenceKey, VirtualColumn> equiv =
+ Maps.newHashMapWithExpectedSize(virtualColumns.size());
+ for (VirtualColumn virtualColumn : virtualColumns) {
+ final VirtualColumn.EquivalenceKey key =
virtualColumn.getEquivalanceKey();
+ if (key != null) {
+ equiv.putIfAbsent(key, virtualColumn);
+ }
+ }
+ return equiv;
+ });
}
/**
@@ -195,7 +203,7 @@ public class VirtualColumns implements Cacheable
@Nullable
public VirtualColumn findEquivalent(VirtualColumn virtualColumn)
{
- return equivalence.get(virtualColumn.getEquivalanceKey());
+ return equivalence.get().get(virtualColumn.getEquivalanceKey());
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]