我知道从这个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。您可以随时停止分页 –