我有一個由字符串和數字概率組成的數據庫(還有其他列,但它們與問題無關)。一個簡化的模式是如何隨機化一個mysql列?
+-----------------------+----------------------+
| gopair | P_high |
+-----------------------+----------------------+
| GO:0000398_GO:0030540 | 0.275997567007171 |
| GO:0015198_GO:0016846 | 5.24489289777325e-06 |
| GO:0034649_GO:0072141 | 0.00338367340340417 |
| GO:0004303_GO:0031053 | 0.110417921058026 |
+-----------------------+----------------------+
在我的工作中,我運行腳本查詢數據庫中與特定GO對關聯的值。我需要證明我的結果與隨機獲得的結果不同。所以,我想要運行的一個測試是洗牌P_high
列,然後運行我的腳本並分析結果。
我試圖洗牌輸入文件並重新加載數據庫,但這很複雜,因爲輸入文件是一個7GB的文本文件,這是一種很難處理的機器上只有3GB內存。
那麼,有沒有辦法讓我的數據庫中的特定列隨機化,同時保持靜態?
注意事項:
- 表中的問題是LARGE(60164966行)。
- 我不需要嚴格的數學隨機性
- 我需要保持相同的頻率。如果ñ對在真實的數據庫P的概率,我需要ň雙有在隨機一個P的概率。
- 我需要解決方案是持久的。我的腳本可以多次查詢同一對數據庫,因此只需選擇一個隨機對就不夠好。
- 我將需要重複所有這些操作,因此可以使用腳本(最好是Perl)解決方案。
- 我在Ubuntu服務器上運行mysql版本14.14 Distrib 5.1.41,用於使用readline 6.1的debian-linux-gnu(x86_64)。
'SELECT gopair,RAND()AS P_high FROM mytable'? –
@SirRufo不起作用。我需要結果持久並反映原始數據庫的結構。所以,如果154個gopairs在原始數據庫中的概率爲0.005,那麼在隨機數據庫中,我需要154個gopairs以使概率爲0.005。如果我正確理解您的解決方案,那麼每次運行時都會從P_high列中選擇一個隨機值,對嗎? – terdon
不,它只會返回一個隨機值*作爲P_high列。 Rufo案例中返回的值與數據庫中存在的值無關。 – Crontab