public static FormatInfo deriveFormatInfo(LogicalType logicalType) {
        if (logicalType instanceof VarCharType) {
            return StringFormatInfo.INSTANCE;
        } else if (logicalType instanceof BooleanType) {
            return BooleanFormatInfo.INSTANCE;
        } else if (logicalType instanceof TinyIntType) {
            return ByteFormatInfo.INSTANCE;
        } else if (logicalType instanceof SmallIntType) {
            return ShortFormatInfo.INSTANCE;
        } else if (logicalType instanceof IntType) {
            return IntFormatInfo.INSTANCE;
        } else if (logicalType instanceof BigIntType) {
            return LongFormatInfo.INSTANCE;
        } else if (logicalType instanceof FloatType) {
            return FloatFormatInfo.INSTANCE;
        } else if (logicalType instanceof DoubleType) {
            return DoubleFormatInfo.INSTANCE;
        } else if (logicalType instanceof DecimalType) {
            return DecimalFormatInfo.INSTANCE;
        } else if (logicalType instanceof DateType) {
            return new DateFormatInfo();
        } else if (logicalType instanceof TimeType) {
            return new TimeFormatInfo();
        } else if (logicalType instanceof TimestampType) {
            return new TimestampFormatInfo();
        } else if (logicalType instanceof LocalZonedTimestampType) {
            return new LocalZonedTimestampFormatInfo();
        } else if (logicalType instanceof ArrayType) {
            ArrayType arrayType = (ArrayType) logicalType;
            LogicalType elementType = arrayType.getElementType();

            FormatInfo elementFormatInfo = deriveFormatInfo(elementType);

            return new ArrayFormatInfo(elementFormatInfo);
        } else if (logicalType instanceof MapType) {
            MapType mapType = (MapType) logicalType;
            LogicalType keyType = mapType.getKeyType();
            LogicalType valueType = mapType.getValueType();

            FormatInfo keyFormatInfo = deriveFormatInfo(keyType);
            FormatInfo valueFormatInfo = deriveFormatInfo(valueType);

            return new MapFormatInfo(keyFormatInfo, valueFormatInfo);
        } else if (logicalType instanceof RowType) {
            RowType rowType = (RowType) logicalType;
            List<RowType.RowField> rowFields = rowType.getFields();

            String[] fieldNames = new String[rowFields.size()];
            FormatInfo[] fieldFormatInfos = new FormatInfo[rowFields.size()];

            for (int i = 0; i < rowFields.size(); ++i) {
                RowType.RowField rowField = rowFields.get(i);

                fieldNames[i] = rowField.getName();
                fieldFormatInfos[i] = deriveFormatInfo(rowField.getType());
            }

            return new RowFormatInfo(fieldNames, fieldFormatInfos);
        } else if (logicalType instanceof BinaryType) {
            return BinaryFormatInfo.INSTANCE;
        } else if (logicalType instanceof VarBinaryType) {
            return VarBinaryFormatInfo.INSTANCE;
        } else if (logicalType instanceof NullType) {
            return NullFormatInfo.INSTANCE;
        } else {
            throw new IllegalArgumentException(String.format("not found logicalType %s",
                    logicalType == null ? "null" : logicalType.toString()));
        }
    }
Derive the format information for the given type.

@param logicalType The type whose format is derived.
@return The format information for the given type.
inlong-sort/sort-formats/format-common/src/main/java/org/apache/inlong/sort/formats/base/TableFormatUtils.java