Я знаю из этого question, что можно сделать случайную выборку RAND
.Случайные выборки полных рядов
SELECT * FROM [table] WHERE RAND() < percentage
Но это потребовало бы полного сканирования таблицы и нести эквивалентную стоимость. Мне интересно, есть ли более эффективные способы?
Я экспериментирую с API tabledata.list
, но получил java.net.SocketTimeoutException: Read timed out
, когда index
очень большой (т. Е.> 10000000). Является ли эта операция не O (1)?
bigquery .tabledata() .list(tableRef.getProjectId, tableRef.getDatasetId, tableRef.getTableId) .setStartIndex(index) .setMaxResults(1L) .execute()
Моим вариантом использования является равномерное выборка небольшого фиксированного количества строк без выполнения полной таблицы ввода-вывода. Подход 'pageToken' все равно потребует пройти все строки в таблице? –
nope. вы можете остановить пейджинг в любое время –