Задача и предварительные условия
Приведите коды товаров к единому написанию и сохраните последнюю запись каждого кода.
В примере используются демонстрационные данные и настройки. Проверьте ожидаемый результат в своей среде до подключения рабочих получателей. Идентификаторы demo_* условны: выберите собственные учебные подключения или источники в редакторе. JSON ниже показывает структуру блоков и связей, а не готовый архив потока для переноса.
Учебные входные данные
products.csv
SKU;Name
t01 ;Tea old
T01;Tea new
c01;Coffee
Блоки, связи и точные настройки
Схема примера 05: блоков — 4, связей — 3. Идентификаторы узлов и порты настроенной схемы сохранены.
Добавьте перечисленные блоки в конструкторе, откройте свойства каждого и задайте эти значения. Имена demo_* обозначают учебные источники и подключения.
| Блок | Настройка |
|---|---|
| 1 Файл src |
|
| 2 Преобразование текста text |
|
| 3 Удаление дублей dedup |
|
| 4 Экспорт данных out |
|
Связи портов
- src
out→ textin - text
out→ dedupin - dedup
out→ outin
Полная конфигурация схемы в JSON
{
"version": 3,
"nodes": [
{
"id": "src",
"type": "file",
"label": "src",
"config": {
"role": "source",
"source_id": "demo_products",
"options": {
"sheet": "CSV",
"range": "A1:B4",
"header": true,
"delimiter": ";"
}
}
},
{
"id": "text",
"type": "text",
"label": "text",
"config": {
"fields": [
"SKU"
],
"operations": [
{
"kind": "trim"
},
{
"kind": "upper"
}
],
"null": "preserve"
}
},
{
"id": "dedup",
"type": "deduplicate",
"label": "dedup",
"config": {
"keys": [
"SKU"
],
"keep": "last",
"comparison": "text",
"case_sensitive": true,
"trim": false
}
},
{
"id": "out",
"type": "export",
"label": "out",
"config": {
"format": "csv",
"filename": "products_clean",
"destination": "download",
"delimiter": ";",
"timezone": "Europe/Kyiv"
}
}
],
"edges": [
{
"source": "src",
"target": "text",
"source_port": "out",
"target_port": "in"
},
{
"source": "text",
"target": "dedup",
"source_port": "out",
"target_port": "in"
},
{
"source": "dedup",
"target": "out",
"source_port": "out",
"target_port": "in"
}
]
}Ожидаемый результат
| SKU | Имя |
|---|---|
| T01 | Tea new |
| C01 | Coffee |
Из 3 входных строк остаются две. «Последняя» означает последнюю в текущем порядке входа, а не самую новую по дате.
Запуск и проверка
- Загрузите products.csv без предварительного ручного удаления пробелов.
- Порядок операций: trim, затем upper, затем удаление дублей по SKU.
- Проверьте, что Tea old удалена, Tea new осталась, а c01 стал C01.
Частые ошибки
- Удаление дублей до нормализации сохранило бы оба варианта t01/T01.
- keep=unique удалил бы все строки повторяющегося ключа; это другая задача.
- Если порядок источника нестабилен, keep=last не гарантирует самую новую бизнес-запись.