#python #database #presto
#python #База данных #presto
Вопрос:
В настоящее время я ищу оптимальный способ получения случайной выборки данных из таблицы (например, в HIVE). Я знаю, что PRESTO предоставляет либо функцию RANDOM(), либо ТАБЛИЧНУЮ ВЫБОРКУ BERNOULLI / SYSTEM. Проблема в том, что при запросе таблицы со значительным количеством записей требуется много времени, что не подходит для сотрудничества с JayDeBeApi, который может закрыть соединение, слишком долго ожидая ответа.
Я бы предпочел использовать TABLESAMPLE BERNOULLI / SYSTEM, который принимает в качестве аргумента процент от извлекаемых записей. Сравнивать с базами данных ORACLE, SAP или MSSQL, которые позволяют передавать точный процент, то есть 0,003123412%, PRESTO вам не позволяет, несмотря на то, что функции довольно похожи, и все преобразуется в диапазоне 1-100%.
Кто-нибудь знает какой-нибудь обходной путь, как это решить? Я бы предпочел избежать предложения limit в сотрудничестве с TABLESAMPLE BERNOULLI / SYSTEM, которое может работать не так, как ожидалось.
Ответ №1:
С Presto 341 (предстоящий выпуск) вы можете просто
... FROM my_table TABLESAMPLE BERNOULLI (0.01)
как указывает @michal.kyjovsky, в старых версиях была ошибка, требующая использования научной нотации для получения субпроцентного коэффициента выборки
... FROM my_table TABLESAMPLE BERNOULLI (0.01e0)
Ответ №2:
Это может быть получено путем передачи чисел в научной нотации.
Комментарии:
1. Это обходной путь для того, что
TABLESAMPLE BERNOULLI (0.1)
сегодня работает некорректно. Пожалуйста, отправьте новую проблему по адресу github.com/prestosql/presto/issues/new пока я работаю над исправлением.