Many of my sourcetypes are in CSV format: the first line has the column names, the other lines have the actual data, e.g.:
One Splunk event is equivalent to a CSV file with many lines.
I use the multikv command to split the each multi-line event into individual events. With data models that apparently is only possible when using root searches - I cannot use pipes with constraints. Is that correct?
I am asking because the documentation stresses to use root events wherever possible.
Correct - you cannot use pipes inside object constraints. If you need the multikv command, then you need to use a search-based object. If you're not planning to accelerate your data model, you're probably fine just using the search-based object.
If not, you can use multikv.conf to set up your extractions to happen automatically. If you do this, the fields will appear in search in the format you need, and you'll be able to build a data model on top of them using event-based objects.