Как работает выборка случайных n% записей с использованием RAND () в большом запросе? - PullRequest
0 голосов
/ 06 января 2020

Я хотел бы получить помощь в понимании запроса sql в большом запросе.

Если я напишу запрос, как показано ниже, это выборка случайных 1% строк из общего числа строк, столбец которых DEP_DELAY не равен null . Без RAND() общее число строк равно 235208.

SELECT COUNT(DEP_DELAY) FROM flights.fedtzcorr WHERE RAND() < 0.1

При чтении документа он говорит, что после десятичной запятой создается пятнадцать цифр точности. Итак, буквально понимая, я думал, что RAND () создает число 15 di git между 0 и 100,000,000,000,000 ...

Эта функция генерирует значения типа Decimal с пятнадцатью точностью после десятичная точка.

Как RAND () выбирает 1% строк от общего числа строк?

Ответы [ 2 ]

1 голос
/ 06 января 2020

Обратите внимание, что документ, на который вы указали, является документацией, связанной с Dataprep, а не BigQuery:

Правильная документация :

Создает псевдослучайное значение типа FLOAT64 в диапазоне [0, 1), включительно 0 и исключая 1.

Так что RAND() генерирует число от 0 до 1. WHERE RAND() < 0.1 затем соответствует 10% строк (не 1%). Для 1% попробуйте WHERE RAND() < 0.01.

См. { ссылка } для дополнительных примеров.

0 голосов
/ 06 января 2020

Таким образом, запрос может быть следующим:

DECLARE deep_delay_count INT64;
DECLARE deep_delay_pct FLOAT64;

SET deep_delay_count = (SELECT COUNT(DISTINCT DEP_DELAY)
                        FROM flights.fedtzcorr
                        WHERE DEP_DELAY IS NOT NULL);
SET deep_delay_pct = IF(deep_delay_count IS NOT NULL, 0.01 * deep_delay_count / deep_delay_count, 0);

SELECT DISTINCT DEP_DELAY
FROM flights.fedtzcorr
WHERE DEP_DELAY IS NOT NULL
  AND RAND() < deep_delay_pct;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...