Skip to content

Commit 44932ea

Browse files
authored
[Fix-4313] Fix Array type in paimon query did not show the value (#4429)
1 parent ed5b1b1 commit 44932ea

1 file changed

Lines changed: 35 additions & 0 deletions

File tree

dinky-metadata/dinky-metadata-paimon/src/main/java/org/dinky/metadata/convert/PaimonTypeConvert.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@
2727

2828
import org.apache.paimon.data.GenericRow;
2929
import org.apache.paimon.data.InternalRow;
30+
import org.apache.paimon.data.columnar.ColumnarArray;
31+
import org.apache.paimon.types.ArrayType;
3032
import org.apache.paimon.types.DataField;
3133
import org.apache.paimon.types.DataTypeRoot;
3234
import org.apache.paimon.types.DecimalType;
@@ -107,6 +109,39 @@ public static Object getRowDataSafe(DataField fieldType, InternalRow row, int or
107109
return row.getTimestamp(ordinal, timestampType.getPrecision()).toLocalDateTime();
108110
case ARRAY:
109111
case MULTISET:
112+
if (row.getArray(ordinal) instanceof ColumnarArray) {
113+
ColumnarArray columnarArray = (ColumnarArray) row.getArray(ordinal);
114+
ArrayType arrayType = (ArrayType) fieldType.type();
115+
boolean isString = true;
116+
switch (arrayType.getElementType().asSQLString().toUpperCase()) {
117+
case "SHORT":
118+
case "TINYINT":
119+
case "INT":
120+
case "BIGINT":
121+
case "FLOAT":
122+
case "DOUBLE":
123+
case "DECIMAL":
124+
isString = false;
125+
break;
126+
default:
127+
break;
128+
}
129+
StringBuilder columnarArrayStringBuild = new StringBuilder("[ ");
130+
for (int i = 0; i < columnarArray.size(); i++) {
131+
if (i > 0) {
132+
columnarArrayStringBuild.append(", ");
133+
}
134+
if (isString) {
135+
columnarArrayStringBuild.append("\"");
136+
}
137+
columnarArrayStringBuild.append(columnarArray.getString(i));
138+
if (isString) {
139+
columnarArrayStringBuild.append("\"");
140+
}
141+
}
142+
columnarArrayStringBuild.append(" ]");
143+
return columnarArrayStringBuild.toString();
144+
}
110145
return row.getArray(ordinal).toString();
111146
case MAP:
112147
return row.getMap(ordinal).toString();

0 commit comments

Comments
 (0)