2016-06-05 2 views
0

Я рассматриваю возможность использования Apache Drill в качестве механизма запросов для существующей системы. Некоторые столбцы таблицы представляют собой несколько значений, кодируемых как Int, что позволяет делать, например, SELECT COUNT(*) FROM options WHERE opt_a & 2 > 0. Похоже, что у Drill нет побитовых операторов. Любое слово в этой функции, которое будет добавлено в ближайшем будущем, или какие-либо идеи о том, как расширить Drill в простой способ поддержать это?Побитовый оператор в бурении Apache

ответ

2

Похоже, эти функции должны быть доступны, они просто не снабжены синтаксисом java/c. Предоставление этого, вероятно, связано с модификацией парсера, хотя я не уверен, что это будет соответствовать спецификации SQL.

https://issues.apache.org/jira/browse/DRILL-923

Если что-то вам нужно не хватает, разработке функций в Drill довольно проста. Есть несколько особенностей интерфейса UDF. Ниже приведен список некоторых доз и донтов из документов:

Чтобы использовать компилятор Java в режиме реального времени (JIT) для максимальной скорости, вам необходимо придерживаться некоторых основных правил.

  • Не использовать импорт. Вместо этого используйте полное имя класса, как того требует API Google Guava, упакованный в Apache Drill, и как показано в «Шаг 3: Объявить входные параметры».
  • Манипулируйте классы ValueHolders, например VarCharHolder и IntHolder, как структуры, вызывая вспомогательные методы, такие как getStringFromVarCharHolder и toStringFromUTF8, как показано в «Шаг 5: Реализация функции eval()».
  • Не вызывайте такие методы, как toString, потому что это вызывает серьезные проблемы.

  • Используйте maven-source-plugin для компиляции источников и классов JAR-файлов.

Вот страница из документации, которая охватывает пишущую простую функцию: https://drill.apache.org/docs/develop-custom-functions-introduction/

Если у вас есть какие-либо вопросы, не стесняйтесь ударяете Дев или пользовательские списки рассылки. Люди, как правило, более отзывчивы, чем на Stackoverflow.

+0

Спасибо. Было бы так же просто, как создать простую функцию (следующую документацию), которая вернет true/false и будет использоваться в предложении WHERE? –

Смежные вопросы