ECL (язык программирования, ориентированный на данные)
Парадигма | декларативный , структурированный , ориентированный на данные |
---|---|
Разработчик | HPCC Systems® , решения LexisNexis для управления рисками |
Впервые появился | 2000 |
Дисциплина набора текста | статический , сильный , безопасный |
ТЫ | Линукс |
Веб-сайт | http://hpccsystems.com/ |
Под влиянием | |
Пролог , Паскаль , SQL , Снобол4 , C++ , Clarion |
ECL (язык управления предприятием) — это декларативный, ориентированный на данные язык программирования, разработанный в 2000 году, чтобы позволить команде программистов обрабатывать большие данные в высокопроизводительном вычислительном кластере без участия программиста во многих императивных решениях более низкого уровня. [1] [2]
История
[ редактировать ]ECL был первоначально спроектирован и разработан в 2000 году Дэвидом Бэйлиссом как внутренний инструмент повышения производительности внутри Seisint Inc и считался «секретным оружием», которое позволило Seisint завоевать долю рынка в своем бизнесе по работе с данными. У Equifax был основанный на SQL процесс прогнозирования того, кто обанкротится в ближайшие 30 дней, но на обработку данных ушло 26 дней. Первая реализация ECL решила ту же проблему за 6 минут. Эта технология была названа движущей силой приобретения Seisint компанией LexisNexis , а затем снова как основной источник синергии, когда LexisNexis приобрела ChoicePoint Inc. [3]
Языковые конструкции
[ редактировать ]ECL, по крайней мере в своей самой чистой форме, является декларативным, ориентированным на данные языком. Программ в строгом смысле не существует. Скорее, приложение ECL укажет несколько основных наборов данных (или значений данных), а затем операции, которые должны быть выполнены с этими значениями.
Привет, мир
[ редактировать ]ECL должен иметь краткие решения проблем и разумные дефолты. Программа «Hello World» характерно короткая:
'Hello World'
Возможно, более интересный пример мог бы взять список строк, отсортировать их по порядку, а затем вернуть его в качестве результата.
// First declare a dataset with one column containing a list of strings
// Datasets can also be binary, CSV, XML or externally defined structures
D := DATASET([{'ECL'},{'Declarative'},{'Data'},{'Centric'},{'Programming'},{'Language'}],{STRING Value;});
SD := SORT(D,Value);
output(SD)
Заявления, содержащие :=
определяются в ECL как определения атрибутов. Они не обозначают действие; скорее определение термина. Таким образом, логически программу ECL можно прочитать: «снизу вверх».
OUTPUT(SD)
Что такое СД?
SD := SORT(D,Value);
SD — это буква D, отсортированная по значению.
Что такое Д?
D := DATASET([{'ECL'},{'Declarative'},{'Data'},{'Centric'},{'Programming'},{'Language'}],{STRING Value;});
D — это набор данных с одним столбцом с надписью «Значение» и содержащим следующий список данных.
Примитивы ECL
[ редактировать ]Примитивы ECL, которые действуют на наборы данных, включают SORT, ROLLUP, DEDUP, ITERATE, PROJECT, JOIN, NORMALIZE, DENORMALIZE, PARSE, CHOSEN, ENTH, TOPN, DISTRIBUTE.
ECL-инкапсуляция
[ редактировать ]Хотя ECL краток и LexisNexis утверждает, что 1 строка ECL примерно эквивалентна 120 строкам C++, он все же имеет значительную поддержку крупномасштабного программирования, включая инкапсуляцию данных и повторное использование кода. Доступные конструкции включают MODULE, FUNCTION, FUNCTIONMACRO, INTERFACE, MACRO, EXPORT, SHARED.
Поддержка параллелизма в ECL
[ редактировать ]В реализации HPCC по умолчанию большинство конструкций ECL будут выполняться параллельно на используемом оборудовании. Многие примитивы также имеют опцию LOCAL, указывающую, что операция должна выполняться локально на каждом узле.
Сравнение с Map-Reduce
[ редактировать ]Парадигма Hadoop Map-Reduce состоит из трех этапов, которые соотносятся с примитивами ECL следующим образом.
Название/термин Hadoop | эквивалент ожидаемых кредитных убытков | Комментарии |
---|---|---|
КАРТИРОВАНИЕ в MAPper | ПРОЕКТ/ТРАНСФОРМАЦИЯ | Берет запись и конвертирует в другой формат; в случае Hadoop преобразование происходит в пару ключ-значение. |
ПЕРЕТАСОВАНИЕ (Фаза 1) | РАСПРЕДЕЛИТЬ(,ХЭШ(Значение ключа)) | Записи из картографа распределяются в зависимости от значения KEY. |
ПЕРЕТАСОВАНИЕ (Фаза 2) | СОРТИРОВАТЬ(,ЛОКАЛЬНЫЙ) | Записи, поступающие в конкретный редуктор, сортируются в порядке KEY. |
УМЕНЬШАТЬ | СВЕРТКА(,Ключ,МЕСТНЫЙ) | Записи для определенного значения KEY теперь объединены. |
Ссылки
[ редактировать ]- ^ Руководство по ECL , Lexis-Nexis .
- ^ «Оценка использования систем потоков данных для анализа больших графов», А. Ю и И. Каплан. Материалы 2-го семинара по многозадачным вычислениям на гридах и суперкомпьютерах, MTAGS, 2009 г.
- ^ «Приобретение Сейсинта» . Архивировано из оригинала 21 июня 2011 г. Проверено 24 марта 2011 г.