我目前正在使用sqlite3 python包来访问数据库中表中的数据。 该表非常大-大约100GB-,我想将其行随机化,因为它包含我的NN的训练数据,该数据需要多次查看整个数据。
当前,我正在使用游标遍历表,该游标将获取表的一部分,具体取决于我的系统内存。
我知道如何随机访问数据,但是我不知道如何以某种方式进行访问,即我只能在一个时期访问一次表中的所有数据。因此,我正在寻找一种使整个表随机化的方法,即使这在计算上可能非常昂贵。
有简单的方法吗?还是您有更好的建议? 谢谢!
答案 0 :(得分:1)
这个答案不是特定于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;
要获取一些批次而不是整个表格。
希望我已经回答了您的问题,祝您有愉快的一天!