@Override
  public InputStreamWrapper getStream(UUID jobId, String key) {
    try {
      CloudBlobContainer reference = blobClient.getContainerReference(BLOB_CONTAINER);
      CloudBlockBlob blob = reference.getBlockBlobReference(createRowKey(jobId, key));
      return new InputStreamWrapper(blob.openInputStream(), blob.getProperties().getLength());
    } catch (StorageException | URISyntaxException e) {
      throw new MicrosoftStorageException("Error returning stream for 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