Currently the backup and restore jobs process tables serially. This works well to ensure resources aren't over allocated upfront, but could be less performant for cases where there are many small tables. Instead we could parallelize the Spark jobs for each table.
It should be straightforward to use Scala futures to run multiple jobs in parallel and check their status. We could add a configuration to cap the maximum number of tables run at the same time, though maybe that isn't really needed.