It seems MaterializeMySQL doesn't support Decimal data type when doing replication.
else if (typeid_cast<const DataTypeFloat32 *>(type))
            types.emplace_back(ValueType::vtFloat32, is_nullable);
        else if (typeid_cast<const DataTypeFloat64 *>(type))
            types.emplace_back(ValueType::vtFloat64, is_nullable);
        else if (typeid_cast<const DataTypeString *>(type))
            types.emplace_back(ValueType::vtString, is_nullable);
        else if (typeid_cast<const DataTypeDate *>(type))
            types.emplace_back(ValueType::vtDate, is_nullable);
        else if (typeid_cast<const DataTypeDateTime *>(type))
            types.emplace_back(ValueType::vtDateTime, is_nullable);
        else if (typeid_cast<const DataTypeUUID *>(type))
            types.emplace_back(ValueType::vtUUID, is_nullable);
        else if (typeid_cast<const DataTypeEnum8 *>(type))
            types.emplace_back(ValueType::vtString, is_nullable);
        else if (typeid_cast<const DataTypeEnum16 *>(type))
            types.emplace_back(ValueType::vtString, is_nullable);
        else if (typeid_cast<const DataTypeDateTime64 *>(type))
            types.emplace_back(ValueType::vtDateTime64, is_nullable);
        else if (typeid_cast<const DataTypeDecimal<Decimal32> *>(type))
            types.emplace_back(ValueType::vtDecimal32, is_nullable);
        else if (typeid_cast<const DataTypeDecimal<Decimal64> *>(type))
            types.emplace_back(ValueType::vtDecimal64, is_nullable);
        else if (typeid_cast<const DataTypeDecimal<Decimal128> *>(type))
            types.emplace_back(ValueType::vtDecimal128, is_nullable);
        else
            throw Exception{"Unsupported type " + type->getName(), ErrorCodes::UNKNOWN_TYPE};
    }
}
}