在sql3中随机播放巨大的表

时间:2019-09-30 12:50:24

标签: python sqlite random-access

我目前正在使用sqlite3 python包来访问数据库中表中的数据。 该表非常大-大约100GB-,我想将其行随机化,因为它包含我的NN的训练数据,该数据需要多次查看整个数据。

当前,我正在使用游标遍历表,该游标将获取表的一部分,具体取决于我的系统内存。

我知道如何随机访问数据,但是我不知道如何以某种方式进行访问,即我只能在一个时期访问一次表中的所有数据。因此,我正在寻找一种使整个表随机化的方法,即使这在计算上可能非常昂贵。

有简单的方法吗?还是您有更好的建议? 谢谢!

1 个答案:

答案 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;

要获取一些批次而不是整个表格。

希望我已经回答了您的问题,祝您有愉快的一天!