Перемешать огромный стол в sql3 - PullRequest
0 голосов
/ 30 сентября 2019

В настоящее время я использую пакет python sqlite3 для доступа к данным в таблице в БД. Таблица довольно большая - около 100 ГБ - и я хочу рандомизировать ее строки, так как она содержит обучающие данные для моего NN, который должен просматривать все данные несколько раз.

В настоящее время я перебираю таблицу, используякурсор, который выбирает часть таблицы, в зависимости от моей системной памяти.

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

Есть ли простой способ сделать это или у вас есть лучшие предложения? Thx!

1 Ответ

1 голос
/ 30 сентября 2019

Этот ответ не специфичен для SQLite, так как я его мало использовал, но больше для SQL в целом.

Есть две вещи: вы заботитесь о воспроизводимых результатах или нет. Если вы этого не сделаете, вы можете сделать что-то вроде:

SELECT *
FROM my_table
ORDER BY random();

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

SELECT MD5('1001' || my_column_1 || my_column_2) as r, my_column_1, my_column_2
FROM my_table
ORDER BY r;

Конечно, это хорошо, только если значения в ваших столбцах изменяются.

Вы можете применить ограничение, например

SELECT MD5('1001' || my_key_1 || my_key_2) as r, my_key_1, my_key_2
FROM my_table
ORDER BY r
LIMIT 10000;

, чтобы получить несколько партий, а не всю таблицу.

Надеюсь, я ответил на ваш вопрос, хорошего дня!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...