Как в Oracle или Teradata разбить все строки таблицы на N равновеликие СЛУЧАЙНЫЕ выборки?
select t1. *, ntile(N) over (order by dbms_random.random) nbatch  from t1
 А дальше выбираете нужные части nbatch.
ntile в Oracle используется для построения гистограмм, поэтому +/- должен работать быстро.
Практически методом Монте-Карло помечаем числами из случайного интервала записи таблицы и берем интересуемую порцию по этой случайной метрике. Поскольку, рандом у нас по равномерному закону распределения работает, то и порцию данных вы получите примерно ожидаемой длины.
select *
from (
select t.*, dbms_random.value(0, 100) rnd
  from table t
) A
where A.rnd <= 30 -- выбираем примерно 30% случайных записей от ген. выборки