Задача и предварительные условия

Исправьте пропуски и отрицательные количества, замените ошибки Excel и отклоните строки с недопустимым текстом.

В примере используются демонстрационные данные и настройки. Проверьте ожидаемый результат в своей среде до подключения рабочих получателей. Идентификаторы demo_* условны: выберите собственные учебные подключения или источники в редакторе. JSON ниже показывает структуру блоков и связей, а не готовый архив потока для переноса.

Учебные входные данные

quality.csv

ID;Qty;Price
A;;10
B;-2;5
C;3;#N/A
D;4;unknown

Блоки, связи и точные настройки

Поясняющая схемаУвеличить ↗06. Последовательные правила качества. Схема примера 06: 3 блока, 2 связи. Идентификаторы узлов и порты настроенной схемы сохранены.
Схема потока 06

Схема примера 06: блоков — 3, связей — 2. Идентификаторы узлов и порты настроенной схемы сохранены.

Добавьте перечисленные блоки в конструкторе, откройте свойства каждого и задайте эти значения. Имена demo_* обозначают учебные источники и подключения.

БлокНастройка
1
Файл
src
  • Роль: source
  • Источник: demo_quality
  • Настройки чтения:
    • Лист: CSV
    • Диапазон: A1:C5
    • Первая строка — заголовок: так
    • Разделитель: ;
2
Очистка и проверка данных
quality
  • Правила:
      • Поля: Qty
      • Условие: empty
      • Действие: replace
      • Значение: 0
      • Поля: Qty
      • Условие: negative
      • Действие: positive
      • Поля: Price
      • Условие: excel_error
      • Действие: null
      • Поля: Price
      • Условие: invalid_number
      • Действие: skip_row
  • whitespace_empty: так
  • log_limit: 20
3
Экспорт данных
out
  • Формат: json
  • Имя файла: quality_clean
  • Назначение: download
  • Разделитель: ;
  • Часовой пояс: Europe/Kyiv

Связи портов

  • src out → quality in
  • quality out → out in
Полная конфигурация схемы в JSON
{
  "version": 3,
  "nodes": [
    {
      "id": "src",
      "type": "file",
      "label": "src",
      "config": {
        "role": "source",
        "source_id": "demo_quality",
        "options": {
          "sheet": "CSV",
          "range": "A1:C5",
          "header": true,
          "delimiter": ";"
        }
      }
    },
    {
      "id": "quality",
      "type": "quality",
      "label": "quality",
      "config": {
        "rules": [
          {
            "fields": [
              "Qty"
            ],
            "condition": "empty",
            "action": "replace",
            "value": 0
          },
          {
            "fields": [
              "Qty"
            ],
            "condition": "negative",
            "action": "positive"
          },
          {
            "fields": [
              "Price"
            ],
            "condition": "excel_error",
            "action": "null"
          },
          {
            "fields": [
              "Price"
            ],
            "condition": "invalid_number",
            "action": "skip_row"
          }
        ],
        "whitespace_empty": true,
        "log_limit": 20
      }
    },
    {
      "id": "out",
      "type": "export",
      "label": "out",
      "config": {
        "format": "json",
        "filename": "quality_clean",
        "destination": "download",
        "delimiter": ";",
        "timezone": "Europe/Kyiv"
      }
    }
  ],
  "edges": [
    {
      "source": "src",
      "target": "quality",
      "source_port": "out",
      "target_port": "in"
    },
    {
      "source": "quality",
      "target": "out",
      "source_port": "out",
      "target_port": "in"
    }
  ]
}

Ожидаемый результат

IDQtyPrice
A010
B25
C3NULL

Строка D отклоняется. Правила идут последовательно: #N/A сначала становится NULL и уже не считается некорректным числом следующим правилом.

Запуск и проверка

  1. Загрузите quality.csv и сохраните правила в показанном порядке.
  2. Запустите поток и откройте подробности блока quality и журнал замен.
  3. Проверьте 3 строки результата, Qty(A)=0, Qty(B)=2 и Price(C)=NULL; журнал ограничен 20 примерами изменений.

Частые ошибки

  • Перестановка последних двух правил меняет результат: #N/A может быть отклонена до замены на NULL.
  • condition=invalid_number отклоняет нечисловые значения. condition=text отклоняет любой непустой текст, включая числовые строки CSV; для этого примера он не подходит.
  • log_limit ограничивает примеры в журнале, а не количество обработанных строк.