在 sql3 中随机播放巨大的 table

Shuffle huge table in sql3

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

目前我正在使用游标遍历 table,根据我的系统内存获取 table 的一部分。

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

有没有简单的方法或者有更好的建议? 谢谢!

这个答案不是 SQL 网站特定的,因为我用得不多,但通常 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;

获取一些批次而不是整个 table。

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