Google bigquery 随机抽样整行

Google bigquery 随机抽样整行,google-bigquery,Google Bigquery,我从中知道,一个人可以做随机抽样RAND 从[table]中选择*其中RAND()10000000)时,获得了java.net.SocketTimeoutException:Read超时。这不是O(1)操作吗 bigquery .tabledata() .list(tableRef.getProjectId、tableRef.getDatasetId、tableRef.getTableId) .setStartIndex(索引) .setMaxResults(1L) .execute() 我建议

我从中知道,一个人可以做随机抽样
RAND

从[table]中选择*其中RAND()

但这将需要一个完整的表扫描,并产生相当的成本。我想知道是否有更有效的方法

我正在试验
tabledata.list
API,但在
索引非常大(即>10000000)时,获得了
java.net.SocketTimeoutException:Read超时。这不是O(1)操作吗

bigquery
.tabledata()
.list(tableRef.getProjectId、tableRef.getDatasetId、tableRef.getTableId)
.setStartIndex(索引)
.setMaxResults(1L)
.execute()

我建议使用分页,并从每页获取收集样本行。这应该可以更好地扩展

我看到的另一个(完全不同的)选项是使用
您可以在循环中按语法生成随机时间(用于快照)或时间范围(用于范围),并仅查询提取所需数据的数据部分。
注意限制:这将允许您对不到7天的数据进行采样。

我建议使用分页,并从每个页面获取采样行。这应该可以更好地扩展

我看到的另一个(完全不同的)选项是使用
您可以在循环中按语法生成随机时间(用于快照)或时间范围(用于范围),并仅查询提取所需数据的数据部分。

注意限制:这将允许您对不到7天的数据进行采样。

tabledata.list对于表中的任意查找并不特别有效,尤其是当您以后再查看表时。它并不是为整个表的高效数据检索而设计的,它更多的是为了查看表中的前几页数据


如果要对表中的所有数据运行某些操作,但不运行查询,则可能应该使用,而应该使用输出文件中的示例行。

tabledata.list对于表中的任意查找并不特别有效,尤其是在以后查看表时。它并不是为整个表的高效数据检索而设计的,它更多的是为了查看表中的前几页数据


如果要对表中的所有数据执行某些操作,但不运行查询,则可能应该使用,而应该从输出文件中对行进行采样。

我的用例是在不执行完整表IO的情况下对固定数量的小行进行统一采样。
pageToken
方法仍然需要遍历表中的所有行?我的用例是在不执行完整表IO的情况下,对少量固定数量的行进行统一采样。
pageToken
方法仍然需要遍历表中的所有行?