You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by pv...@apache.org on 2026/08/10 15:10:52 UTC

(iceberg) branch main updated: Flink: Avoid per-row field getter allocation in RowDataWrapper (#16789)

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

pvary pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg.git


The following commit(s) were added to refs/heads/main by this push:
     new ee9288f5d8 Flink: Avoid per-row field getter allocation in RowDataWrapper (#16789)
ee9288f5d8 is described below

commit ee9288f5d88ebb2f111ca0756ba801946812d321
Author: Vova Kolmakov <wo...@gmail.com>
AuthorDate: Mon Aug 10 22:10:46 2026 +0700

    Flink: Avoid per-row field getter allocation in RowDataWrapper (#16789)
---
 .../main/java/org/apache/iceberg/flink/RowDataWrapper.java | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/flink/v2.1/flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java b/flink/v2.1/flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java
index 920e44b24b..f920959632 100644
--- a/flink/v2.1/flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java
+++ b/flink/v2.1/flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java
@@ -48,7 +48,14 @@ public class RowDataWrapper implements StructLike {
 
     for (int i = 0; i < size; i++) {
       types[i] = rowType.getTypeAt(i);
-      getters[i] = buildGetter(types[i], struct.fields().get(i).type());
+      PositionalGetter<?> getter = buildGetter(types[i], struct.fields().get(i).type());
+      if (getter == null) {
+        // Pre-build the Flink field getter once instead of recreating it on every access.
+        RowData.FieldGetter fieldGetter = FlinkRowData.createFieldGetter(types[i], i);
+        getter = (row, pos) -> fieldGetter.getFieldOrNull(row);
+      }
+
+      getters[i] = getter;
     }
   }
 
@@ -66,12 +73,9 @@ public class RowDataWrapper implements StructLike {
   public <T> T get(int pos, Class<T> javaClass) {
     if (rowData.isNullAt(pos)) {
       return null;
-    } else if (getters[pos] != null) {
-      return javaClass.cast(getters[pos].get(rowData, pos));
     }
 
-    Object value = FlinkRowData.createFieldGetter(types[pos], pos).getFieldOrNull(rowData);
-    return javaClass.cast(value);
+    return javaClass.cast(getters[pos].get(rowData, pos));
   }
 
   @Override