@Override
  protected void updateJob(UUID jobId, PortabilityJob job, JobUpdateValidator validator)
      throws IOException {

    Preconditions.checkNotNull(jobId, "Job is null");

    Preconditions.checkNotNull(job, "Job is null");

    try {

      CloudTable table = tableClient.getTableReference(JOB_TABLE);

      String serializedJob = configuration.getMapper().writeValueAsString(job);
      DataWrapper wrapper =
          new DataWrapper(
              configuration.getPartitionKey(),
              jobId.toString(),
              job.jobAuthorization().state().name(),
              serializedJob);

      if (validator != null) {
        PortabilityJob previousJob = findJob(jobId);
        if (previousJob == null) {
          throw new IOException("Could not find record for jobId: " + jobId);
        }

        validator.validate(previousJob, job);
      }

      TableOperation insert = TableOperation.insertOrReplace(wrapper);
      table.execute(insert);

    } catch (JsonProcessingException | StorageException | URISyntaxException e) {
      throw new IOException("Error updating job: " + jobId, e);
    }
  }
Uses the Azure Cosmos DB Table Storage API to persist job data.
extensions/cloud/portability-cloud-microsoft/src/main/java/org/datatransferproject/cloud/microsoft/cosmos/AzureTableStore.java