我試圖找出在Big Query中的表中爲每個組抽取100條記錄的隨機樣本的最佳方法。在大查詢中從每個組中抽取一個隨機樣本
例如,我有一個表,其中列A是唯一的recordID,列B是該記錄所屬的組ID。對於每個不同的組ID,我想隨機抽取100個recordID。有沒有簡單的方法來完成這個?
我試圖找出在Big Query中的表中爲每個組抽取100條記錄的隨機樣本的最佳方法。在大查詢中從每個組中抽取一個隨機樣本
例如,我有一個表,其中列A是唯一的recordID,列B是該記錄所屬的組ID。對於每個不同的組ID,我想隨機抽取100個recordID。有沒有簡單的方法來完成這個?
類似下面應該工作
SELECT recordID, groupID
FROM (
SELECT
recordID, groupID,
RAND() AS rnd, ROW_NUMBER() OVER(PARTITION BY groupID ORDER BY rnd) AS pos
FROM yourTable
)
WHERE pos <= 100
ORDER BY groupID, recordID
還要檢查RAND()here如果你想改善隨機性
也有類似的需求,即整羣抽樣,超過400M多列,但打Exceeded resources...
錯誤當使用ROW_NUMBER()
。
如果您不需要RAND()
,因爲你的數據是無序的,無論如何,這(在我的情況< 30歲)表現相當好:
SELECT ARRAY_AGG(x LIMIT 100)
FROM yourtable x
GROUP BY groupId
您可以:
UNNEST()
如果前端無法呈現嵌套記錄ORDER BY groupId
更快找到/確認圖案
非常有幫助!非常感謝! – Tas
你真的不需要最後的ORDER BY groupID,recordID –
沒錯!由於在生產中選擇了外部命令,最終會導致資源超出問題。仍然用於簡單測試 –