@Override
  public UUID findFirst(JobAuthorization.State jobState) {
    try {
      String partitionFilter =
          generateFilterCondition(
              "PartitionKey", TableQuery.QueryComparisons.EQUAL, configuration.getPartitionKey());
      String stateFilter =
          generateFilterCondition(
              "State",
              TableQuery.QueryComparisons.EQUAL,
              jobState.name()); // properties are converted to capitalized by the storage API

      String combinedFilter =
          TableQuery.combineFilters(partitionFilter, TableQuery.Operators.AND, stateFilter);

      TableQuery<DataWrapper> query =
          TableQuery.from(DataWrapper.class).where(combinedFilter).take(1);

      CloudTable table = tableClient.getTableReference(JOB_TABLE);
      Iterator<DataWrapper> iter = table.execute(query).iterator();
      if (!iter.hasNext()) {
        return null;
      }
      return UUID.fromString(iter.next().getRowKey());
    } catch (StorageException | URISyntaxException e) {
      throw new MicrosoftStorageException("Error finding first job", 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