### Question:
MetastoreHiveStatisticsProvider implements HiveStatisticsProvider { @VisibleForTesting static List<HivePartition> getPartitionsSample(List<HivePartition> partitions, int sampleSize) { checkArgument(sampleSize > 0, "sampleSize is expected to be greater than zero"); if (partitions.size() <= sampleSize) { return partitions; } List<HivePartition> result = new ArrayList<>(); int samplesLeft = sampleSize; HivePartition min = partitions.get(0); HivePartition max = partitions.get(0); for (HivePartition partition : partitions) { if (partition.getPartitionId().compareTo(min.getPartitionId()) < 0) { min = partition; } else if (partition.getPartitionId().compareTo(max.getPartitionId()) > 0) { max = partition; } } result.add(min); samplesLeft--; if (samplesLeft > 0) { result.add(max); samplesLeft--; } if (samplesLeft > 0) { HashFunction hashFunction = murmur3_128(); Comparator<Map.Entry<HivePartition, Long>> hashComparator = Comparator .<Map.Entry<HivePartition, Long>, Long>comparing(Map.Entry::getValue) .thenComparing(entry -> entry.getKey().getPartitionId()); partitions.stream() .filter(partition -> !result.contains(partition)) .map(partition -> immutableEntry(partition, hashFunction.hashUnencodedChars(partition.getPartitionId()).asLong())) .sorted(hashComparator) .limit(samplesLeft) .forEachOrdered(entry -> result.add(entry.getKey())); } return unmodifiableList(result); } MetastoreHiveStatisticsProvider(SemiTransactionalHiveMetastore metastore); @VisibleForTesting  MetastoreHiveStatisticsProvider(PartitionsStatisticsProvider statisticsProvider); @Override TableStatistics getTableStatistics(
            ConnectorSession session,
            SchemaTableName table,
            Map<String, ColumnHandle> columns,
            Map<String, Type> columnTypes,
            List<HivePartition> partitions); static OptionalDouble convertPartitionValueToDouble(Type type, Object value);  }### Answer:
@Test public void testGetPartitionsSample() { HivePartition p1 = partition("p1=string1/p2=1234"); HivePartition p2 = partition("p1=string2/p2=2345"); HivePartition p3 = partition("p1=string3/p2=3456"); HivePartition p4 = partition("p1=string4/p2=4567"); HivePartition p5 = partition("p1=string5/p2=5678"); assertEquals(getPartitionsSample(ImmutableList.of(p1), 1), ImmutableList.of(p1)); assertEquals(getPartitionsSample(ImmutableList.of(p1), 2), ImmutableList.of(p1)); assertEquals(getPartitionsSample(ImmutableList.of(p1, p2), 2), ImmutableList.of(p1, p2)); assertEquals(getPartitionsSample(ImmutableList.of(p1, p2, p3), 2), ImmutableList.of(p1, p3)); assertEquals(getPartitionsSample(ImmutableList.of(p1, p2, p3, p4), 1), getPartitionsSample(ImmutableList.of(p1, p2, p3, p4), 1)); assertEquals(getPartitionsSample(ImmutableList.of(p1, p2, p3, p4), 3), getPartitionsSample(ImmutableList.of(p1, p2, p3, p4), 3)); assertEquals(getPartitionsSample(ImmutableList.of(p1, p2, p3, p4, p5), 3), ImmutableList.of(p1, p5, p4)); }