Загрузка данных из файлов
В этой главе описывается загрузка данных в TDG из файлов.
TDG предоставляет возможность загрузки данных в хранилища из
файлов с помощью файловых коннекторов. Поддерживается загрузка из двух
форматов: comma-separated values (csv) и JSON Lines (jsonl).
В момент своего создания файловый коннектор обрабатывает все входящие данные из указанного в конфигурации файла и затем удаляет его. После этого коннектор периодически проверяет существование файла и при его наличии загружает содержимое. Таким образом, для загрузки новых данных нужно помещать их в файл с тем же именем.
В этом руководстве рассмотрим пример загрузки данных из CSV-файла в TDG с помощью файлового коннектора.
Для выполнения примера требуются:
- настроенный кластер TDG;
- модель данных, сохраненная в файле
model.avsc. В примере используется модель из раздела по настройке модели данных.
Руководство включает в себя следующие шаги:
CSV-файл с данными для загрузки в TDG должен содержать в каждой строке поля одного объекта данных. Файл может содержать данные только одного модельного типа. Первая строка должна описывать формат строк с данными: в ней указывается порядок полей объекта.
CSV-файл countries.csv для загрузки нескольких объектов типа Country
может выглядеть следующим образом:
"title","phone_code""Argentina","+54""Australia","+61""Austria","+43"
Файл с данными необходимо загрузить в место, откуда его сможет вычитать TDG. У пользователя, под которым работает процесс TDG, должны быть права на чтение и запись в директорию с этим файлом.
Для выполнения примера загрузите файл на сервер, на котором работает
узел кластера с ролью connector, в директорию
/tmp/csv/.
Файловый коннектор в TDG можно настроить в файле конфигурации
.yml.
Создайте файл конфигурации config.yml
со следующими настройками:
types:__file: model.avscconnector:input:- name: csv_importertype: fileformat: csvworkdir: /tmp/csv/filename: countries.csvrouting_key: input_keyinput_processor:handlers:- key: input_keyfunction: classifier.callstorage:- key: countrytype: Country
В файле указываются:
- используемая модель данных;
- секция
connector- настройки файлового коннектора. Настройки включают в себя имя и тип коннектора, формат файла для загрузки (csv), его имя (countries.csv) и расположение (/tmp/csv/). Также определен ключ маршрутизацииrouting_keyсо значениемinput_key; - секция
input_processor- обработка входящих данных. Здесь заданы ключ для хранилища (country), в котором будет сохранен объектCountry, а также определен обработчик (classifier.call) для ключа маршрутизацииinput_key. Узнать больше про настройкуinput_processorможно в соответствующем разделе справочника;
Чтобы ознакомиться со всеми доступными параметрами конфигурации файлового коннектора, обратитесь к справочнику по настройке коннектора.
Данные из файла попадают через коннектор в обработчики (handlers),
заданные в файле конфигурации в секции input_processor.
В функции обработчика можно модифицировать поступившую информации, а
также определить ключ routing_key для дальнейшей обработки. В данном
случае следующим этапом будет сохранение в хранилище объектов Country.
В файле classifier.lua укажите функцию, которая будет запускаться в
input-обработчике. Функция задаст ключу routing_key значение
country:
return {call = function(param)param.routing_key = 'country'return paramend}
Чтобы выполнить пример, нужно загрузить архив с моделью данных, файлом конфигурации и функцией обработчика в TDG:
- Поместите файл с функцией обработчика
classifier.luaв папкуsrc. - Упакуйте в zip-архив:
- папку
src, внутри которой лежит файлclassifier.lua; - модель данных
model.avsc; - файл конфигурации
config.yml.
- папку
- Загрузите архив в TDG согласно инструкции.
Файловый коннектор выполнит загрузку данных в соответствии со своей конфигурацией немедленно после добавления.
В случае ошибки при работе файлового коннектора в директории workdir
будет создан файл с расширением .error с информацией об ошибке.
В результате работы файлового коннектора:
- Корректно форматированные объекты из файла будут загружены в соответствующее хранилище;
- Объекты, которые не удалось загрузить автоматически, попадут в ремонтную очередь;
Для проверки добавления новых объектов отправьте GraphQL-запрос на
чтение объектов типа Country (например, на вкладке GraphQL
веб-интерфейса TDG):
{Country {phone_codetitle}}
В результате вы получите список объектов, которые были описаны в CSV-файле:
{"data": {"Country": [{"title": "Argentina","phone_code": "+54"},{"title": "Australia","phone_code": "+61"},{"title": "Austria","phone_code": "+43"}]}}