簡體   English   中英

在 sql3 中隨機播放大表

[英]Shuffle huge table in sql3

我目前正在使用 sqlite3 python package 來訪問數據庫中表中的數據。 該表非常大 - 大約 100GB - 我想隨機化它的行,因為它包含我的 NN 的訓練數據,它需要多次查看整個數據。

目前,我正在使用 cursor 遍歷表,它會根據我的系統 memory 獲取表的一部分。

我知道如何隨機訪問數據,但我不知道如何以某種方式做到這一點,即我只能在一個時期內訪問一次表中的所有數據。 因此,我正在尋找一種方法來隨機化整個表,即使這在計算上可能非常昂貴。

有沒有簡單的方法或者你有更好的建議? 謝謝!

這個答案不是 SQLite 特定的,因為我沒有使用太多,但一般來說更多的是 SQL。

有兩件事,要么你關心可重復的結果,要么不關心。 如果不這樣做,您可以執行以下操作:

SELECT *
FROM my_table
ORDER BY random();

否則,當我一般想要使用 SQL 進行可重復的隨機播放時,我通常會 hash 連接一個值,比如說“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;

得到一些批次而不是整個表。

希望我已經回答了你的問題,祝你有美好的一天!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM