¿Algun consejo sobre como abordar esto y hacerlo mas eficiente?
Pues como dicen arriba primero encontrad el cuello de botella...
Si vosotros no sabéis donde esta... Como te vamos a ayudar? No sabemos ni como es la relación, ni los datos, ni los indicies, ni los tiempos de cada paso de la pipeline... Ni siquiera te podemos decir si usar una sql esta bien para el caso de uso que has explicado, que para empezar es la primera decision que habéis tomado, porque no has explicado nada del caso de uso.
A ojo y suponiendo que usas el termino "relaciones" como indices es mejor dumpear y luego indexar. Suponiendo que vuestra tabla esta bien definida (me lo tienes que decir tu) y suponiendo que vuestra pipeline esta bien escrita en stream (que también lo tendrías que haber dicho tu) y que solo bloqueas en IO (me lo tienes que decir tu) y sincronizar tus mini batches (si son realmente necesarios estas prerelaciones, me lo tienes que decir tu).
Suponiendo que lo habéis hecho todo bien y sabéis lo que hacéis. Stremea e inserta en los batches mínimos, sincronizando lo mínimo mejor nada, y luego indices. Pues lo normal no? Existe otra manera de hacer esto?
Son unos 550tb de base de datos cuanto tiempo debería tardar?
No se, nadie aquí te podrá ayudar con esa pregunta. https://xyproblem.info/
PS: En python hay que usar el ecosistema de streaming. porque por defecto nada funcionara en stream y se te bloqueara todo. mirate pyspark y connectores para tu base de datos relacional... y busca tutoriales de big data / streaming python spark "tu base de datos relacional" porque te harán lo que te digo que hay que hacer.