Great Question, I also had a similar problem and ended up using an ELT process where all the core tables were uploaded into a "Staging Dataset" once a day and from there we created tables like "Customer" joined with "Orders " (Nested field can here create more efficiency). We realized that through the Data Transfer Service it can handle big amout of data very well (also once a day). So expensive joins only take place once a day. Also we had the advantage of having all the core data in the staging area for ML or for restoring needs.