Документация говорит, что TABLESAMPLE (n PERCENT)
позволит Hive подобрать как минимум n% размера данных ( обратите внимание, что это не обязательно означает количество строк ) в качестве входных данных.Если мы не сможем сэмплировать его, входом задания MapReduce будет вся таблица / раздел.Мы делаем это на уровне блоков HDFS, чтобы размер выборки составлял размер блока .Например, если размер блока составляет 256 МБ, даже если n% от входного размера составляет всего 100 МБ, вы получите 256 МБ данных.
К сожалению, это не гарантирует выборку каждый раз одинаковых блоков, всего row_countможет варьироваться.
Я предлагаю увеличить процент и добавить limit n
, чтобы гарантировать n возвращаемых строк.Или просто используйте limit n
:
select * from test tablesample(5 percent) limit 100; --may perform faster
или
select * from test limit 100;
Лимит, конечно, работает менее эффективно, чем табличная выборка, потому что лимит работает на редукторе, может быть, как табличная выборка, так и лимит в сочетании обеспечат приемлемую производительность.