Похоже, что проблема возникает, когда промежуточные результаты от шардов объединяются в конечный результат.
Давайте проверим результаты для каждого шарда (будем использовать distrib_group_by_no_merge -setting, чтобы отключить объединение промежуточных результатов для каждого сегмента):
select any(_shard_num), topK(30)(Country)
from distributed_table
SETTINGS distributed_group_by_no_merge = 1
На каждом фрагменте функция topK работает правильно, поэтому в качестве обходного пути вы можете объединить все промежуточные результаты вручную:
SELECT arrayDistinct(
arrayMap(x -> x.1,
/* sort values by frequency */
arraySort(x -> x.2,
/* converts an array of arrays to a flat array */
flatten(
/* group results from shards to one array */
groupArray(
/* assign each value the index number */
arrayMap((x, index) -> (x, index), shard_result, arrayEnumerate(shard_result))))))) ordered_value
FROM (
select topK(30)(Country) AS shard_result
from distributed_table
SETTINGS distributed_group_by_no_merge = 1)