These are good reasons to use a bitemporal database [1].
A log gives you "transaction time" but you need to create an efficient representation of "valid time" for backfilling and corrections.
[1] https://en.wikipedia.org/wiki/Temporal_database
Disclosure: I work on a database for Kafka that provides point-in-time bitemporal Datalog queries https://github.com/juxt/crux