1) what is the best and intuitive way to provide the filtering option when the column is large?
One option would be to have a “add filter” button. The user clicks it, then selects the columns to filter, then finally the filter value/range. That way, you only show a list of filter fields that the user is interested in rather than them all in one go.
Another option, each column header should have a filter button. You click the button, it shows a popup where they select the filter value/range, then they apply it (update your results). If you use this method make sure it is very clear which columns have filters applied. Perhaps make them a different colour, and/or a line of disclaimer text above/below the results saying “one or more filters are applied to these results”, for example.
2) How to provide the sorting function to the user, the best way to know is to provide the sorting when the user clicks on the header.
Sorting by clicking column header makes sense, most users know that is how to sort.
However, you can’t just sort “the current page”. You need to apply the sort to all data and then only return the data relevant to the selected page.