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/11 04:41:01 UTC
(iceberg) branch main updated: Flink: Backport avoid per-row field getter allocation in RowDataWrapper (#17606)
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 089adca502 Flink: Backport avoid per-row field getter allocation in RowDataWrapper (#17606)
089adca502 is described below
commit 089adca502693f62e88f6137461a91ff06156be2
Author: Vova Kolmakov <wo...@gmail.com>
AuthorDate: Tue Aug 11 11:40:53 2026 +0700
Flink: Backport avoid per-row field getter allocation in RowDataWrapper (#17606)
Backports #16789
---
.../main/java/org/apache/iceberg/flink/RowDataWrapper.java | 14 +++++++++-----
.../main/java/org/apache/iceberg/flink/RowDataWrapper.java | 14 +++++++++-----
2 files changed, 18 insertions(+), 10 deletions(-)
diff --git a/flink/v1.20/flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java b/flink/v1.20/flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java
index 920e44b24b..f920959632 100644
--- a/flink/v1.20/flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java
+++ b/flink/v1.20/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
diff --git a/flink/v2.0/flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java b/flink/v2.0/flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java
index 920e44b24b..f920959632 100644
--- a/flink/v2.0/flink/src/main/java/org/apache/iceberg/flink/RowDataWrapper.java
+++ b/flink/v2.0/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