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