N8n: Работа с таблицами и структурированными данными

N8n — это инструмент автоматизации рабочих процессов (workflow automation), который использует визуальный редактор на основе узлов (nodes). Работа с таблицами, электронными таблицами и структурированными данными является одной из ключевых задач при построении автоматизированных процессов. В N8n данные между узлами передаются в формате JSON, но множество узлов специализируется на приеме, преобразовании, обработке и отправке табличных данных из таких источников, как Google Sheets, Airtable, базы данных, CSV-файлы и другие.

Основные узлы для работы с таблицами

N8n предоставляет обширную коллекцию узлов (нод), которые позволяют взаимодействовать с табличными данными. Их можно разделить на несколько категорий.

Узлы для ввода данных (Input Nodes)

Эти узлы используются для загрузки табличных данных из внешних источников в рабочий процесс.

    • Google Sheets: Узел позволяет выполнять операции чтения, записи, обновления и удаления данных в Google Таблицах. Необходима предварительная настройка OAuth2 аутентификации.
    • Airtable: Обеспечивает полный CRUD-функционал (Create, Read, Update, Delete) для записей в базах Airtable, которые по сути являются сложными таблицами.
    • MySQL, PostgreSQL, Microsoft SQL Server: Узлы баз данных позволяют выполнять SQL-запросы (SELECT, INSERT, UPDATE) и получать результаты в виде таблицы.
    • Spreadsheet File: Ключевой узел для работы с файлами. Читает и записывает данные в форматах CSV, XLS, XLSX, ODS. Может принимать бинарные данные файла из предыдущих узлов или загружать по URL.
    • HTTP Request: Универсальный узел для получения данных из API, которые часто возвращаются в формате JSON, легко преобразуемом в таблицу.

    Узлы для преобразования и обработки данных (Transform Nodes)

    После получения данных их часто необходимо преобразовать, отфильтровать или реструктурировать.

    • Item Lists: Набор операций для работы с массивами данных (строками таблицы). Включает сортировку (Sort), агрегацию (Aggregate), объединение (Join), разделение (Split), ограничение количества (Limit), случайную выборку (Shuffle).
    • Table: Специализированный узел для трансформации табличных данных. Позволяет выполнять операции: создание таблицы из JSON, преобразование JSON в таблицу и наоборот, транспонирование, извлечение данных по строкам/столбцам.
    • Set: Позволяет добавлять, обновлять или удалять поля (столбцы) в каждом элементе (строке) данных. Полезно для вычисления новых значений.
    • Filter, IF: Узлы для условной обработки. Позволяют разделять поток данных на основе условий, применяемых к значениям в строках.

    Узлы для вывода данных (Output Nodes)

    Для сохранения или отправки обработанных табличных данных.

    • Google Sheets, Airtable, Database Nodes: Для записи результатов обратно в таблицы или базы данных.
    • Spreadsheet File: Для создания и вывода файла в выбранном формате (CSV, XLSX и т.д.). Файл может быть передан дальше по workflow (например, отправлен по email через узел Email Send).
    • Email Send: Позволяет прикреплять созданные файлы электронных таблиц к письмам.

    Практические примеры работы с таблицами

    Пример 1: Конвертация CSV в Google Sheets с фильтрацией

    Задача: Загрузить CSV-файл с FTP, отфильтровать строки, где значение в столбце «Статус» равно «Активен», и записать результат в новую таблицу Google Sheets.

    1. Узел FTP / SFTP: Скачиваем CSV-файл с сервера. На выходе узла — бинарные данные файла.
    2. Узел Spreadsheet File: Настраиваем операцию «From File». Указываем, что входные данные — бинарные. Выбираем формат CSV. Нода преобразует содержимое файла в массив JSON-объектов, где каждый объект — строка, а ключи — заголовки столбцов.
    3. Узел Filter: Настраиваем условие: «Статус» «равно» «Активен». Это разделит поток: одна ветка пойдет с отфильтрованными данными, другая — с остальными.
    4. Узел Google Sheets: Подключаемся к аккаунту, выбираем операцию «Append». Указываем ID таблицы и диапазон (например, «Лист1!A:Z»). Данные будут добавлены в конец таблицы.

    Пример 2: Агрегация данных из базы и отправка отчета в XLSX

    Задача: Ежедневно получать из MySQL данные о продажах, агрегировать их по менеджерам, создавать сводную таблицу и отправлять файлом на почту руководителю.

    1. Узел MySQL: Выполняем SQL-запрос: SELECT manager, amount, date FROM sales WHERE date = CURDATE().
    2. Узел Item Lists (Aggregate): Группируем данные по полю «manager». Операция суммирования (SUM) применяется к полю «amount». На выходе получим массив объектов вида [{"manager": "Иванов", "total_amount": 15000}].
    3. Узел Table (Create Table from JSON): Преобразуем агрегированный JSON в четкую таблицу. Указываем, что ключи объектов («manager», «total_amount») станут заголовками столбцов.
    4. Узел Spreadsheet File: Настраиваем операцию «To File». Выбираем формат XLSX. Можно задать имя файла, например, «Отчет_продаж_{{ $now.format(‘YYYY-MM-DD’) }}.xlsx».
    5. Узел Email Send: Настраиваем получателя, тему, текст письма. В разделе «Attachments» добавляем бинарные данные из предыдущего узла. Файл будет прикреплен к письму.

    Ключевые принципы и особенности обработки данных

    Структура данных в N8n

    N8n работает с понятием «items» (элементы). Каждый элемент — это объект JSON, представляющий одну строку данных. Весь поток данных — это массив таких объектов. Например, CSV с двумя столбцами преобразуется в:

    • Item 1: {"Name": "John", "Email": "john@example.com"}
    • Item 2: {"Name": "Jane", "Email": "jane@example.com"}

    Большинство узлов-преобразователей работают с каждым item по отдельности или со всем массивом сразу.

    Использование выражений (Expressions) и переменных

    В полях настройки почти любого узла можно использовать выражения для динамических значений. Это мощный инструмент для работы с таблицами.

    • Обращение к данным текущего элемента: {{ $json.Name }} — получит значение поля «Name» из текущей строки.
    • Обращение к данным первого элемента: {{ $('Name').item.json.Name }}.
    • Использование функций: {{ $json.Price
    • $json.Quantity }} — вычисление новой ячейки.
    • Работа с индексами: {{ $index }} — возвращает порядковый номер элемента (начиная с 0), что полезно для нумерации строк.

    Обработка больших объемов данных

    При работе с тысячами строк важно учитывать:

    • Асинхронная загрузка: Некоторые узлы (например, HTTP Request) поддерживают асинхронную загрузку для обработки большого количества запросов без таймаута.
    • Разделение потока (Split Out Items): Многие узлы имеют опцию «Split Into Items». Если она включена, узел, получивший на вход массив, передаст каждый его элемент по отдельности следующему узлу. Это может быть критично для узлов, которые выполняют операции записи (например, чтобы не превысить лимиты API).
    • Пагинация: Узлы для баз данных и API часто поддерживают пагинацию, позволяя загружать данные по частям.

    Сравнение узлов для работы с таблицами

    Узел Основное назначение Ключевые операции Форматы данных
    Spreadsheet File Чтение/запись файлов From File, To File CSV, XLS, XLSX, ODS, HTML, RTF
    Google Sheets Интеграция с облачными таблицами Read, Append, Update, Delete Структура Google Таблиц
    Table Трансформация структуры данных Create Table, JSON to Table, Transpose, Extract JSON ↔ Table
    Item Lists Операции с массивами элементов Sort, Aggregate, Limit, Split, Join Массивы JSON

    Ответы на часто задаваемые вопросы (FAQ)

    Как импортировать CSV-файл в N8n?

    Используйте узел «Spreadsheet File». Если файл находится на вашем компьютере, загрузите его через триггер «Manual» (вкладка «Binary Data»). Если файл доступен по URL или находится на FTP/S3, используйте соответствующие узлы для его загрузки, а затем передайте бинарные данные в «Spreadsheet File», выбрав операцию «From File» и указав правильный формат (CSV). В настройках можно указать разделитель, наличие заголовков и кодировку.

    Почему данные из Google Sheets приходят в неправильном формате?

    Google Sheets API по умолчанию возвращает данные как строки (String). Числа, даты могут быть преобразованы в текст. Для корректной обработки используйте в узле Google Sheets опцию «Data Mode: Rendered». Также можно использовать узел «Convert Data Type» для явного преобразования типов данных после загрузки, либо применять функции выражений, например, {{ parseInt($json.NumberField) }}.

    Как записать данные в новую строку Excel/Google Sheets, а не перезаписать старые?

    • Google Sheets: Используйте операцию «Append». Данные будут добавлены после последней заполненной строки указанного листа.
    • Spreadsheet File (To File): Каждый запуск узла создает новый файл. Для добавления в существующий файл необходимо сначала прочитать его («From File»), объединить старые и новые данные с помощью узла «Item Lists (Join)», а затем записать полный набор данных обратно в файл операцией «To File».

    Как работать с несколькими листами (вкладками) Excel/Google Sheets?

    В узле «Google Sheets» при операциях чтения/записи необходимо явно указать название листа или его ID в параметре «Range» (например, «Лист2!A:Z»). В узле «Spreadsheet File» при чтении файла можно выбрать конкретный лист по имени или индексу. При записи можно указать имя листа в настройках.

    Как фильтровать и сортировать большие таблицы?

    Для фильтрации используйте узел «Filter» или «IF». Для сортировки — узел «Item Lists (Sort)». Укажите поле, по которому производится сортировка, и порядок (по возрастанию/убыванию). Эти операции применяются ко всему массиву данных, загруженному в память, поэтому для очень больших таблиц (миллионы строк) рекомендуется предварительная фильтрация на уровне источника (например, с помощью WHERE в SQL-запросе).

    Можно ли объединять данные из двух разных таблиц?

    Да, для этого используется узел «Item Lists (Join)». Он работает аналогично JOIN в SQL. Необходимо иметь два потока данных (например, из двух разных узлов Google Sheets или баз данных). В настройках узла указываются поля, по которым происходит соединение (ключи), и выбирается тип объединения (Inner, Left, Outer). Результатом будет новый набор элементов с объединенными полями из обеих таблиц.

    Как обрабатывать ошибки при работе с таблицами (например, отсутствие столбца)?

    Рекомендуется использовать следующие подходы:

    • Проверять структуру данных с помощью узла «Function» или «IF», используя выражения типа {{ $json.hasOwnProperty('ColumnName') }}.
    • Использовать узел «Set» со значением по умолчанию для создания отсутствующего столбца.
    • Настраивать обработку ошибок на уровне workflow, используя вкладку «Error Trigger» в узлах, которые могут завершиться с ошибкой (например, HTTP Request).

    Как автоматизировать запуск workflow при изменении таблицы?

    Прямого триггера на изменение файла CSV на диске нет. Решения:

    1. Использовать триггер «Schedule» для периодической проверки.
    2. Для Google Sheets использовать встроенный триггер «On change» в узле Google Sheets Trigger.
    3. Для облачных хранилищ (Dropbox, S3) использовать соответствующие триггеры на добавление/изменение файла.
    4. Использовать узел «Watchfile» (для локальных файлов в среде, где запущен n8n).

Работа с таблицами в N8n — это процесс загрузки, преобразования и интеграции структурированных данных между множеством сервисов. Понимание принципов работы узлов Spreadsheet File, Table, Item Lists и умение использовать выражения являются основой для построения эффективных автоматизаций, связанных с обработкой табличной информации.

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Войти

Зарегистрироваться

Сбросить пароль

Пожалуйста, введите ваше имя пользователя или эл. адрес, вы получите письмо со ссылкой для сброса пароля.