private Collection<String> getPartitionPathsByTime(long startTime, long endTime) {
   final Set<String> paths = Sets.newHashSet();
   for (PartitionFilter filter : partitionFiltersForTimeRange(startTime, endTime)) {
     super.getPartitions(
         filter,
         new PartitionedFileSetDataset.PartitionConsumer() {
           @Override
           public void consume(
               PartitionKey key, String path, @Nullable PartitionMetadata metadata) {
             paths.add(path);
           }
         });
   }
   return paths;
 }
 @Override
 public Set<TimePartitionDetail> getPartitionsByTime(long startTime, long endTime) {
   final Set<TimePartitionDetail> partitions = Sets.newHashSet();
   for (PartitionFilter filter : partitionFiltersForTimeRange(startTime, endTime)) {
     super.getPartitions(
         filter,
         new PartitionedFileSetDataset.PartitionConsumer() {
           @Override
           public void consume(
               PartitionKey key, String path, @Nullable PartitionMetadata metadata) {
             partitions.add(
                 new BasicTimePartitionDetail(
                     TimePartitionedFileSetDataset.this, path, key, metadata));
           }
         });
   }
   return partitions;
 }