Завдання та передумови

Виправити пропуски й від’ємні кількості, замінити помилки Excel та відкинути рядки з неприйнятним текстом.

Приклад містить навчальні дані та налаштування. Виберіть власні тестові джерела й підключення замість ідентифікаторів demo_*, відтворіть очікуваний результат і лише потім використовуйте робочі об’єкти.

Навчальні вхідні дані

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. Виконайте потік і відкрийте відомості блоку якості та журнал замін.
  3. Звірте 3 рядки результату, Qty(A)=0, Qty(B)=2, Price(C)=NULL; журнал обмежено 20 прикладами змін.

Типові помилки

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