Is there any programmatic way to query Bigtable without using rowkey and by querying on column values directly?
I assume we can do that as external tables on BigQuery, and through the api by scanning entire Bigtable and applying filter. But is there any better way?
Bigtable is a row-based datastore where BigQuery is a column-based datastore, so there isn't a way to perform the queries you're trying to do without a full table scan or using a federated query. If this you see yourself planning to run a lot of queries like this regularly, I'd recommend duplicating your data between Bigtable and BigQuery which is a fairly common solution. You can either add a fork to your current ingestion flow or write a Dataflow job that moves your data from one to the other at a regularly scheduled interval.