in paimon-format/src/main/java/org/apache/paimon/format/orc/writer/RowDataVectorizer.java [65:184]
private static void setColumn(
int rowId, ColumnVector column, DataType type, InternalRow row, int columnId) {
if (row.isNullAt(columnId)) {
column.noNulls = false;
column.isNull[rowId] = true;
return;
}
switch (type.getTypeRoot()) {
case CHAR:
case VARCHAR:
{
BytesColumnVector vector = (BytesColumnVector) column;
byte[] bytes = row.getString(columnId).toBytes();
vector.setVal(rowId, bytes, 0, bytes.length);
break;
}
case BOOLEAN:
{
LongColumnVector vector = (LongColumnVector) column;
vector.vector[rowId] = row.getBoolean(columnId) ? 1 : 0;
break;
}
case BINARY:
case VARBINARY:
{
BytesColumnVector vector = (BytesColumnVector) column;
byte[] bytes = row.getBinary(columnId);
vector.setVal(rowId, bytes, 0, bytes.length);
break;
}
case DECIMAL:
{
DecimalType dt = (DecimalType) type;
DecimalColumnVector vector = (DecimalColumnVector) column;
vector.set(
rowId,
HiveDecimal.create(
row.getDecimal(columnId, dt.getPrecision(), dt.getScale())
.toBigDecimal()));
break;
}
case TINYINT:
{
LongColumnVector vector = (LongColumnVector) column;
vector.vector[rowId] = row.getByte(columnId);
break;
}
case SMALLINT:
{
LongColumnVector vector = (LongColumnVector) column;
vector.vector[rowId] = row.getShort(columnId);
break;
}
case DATE:
case TIME_WITHOUT_TIME_ZONE:
case INTEGER:
{
LongColumnVector vector = (LongColumnVector) column;
vector.vector[rowId] = row.getInt(columnId);
break;
}
case BIGINT:
{
LongColumnVector vector = (LongColumnVector) column;
vector.vector[rowId] = row.getLong(columnId);
break;
}
case FLOAT:
{
DoubleColumnVector vector = (DoubleColumnVector) column;
vector.vector[rowId] = row.getFloat(columnId);
break;
}
case DOUBLE:
{
DoubleColumnVector vector = (DoubleColumnVector) column;
vector.vector[rowId] = row.getDouble(columnId);
break;
}
case TIMESTAMP_WITHOUT_TIME_ZONE:
{
TimestampType tt = (TimestampType) type;
Timestamp timestamp =
row.getTimestamp(columnId, tt.getPrecision()).toSQLTimestamp();
TimestampColumnVector vector = (TimestampColumnVector) column;
vector.set(rowId, timestamp);
break;
}
case TIMESTAMP_WITH_LOCAL_TIME_ZONE:
{
LocalZonedTimestampType lt = (LocalZonedTimestampType) type;
Timestamp timestamp =
row.getTimestamp(columnId, lt.getPrecision()).toSQLTimestamp();
TimestampColumnVector vector = (TimestampColumnVector) column;
vector.set(rowId, timestamp);
break;
}
case ARRAY:
{
ListColumnVector listColumnVector = (ListColumnVector) column;
setColumn(rowId, listColumnVector, type, row, columnId);
break;
}
case MAP:
{
MapColumnVector mapColumnVector = (MapColumnVector) column;
setColumn(rowId, mapColumnVector, type, row, columnId);
break;
}
case ROW:
{
StructColumnVector structColumnVector = (StructColumnVector) column;
setColumn(rowId, structColumnVector, type, row, columnId);
break;
}
default:
throw new UnsupportedOperationException("Unsupported type: " + type);
}
}