Задача и предварительные условия
Разделите заказы на приоритетные и обычные по сумме с отдельным файлом для каждой ветки.
В примере используются демонстрационные данные и настройки. Проверьте ожидаемый результат в своей среде до подключения рабочих получателей. Идентификаторы demo_* условны: выберите собственные учебные подключения или источники в редакторе. JSON ниже показывает структуру блоков и связей, а не готовый архив потока для переноса.
Учебные входные данные
orders.csv
Order;Amount
O1;1200
O2;450
O3;1000
Блоки, связи и точные настройки
Схема примера 10: блоков — 4, связей — 3. Идентификаторы узлов и порты настроенной схемы сохранены.
Добавьте перечисленные блоки в конструкторе, откройте свойства каждого и задайте эти значения. Имена demo_* обозначают учебные источники и подключения.
| Блок | Настройка |
|---|---|
| 1 Файл src |
|
| 2 Маршрутизация router |
|
| 3 Экспорт данных priority_out |
|
| 4 Экспорт данных regular_out |
|
Связи портов
- src
out→ routerin - router
priority→ priority_outin - router
else→ regular_outin
Полная конфигурация схемы в JSON
{
"version": 3,
"nodes": [
{
"id": "src",
"type": "file",
"label": "src",
"config": {
"role": "source",
"source_id": "demo_orders",
"options": {
"sheet": "CSV",
"range": "A1:B4",
"header": true,
"delimiter": ";"
}
}
},
{
"id": "router",
"type": "router",
"label": "router",
"config": {
"mode": "first",
"default_route": true,
"routes": [
{
"id": "priority",
"label": "Від 1000",
"mode": "all",
"predicates": [
{
"column": "Amount",
"op": "gte",
"value": 1000,
"numeric": true,
"value_mode": "constant"
}
]
}
]
}
},
{
"id": "priority_out",
"type": "export",
"label": "priority_out",
"config": {
"format": "csv",
"filename": "priority_orders",
"destination": "download",
"delimiter": ";",
"timezone": "Europe/Kyiv"
}
},
{
"id": "regular_out",
"type": "export",
"label": "regular_out",
"config": {
"format": "csv",
"filename": "regular_orders",
"destination": "download",
"delimiter": ";",
"timezone": "Europe/Kyiv"
}
}
],
"edges": [
{
"source": "src",
"target": "router",
"source_port": "out",
"target_port": "in"
},
{
"source": "router",
"target": "priority_out",
"source_port": "priority",
"target_port": "in"
},
{
"source": "router",
"target": "regular_out",
"source_port": "else",
"target_port": "in"
}
]
}Ожидаемый результат
priority_orders.csv: O1=1200 и O3=1000. regular_orders.csv: O2=450. Граница 1000 включена благодаря gte.
Запуск и проверка
- Подключите priority_out именно к выходу priority, а regular_out — к else.
- Проверьте numeric=true для числового сравнения.
- Запустите и проверьте, что количества выходных строк в сумме равны входу: 2+1=3.
Частые ошибки
- gt вместо gte направил бы сумму 1000 в else.
- mode=all с несколькими пересекающимися маршрутами может копировать строку в несколько веток.
- Если в маршрут не попала ни одна строка, экспорт может быть пропущен; отсутствие файла не обязательно означает ошибку.