我知道從這個question可以做隨機抽樣RAND
。隨機抽樣完成行
SELECT * FROM [table] WHERE RAND() < percentage
但是這需要全表掃描,並承擔相當的成本。我想知道是否有更有效的方法?
我正在試驗tabledata.list
API,但當index
非常大(即> 10000000)時得到java.net.SocketTimeoutException: Read timed out
。這個操作不是O(1)嗎?
bigquery .tabledata() .list(tableRef.getProjectId, tableRef.getDatasetId, tableRef.getTableId) .setStartIndex(index) .setMaxResults(1L) .execute()
我的用例是統一採樣一個小的固定數量的行,而不需要完整的表IO。 'pageToken'方法仍然需要遍歷表中的所有行? –
nope。您可以隨時停止分頁 –