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

Обновите существующий товар по ключу sku и добавьте отсутствующий в учебную таблицу SQL.

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

Нужно подключение учебной базы SQL с поддерживаемым коннектором и правами чтения и записи demo_products. Сам пример не выполняет запись SQL.

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

Начальное состояние demo_products:

skunameprice
T01Tea10
C01Coffee20

products.csv

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

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

Поясняющая схемаУвеличить ↗14. SQL: добавление и обновление справочника товаров. Схема примера 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 во входном файле до записи.
  • Не подставляйте рабочую таблицу вместо учебной без проверки её схемы и прав записи.