Вопрос

Мне нужен обзор для моего решения для отбора 100 случайных строк из таблицы, хранящейся на машине MPP (в настоящее время Netezza, позже может быть Hadoop/и т. Д.)

Я не заинтересован в использовании Rand () Netezza (), так как я хотел бы иметь возможность воспроизводить тот же образцы позже, и я не рассчитываю на SetSeed ().

Решение, которое я использую сейчас, это:

SELECT * FROM MY_TABLE ORDER BY ID % 371, ID % 17, ID % 501, ID LIMIT 100

Где 3 числа - простые числа, которые я генерирую по своему собственному RNG. Я на правильном пути? Это «случайная» выборка достаточно случайной?

Примечание: мне не нужно, чтобы это было крипто -сильным случайным образцом, я просто хочу убедиться, что я каждый раз выбираю другой образец, и я выбор Выполнение того же SQL), если это необходимо.

Спасибо!

Это было полезно?

Решение

Я бы не стал пытаться генерировать случайные числа в SQL, когда так легко получить некоторые реальные случайные числа, закрепить их в таблицу или в хранимую процедуру.

Перейти к https://www.fourmilab.ch/hotbits/secure_generate.html Чтобы получить 256 случайных битов в HEX, группируйте цифры 4 за раз, преобразуйте в десятичные целые числа, а затем используйте первые 100 чисел в качестве ключей.

У вас будет повторяемая последовательность, и вы можете сделать столько действительно случайных последовательностей, сколько вам нужно.

Если вам нужны повторяемые псевдоходовые числа с равномерным распределением, применяется тот же принцип. Просто используйте другой источник для чисел. Например, вы можете написать сценарий Python, который использует включенный random модуль для генерации ваших чисел.

Что касается SQL для использования, если вы правильно структурируете свой БД, это просто. В этом случае, поскольку я разрабатываю случайную таблицу один раз и использую ее для запросов более одного раза, я бы создавал таблицу, чтобы содержать первичные ключи, а не только случайные числа, которые генерируются. Или, если бы я собирался повторить это с разными наборами чисел, я бы построил таблицу отношений (например, в моделировании ER), которая связывает таблицу случайных чисел с таблицей, которую я отбираю. Я бы не стал бы заставлять все в SQL, но создаю таблицу случайных чисел и создаю таблицу отношений, используя язык сценариев.

В примере, который вы приведете выше, вам нужны 100 образцов, поэтому таблица случайной выборки будет содержать 100 первичных ключей, выбранных внешним сценарием. Каждый раз, когда вы запускаете выборку, вы получаете одинаковые записи, пока не измените таблицу случайных отборов. Чтобы изменить таблицу, сбросьте первичные клавиши таблицы, которую вы хотите пробрать, затем запустите сценарий, чтобы случайным образом выбрать 100, генерируя 100 чисел между 1 и общим количеством первичных ключей. Если вы используете такой инструмент, как Python, вы можете получить равномерные случайные числа, гамма -распределение, гауссов, нормы, парето и другие.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top