在 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。
希望我已经回答了你的问题,祝你有愉快的一天!
我目前正在使用 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。
希望我已经回答了你的问题,祝你有愉快的一天!