Super fast for lookups (can be as quick as using something like Redis which store in memory). Row ranges by prefix are how you can efficiently scan your data. Tables scans while not necessarily frowned upon, you should most likely try to avoid , especially for high write throughput systems since it will eat your IOPS up.
All aggregations are done outside the DB level so yes your client would most likely have to create the logic for the rollup.
Bigtable is meant for wide-column data at high volume. If your data can be organized into simple rows and columns, and you plan on using massive amounts of it at high throughout (think IoT transactions, for example), then bigtable is the right choice.
Datastore, on the other hand, is for semi-structured data, with parent/child hierarchies, key value pairs, etc. It isn't run on a cluster of nodes like bigtable, but is managed behind the scenes as part of App Engine. It is slower than bigtable, but is more sophisticated, and offers client libraries for ORMs (ndb), SQL-like queries, and the like.
There's a brief comparison chart here:
I also highly recommend the Google cloud data engineering course at Coursera:
Or the instructor's book, "
Data Science on the Google Cloud Platform: Implementing End-to-End Real-Time Data Pipelines: From Ingest to Machine Learning"
When you query bigtable you can provide column / various filters on what type of data you would like to return or truncate. The problem with that is most of the filters at the bigtable level are regex based and can be resource intensive. The better approach with bigtable is to design a table (row key) for each type of query you would want to ask the DB.