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

Приєднати до продажів ціну за числовим ключем і зберегти рядки, для яких ціни немає.

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

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

sales.csv

ID;Qty
1;2
2.0;5
4;1

prices.csv

ID;Price
1.0;5
2;3
3;4

Блоки, зв’язки й точні налаштування

Пояснювальна схемаЗбільшити ↗08. Join: продажі з довідником цін. Топологія прикладу 08: 4 блоки, 3 зв’язки. Збережено ідентифікатори вузлів і порти налаштованого графа.
Схема потоку 08

Топологія прикладу 08: 4 блоки, 3 зв’язки. Збережено ідентифікатори вузлів і порти налаштованого графа.

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

БлокНалаштування
1
Файл
sales
  • Роль: source
  • Джерело: demo_join_sales
  • Параметри читання:
    • Аркуш: CSV
    • Діапазон: A1:B4
    • Перший рядок — заголовок: так
    • Роздільник: ;
2
Файл
prices
  • Роль: source
  • Джерело: demo_join_prices
  • Параметри читання:
    • Аркуш: CSV
    • Діапазон: A1:B4
    • Перший рядок — заголовок: так
    • Роздільник: ;
3
З’єднання (Join)
join
  • Входи:
      • Ідентифікатор: sales
      • alias: sales
      • Ідентифікатор: prices
      • alias: prices
      • Тип з’єднання: left
      • Кардинальність: many_to_one
      • Ключі:
          • Ліве поле: sales.ID
          • Праве поле: ID
          • Числове порівняння: так
  • Порожні ключі рівні: ні
  • Десятковий роздільник: .
4
Вивантаження даних
out
  • Формат: json
  • Ім’я файлу: sales_with_prices
  • Призначення: download
  • Роздільник: ;
  • Часовий пояс: Europe/Kyiv

Зв’язки портів

  • sales out → join sales
  • prices out → join prices
  • join out → out in
Повна конфігурація графа JSON
{
  "version": 3,
  "nodes": [
    {
      "id": "sales",
      "type": "file",
      "label": "sales",
      "config": {
        "role": "source",
        "source_id": "demo_join_sales",
        "options": {
          "sheet": "CSV",
          "range": "A1:B4",
          "header": true,
          "delimiter": ";"
        }
      }
    },
    {
      "id": "prices",
      "type": "file",
      "label": "prices",
      "config": {
        "role": "source",
        "source_id": "demo_join_prices",
        "options": {
          "sheet": "CSV",
          "range": "A1:B4",
          "header": true,
          "delimiter": ";"
        }
      }
    },
    {
      "id": "join",
      "type": "join",
      "label": "join",
      "config": {
        "inputs": [
          {
            "id": "sales",
            "alias": "sales"
          },
          {
            "id": "prices",
            "alias": "prices",
            "how": "left",
            "cardinality": "many_to_one",
            "keys": [
              {
                "left": "sales.ID",
                "right": "ID",
                "numeric": true
              }
            ]
          }
        ],
        "nulls_equal": false,
        "decimal": "."
      }
    },
    {
      "id": "out",
      "type": "export",
      "label": "out",
      "config": {
        "format": "json",
        "filename": "sales_with_prices",
        "destination": "download",
        "delimiter": ";",
        "timezone": "Europe/Kyiv"
      }
    }
  ],
  "edges": [
    {
      "source": "sales",
      "target": "join",
      "source_port": "out",
      "target_port": "sales"
    },
    {
      "source": "prices",
      "target": "join",
      "source_port": "out",
      "target_port": "prices"
    },
    {
      "source": "join",
      "target": "out",
      "source_port": "out",
      "target_port": "in"
    }
  ]
}

Очікуваний результат

sales.IDsales.Qtyprices.IDprices.Price
121.05
2.0523
41NULLNULL

Числове порівняння прирівнює 1 і 1.0. LEFT JOIN зберігає ID=4; ціна для нього порожня.

Запуск і перевірка

  1. Додайте обидва джерела та підключіть їх до різних іменованих входів Join.
  2. Першим входом задайте sales без ключів; ключі задаються для другого входу prices.
  3. Запустіть та перевірте 3 рядки; для ID=4 має бути NULL, а не випадково підставлена ціна.

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

  • Лівий ключ має містити псевдонім: sales.ID, не просто ID.
  • Дві ціни для одного ID порушать many_to_one і мають бути виправлені в довіднику.
  • Вимкнення numeric не прирівняє текстові "2.0" і "2".