Jaql (произносится как «шакал») - это функциональный язык обработки данных и запросов, наиболее часто используемый для обработки запросов JSON для больших данных.
Парадигма | Функциональный |
---|---|
Разработано | Вук Эрцеговач ( Google ) |
Впервые появился | 9 октября 2008 г . |
Стабильный выпуск | 0.5.1 / 12 июля 2010 г . |
Язык реализации | Ява |
Операционные системы | Кроссплатформенность |
Лицензия | Лицензия Apache 2.0 |
Веб-сайт | код |
Основные реализации | |
IBM BigInsights |
Он начинался как проект с открытым исходным кодом в Google [1], но последний выпуск был выпущен 12 июля 2010 года. IBM [2] взяла его на себя в качестве основного языка обработки данных для своего программного пакета Hadoop BigInsights .
Хотя он был разработан для JSON, он поддерживает множество других источников данных, таких как CSV , TSV , XML .
Сравнение [3] с другими языками запросов BigData, такими как PIG Latin и Hive QL, иллюстрирует аспекты производительности и удобства использования этих технологий.
Jaql поддерживает ленивое вычисление [4] , поэтому выражения материализуются только при необходимости.
Синтаксис
Основная концепция Jaql:
источник -> оператор ( параметр ) -> приемник ;
где сток может быть источником для последующего оператора. Итак, как правило, программа Jaql должна иметь следующую структуру, отображающую граф обработки данных :
источник -> оператор1 ( параметр ) -> оператор2 ( параметр ) -> оператор2 ( параметр ) -> оператор3 ( параметр ) -> оператор4 ( параметр ) -> приемник ;
Чаще всего для удобства чтения программы Jaql переносятся на строку после стрелки, что также является распространенной идиомой в Twitter Scalding :
источник -> оператор1 ( параметр ) -> оператор2 ( параметр ) -> оператор2 ( параметр ) -> оператор3 ( параметр ) -> оператор4 ( параметр ) -> приемник ;
Основные операторы [5]
Расширять
Используйте выражение EXPAND для сглаживания вложенных массивов. Это выражение принимает в качестве входных данных массив вложенных массивов [[T]] и создает выходной массив [T], перемещая элементы каждого вложенного массива в выходной массив верхнего уровня.
Фильтр
Используйте оператор FILTER, чтобы отфильтровать элементы из указанного входного массива. Этот оператор принимает в качестве входных данных массив элементов типа T и выводит массив того же типа, сохраняя те элементы, для которых предикат оценивается как истина. Это Jaql-эквивалент предложения WHERE в SQL . Пример:
data = [ { name : "Jon Doe" , доход : 20000 , менеджер : false }, { name : "Vince Wayne" , доход : 32500 , менеджер : false }, { name : "Jane Dean" , доход : 72000 , менеджер : true }, { имя : "Алекс Смит" , доход : 25000 , менеджер : false } ];данные -> фильтр $ . менеджер ;[ { "доход" : 72000 , "менеджер" : правда , "имя" : "Джейн Дин" } ]данные -> фильтр $ . доход < 30000 ;[ { "доход" : 20000 , "менеджер" : ложь , "имя" : "Джон Доу" }, { "доход" : 25000 , "менеджер" : ложь , "имя" : "Алекс Смит" } ]
Группа
Используйте выражение GROUP, чтобы сгруппировать один или несколько входных массивов по ключу группировки и применить агрегатную функцию для каждой группы.
Присоединиться
Используйте оператор JOIN, чтобы выразить соединение между двумя или более входными массивами. Этот оператор поддерживает несколько типов объединений, включая естественные, лево-внешние, правые-внешние и внешние.
Сортировать
Используйте оператор SORT для сортировки ввода по одному или нескольким полям.
Вершина
Выражение TOP выбирает первые k элементов своего ввода. Если предоставляется компаратор, вывод семантически эквивалентен сортировке ввода с последующим выбором первых k элементов.
Преобразовать
Используйте оператор TRANSFORM, чтобы реализовать проекцию или применить функцию ко всем элементам вывода.