code: public CompletableFuture<Void> removeEntries(String tableName, Collection<String> keys) {
          log.trace("remove entry called for : {} keys : {}", tableName, keys);
  
          List<TableKey<byte[]>> listOfKeys = keys.stream().map(x -> new TableKeyImpl<>(x.getBytes(Charsets.UTF_8), null)).collect(Collectors.toList());
          return expectingDataNotFound(withRetries(() -> segmentHelper.removeTableKeys(
                  tableName, listOfKeys, authToken.get(), RequestTag.NON_EXISTENT_ID),
                  () -> String.format("remove entries: keys: %s table: %s", keys.toString(), tableName)), null)
                  .thenAcceptAsync(v -> log.trace("entry for keys {} removed from table {}", keys, tableName), executor);
      }
docs: Removes a batch of entries from the table store. Ignores data not found exception and treats it as success.
  If table store throws dataNotFound for a subset of entries, there is no way for this method to disambiguate.
  So it is the responsibility of the caller to use this api if they are guaranteed to always attempt to
  remove same batch entries.
  @param tableName table name
  @param keys keys to delete
  @return CompletableFuture which when completed will have entries removed from the table.