Não usei o FME, mas tinha uma tarefa de processamento semelhante que exigia o uso de uma tarefa de processamento de 5 horas para identificar três possíveis casos de processamento para um banco de dados paralelo através de um link de rede de baixa largura de banda:
- Novos recursos a serem adicionados
- Recursos existentes a serem atualizados
- Recursos existentes a serem excluídos
Como eu tinha a garantia de que todos os recursos manteriam valores únicos de ID entre passes, eu pude:
- Execute um script de processamento que gerou uma tabela de pares {uID, checksum} nas colunas importantes da tabela atualizada
- Usaram os pares {uID, checksum} gerados na iteração anterior para transmitir atualizações para a tabela de destino com as linhas na tabela atualizada em que o uID estava IN em uma subconsulta na qual as somas de verificação não correspondiam
- Transmitir inserções da tabela atualizada que uma subconsulta de junção externa indicou possuir uIDs incomparáveis e
- Transmitiu uma lista de uIDs para excluir recursos na tabela externa que uma subconsulta de junção externa indicou que não tinha mais uIDs correspondentes na tabela atual
- Salve os pares atuais {uID, checksum} para a operação do dia seguinte
No banco de dados externo, eu apenas precisei inserir os novos recursos, atualizar os deltas, preencher uma tabela temporária de uIDs excluídos e excluir os recursos na tabela de exclusão.
Consegui automatizar esse processo para propagar centenas de alterações diárias em uma tabela de 10 milhões de linhas com um impacto mínimo na tabela de produção, usando menos de 20 minutos de tempo de execução diário. Ele foi executado com custo administrativo mínimo por vários anos sem perder a sincronização.
Embora seja certamente possível fazer comparações de N entre M linhas, o uso de um resumo / soma de verificação é uma maneira muito atraente de realizar um teste "existe" com custo muito menor.