ВЫБЕРИТЕ случайную выборку данных через PRESTO connector

#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 пока я работаю над исправлением.