I'm unsure of the number of shards you require but I can provide some hopefully useful information from my own experience given that the number of required shards is closely related to the volume of data and thus size of the SQL dbs...
I am running Sitecore 10.1 with xDB split between 2 shards (the default). I struggled to get any idea of how big the xDB SQL database shards were going to be so I've just had to go with it and see how I got on.
I started with a clean xDB, rather than migrating from Mongo. It's been in production for just under 2 months now, and after approx 1.2 million sessions, each of the 2 shards is over 10GB, so 20GB in total. The size of the SQL dbs has been increasing linearly (more or less). Here's a screenshot of one of the shard DBs taken from the Azure SQL metrics blade:
This seems very large compared to the previous MongoDB iteration I had running on Sitecore 8.2. That was approx 45GB and had been running for several years, with many, many millions of sessions.
I am going to continue to monitor the situation and sincerely hope that db size growth is not linear, and starts to plateau. There is a slight curve on the graph, so I'm hopeful, but it's too early to say for sure where it will be in ~12 months. If it starts to go into TB of data then it will probably be uneconomical to continue.
Performance does not appear to be an issue with this volume of data split over 2 shards, although I am not utilizing Sitecore Analytics or any anything that particularly consumes the xDB shards for data aggregation. My use case is more about individual contact profiles and personalization. CPU, Data IO and Log IO are all basically 0% on a general purpose 4vCore elastic pool.