The data is in several operational databases
Reading Postgres, MySQL and SQLite in one query — each in place, joined in a per-execution in-memory staging database, nothing landed — is the case this was built for. In Airflow that is an extract job, a load job and a warehouse to keep.