Q. Ну так в чём проблема хранить JSON в поле?

Схему задал, и вперёд.

A. Так в датакукере схему вообще задавать не нужно, он изначально schema-less. Если нужно обратиться к атрибуту объекта по имени, просто пишем его имя, и всё.

С табличными данными, чтобы обращаться к полям, имена задавать нужно (но при создании DS ненужные поля можно просто пропускать), а вот указывать их тип — нет. Тип всегда автоматически выводится при обращении к полю в выражении. Можно просто передать список полей в процесс при запуске (например, через командную строку, или файл параметров), и этого будет достаточно.

И никакой обвязки для инференса типов вообще не требуется.


Q. Ну вроде ладно. А что там было про подключаемые функции?

A. Есть API для расширения на Java, ориентированное на уровень Spark RDD.

Подключаемые функции бывают для адаптеров хранилищ (например, чтобы использовать источник JDBC), для трансформаций (например, можно написать читалку из XML текста в структурированный объект), для операций — запакованных алгоритмов, расширяющих возможности языка.

Писать собственные функции несложно. В стандартной поставке примерно по 20 трансформаций и операций, и по паре штук адаптеров хранилищ на чтение и на запись, так что кода для использования в качестве примера более чем достаточно.


Q. Что там было про циклы?

A. Для упрощения реализации логики в процессах ETL, в языке есть поддержка операторов контроля процесса исполнения (LOOP, IF) и динамически вычисляемых переменных (например, LET $arr = SELECT DISTINCT property FROM data_set).

Кроме того, все строки интерполируемые, то есть, имена наборов данных, например, можно вычислять прямо в рантайме. Так что в большинстве случаев можно обходиться без каких-то дополнительных обвязочных скриптов, и весь процесс целиком писать на SQL, просто передавая параметры во время запуска.


Q. Ну, допустим, что-то написали. А отлаживаться как?

A. У датакукера есть интерактивный отладчик с REPL, в котором можно пошагово писать и отлаживать скрипты, вызывать любые подключаемые функции (с автодополнением параметров), и заглядывать в наборы данных. А также смотреть статистику, и всё такое прочее.

Более того, режим этот может работать как локально, так и удалённо, когда сам движок запущен на кластере, а консоль с локальной машины обращается к нему через REST.


Q. Это что, какой-то отдельный артефакт?

A. Нет, что вы. Вся функциональность инструмента запакована в один FatJAR, у которого нет никаких внешних зависимостей. Но есть много режимов запуска — для разных окружений.

И вообще, сборка простая (многомодульный Maven проект с профилями), но продвинутая. Например, документация по подключаемым функциям автоматически собирается в HTML и PDF прямо из исходника, включая примеры SQL скриптов — с раскраской синтаксиса.


Q. О как, и такие плюшки, значит. Ну что ж, удачи вам.

A. Спасибо! Однако, прошу заметить, что мы ведь не первый год используем датакукер в проме, и вполне успешно ETL-им терабайты данных каждый день. Точно даже не скажу, сколько уже отъетлили, счёт идёт на десятки тысяч процессов (если считать в обработанных записях, то будут, вероятно, триллионы). Просто, чтобы открыть код, руки дошли только сейчас.

Более того, в нашем приватном форке куча аналитических алгоритмов в виде подключаемых функций реализована, так что не только ETL, но и аналитику мы тоже делаем им же самым.

Короче, не какое-нибудь экспериментальное фуфло, а достаточно зрелый продукт с практикой эксплуатации. Так что мы с большим удовольствием научим, как правильно готовить ETL процессы на Data Cooker. И поможем внедрить.

Обращайтесь к нам через группу в телеге, не стесняйтесь :)

5 ответов

22 просмотра

Что будет, если обратиться к коллекции, где у какого-то объекта нет нужного атрибута? Вернётся null? Такие объекты будут пропущены? Будет исключение? А если такого атрибута нет ни у одного объекта в коллекции?

Если нужно посчитать какую-нибудь сумму или максимум по атрибуту для всех объектов в коллекции, но у всех объектов они разного типа, что произойдет? Автоматическое приведение к типу, который требует операция? Будут просто пропущены объекты с атрибутами несовпадающего типа? Будет взят тип из первого объекта в коллекции?

Alexey-Evdokimov Автор вопроса
Максим Мартынов
Что будет, если обратиться к коллекции, где у како...

если атрибута нет, вернётся NULL. нет, не будут пропущены. нет, не будет исключений. вернутся NULL для всех объектов.

какому

Alexey-Evdokimov Автор вопроса
Максим Мартынов
какому

смотря какой оператор для суммы. если + то к Numeric, если || то к String, если OR то Boolean и т.д.

Похожие вопросы

Обсуждают сегодня

Ребят, привет. У кого-то есть опыт заказа мерча в сторе? Есть успешные кейсы? Чёт у меня турецкую карту не принимает
Vladimir F.
7
Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Всем привет. Есть кто разбирается в платежках? Что б принимать из других стран и выплачивать рф снг
Musa
6
Портфолио: Зовут меня Александр, мне 41 год. Город Киров. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github.co...
Magic
11
Приветствую всех, есть вопросик. Передали проект на OctoberCms, без инсталяшки в полуразвернутом виде, нужно было залить бекап бд, после залития бд, оказалось, что части строк...
Лео
14
Есть магистры regex в чате? Задача: нужно написать regex который мэтчит полные (без сокращений по типу ::1/128) ipv6 адреса кроме 2001:0df7:cef7:29f7:52f7:adf7:2cf7:4ff7, при ...
Илья
5
Подскажите, пожалуйста, где в backende, или не в нем можно дату поправить? Логирует действия не в том часовом поясе
Лео
7
где собака, админ группы? нычкуется и боится проявить волю, в толерантность еще не наигрался? @yelizariev
Ognezar
61
А как получить доступ к отправленному сообщению в ChosenInlineResult? Раньше кажется можно было, щас убрали?
net
2
Всем привет В общем надо на странице вакансии вывести вакансии с hh, но когда я пишу код в разделе Code ошибка Invalid URL format. The URL should start with the forward slash...
A da
1
Карта сайта