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

Оновити наявний товар за ключем sku і додати відсутній товар до навчальної SQL-таблиці.

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

Потрібне підключення до навчальної SQL-БД із підтримуваним конектором і правами читання/запису demo_products. Сам приклад не виконує SQL-запис.

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

Початковий стан таблиці demo_products:

skunameprice
T01Tea10
C01Coffee20

products.csv

sku;name;price
T01;Tea premium;12.5
J01;Juice;8

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

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

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

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

БлокНалаштування
1
Файл
src
  • Роль: source
  • Джерело: demo_products_upsert
  • Параметри читання:
    • Аркуш: CSV
    • Діапазон: A1:C3
    • Перший рядок — заголовок: так
    • Роздільник: ;
2
Формат чисел і дат
cast
  • Правила:
      • Тип: number
      • Поле: price
      • decimal_in: .
      • thousands_in:
      • extract: ні
      • invalid: error
      • Вихід: number
3
Підключення
sql
  • Роль: target
  • Підключення: demo_sql
  • Зовнішній об’єкт:
    • Об’єкт: demo_products
    • Спосіб запису: upsert
    • Ключові поля: sku

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

  • src out → cast in
  • cast out → sql in
Повна конфігурація графа JSON
{
  "version": 3,
  "nodes": [
    {
      "id": "src",
      "type": "file",
      "label": "src",
      "config": {
        "role": "source",
        "source_id": "demo_products_upsert",
        "options": {
          "sheet": "CSV",
          "range": "A1:C3",
          "header": true,
          "delimiter": ";"
        }
      }
    },
    {
      "id": "cast",
      "type": "number_format",
      "label": "cast",
      "config": {
        "rules": [
          {
            "kind": "number",
            "field": "price",
            "decimal_in": ".",
            "thousands_in": "",
            "extract": false,
            "invalid": "error",
            "output": "number"
          }
        ]
      }
    },
    {
      "id": "sql",
      "type": "connection",
      "label": "sql",
      "config": {
        "role": "target",
        "connection_id": "demo_sql",
        "external": {
          "object": "demo_products",
          "write_mode": "upsert",
          "key_fields": [
            "sku"
          ]
        }
      }
    }
  ],
  "edges": [
    {
      "source": "src",
      "target": "cast",
      "source_port": "out",
      "target_port": "in"
    },
    {
      "source": "cast",
      "target": "sql",
      "source_port": "out",
      "target_port": "in"
    }
  ]
}

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

skunameprice
T01Tea premium12.5
C01Coffee20
J01Juice8

T01 оновлено, J01 додано, C01 залишається. Ключ sku має бути унікальним у навчальній таблиці.

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

  1. Підготуйте навчальну таблицю demo_products і перевірте початковий стан із 2 рядків.
  2. Звірте типи стовпців: sku/name — текст, price — число; блок cast перетворює текст CSV на число.
  3. Виконайте попередню перевірку, потім запуск; прочитайте таблицю та звірте 3 наведені рядки.
  4. Повторіть той самий запуск: upsert за sku має оновити ті самі товари без створення дублікатів.

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

  • insert замість upsert не оновить T01 і може порушити унікальний ключ.
  • Порожній або повторний sku у вхідному файлі треба виправити до запису.
  • Не підміняйте навчальну таблицю робочою без перевірки схеми та прав запису.