We also aggregate as we go which means there's just less data around to have to store (the disadvantage being that we need to decide up front what we want to aggregate but that has been less of an issue). We can't do accurate unique counts on pre aggregated data but we've added hyperloglog into the mix as most of our use cases can tolerate a small amount of error.
We partition our MySQL tables, which means we can archive old data easily and don't need to run any repair jobs.
Disadvantages:
* Column oriented is a better fit for this kind of data (somewhat mitigated if the data isn't sparse and we store id's instead of values e.g. city_id rather than city_name).
* Schema changes are not pleasant. We found some deadlock with partitions and running alter table statements which locks up the entire server.
Advantages:
* It performs well enough for our needs
* Having SQL as a query language is very pleasant
* MySQL is well understood, which makes looking after it quite easy