You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by su...@apache.org on 2022/02/15 18:09:06 UTC

[druid] branch master updated: perf: cache row if it is a transformed row (#12113)

This is an automated email from the ASF dual-hosted git repository.

suneet 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 26bc4b7  perf: cache row if it is a transformed row (#12113)
26bc4b7 is described below

commit 26bc4b734597480bf1185559baf7644086f24d52
Author: Jason Koch <jk...@netflix.com>
AuthorDate: Tue Feb 15 10:08:41 2022 -0800

    perf: cache row if it is a transformed row (#12113)
    
    * perf: cache row if it is a transformed row
    
    * perf: cache row if it is a transformed row (also cache DateTime object)
---
 .../druid/segment/transform/Transformer.java       | 27 ++++++++++++++--------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/processing/src/main/java/org/apache/druid/segment/transform/Transformer.java b/processing/src/main/java/org/apache/druid/segment/transform/Transformer.java
index 78b40f4..7490d15 100644
--- a/processing/src/main/java/org/apache/druid/segment/transform/Transformer.java
+++ b/processing/src/main/java/org/apache/druid/segment/transform/Transformer.java
@@ -146,10 +146,15 @@ public class Transformer
     private final InputRow row;
     private final Map<String, RowFunction> transforms;
 
+    // cached column, because it will be read frequently
+    private final DateTime timestamp;
+
     public TransformedInputRow(final InputRow row, final Map<String, RowFunction> transforms)
     {
       this.row = row;
       this.transforms = transforms;
+
+      this.timestamp = readTimestampFromRow(row, transforms);
     }
 
     @Override
@@ -158,27 +163,29 @@ public class Transformer
       return row.getDimensions();
     }
 
-    @Override
-    public long getTimestampFromEpoch()
+    static DateTime readTimestampFromRow(final InputRow row, final Map<String, RowFunction> transforms)
     {
       final RowFunction transform = transforms.get(ColumnHolder.TIME_COLUMN_NAME);
+      final long ts;
       if (transform != null) {
         //noinspection ConstantConditions time column is never null
-        return Rows.objectToNumber(ColumnHolder.TIME_COLUMN_NAME, transform.eval(row), true).longValue();
+        ts = Rows.objectToNumber(ColumnHolder.TIME_COLUMN_NAME, transform.eval(row), true).longValue();
       } else {
-        return row.getTimestampFromEpoch();
+        ts = row.getTimestampFromEpoch();
       }
+      return DateTimes.utc(ts);
+    }
+
+    @Override
+    public long getTimestampFromEpoch()
+    {
+      return timestamp.getMillis();
     }
 
     @Override
     public DateTime getTimestamp()
     {
-      final RowFunction transform = transforms.get(ColumnHolder.TIME_COLUMN_NAME);
-      if (transform != null) {
-        return DateTimes.utc(getTimestampFromEpoch());
-      } else {
-        return row.getTimestamp();
-      }
+      return timestamp;
     }
 
     @Override

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org