Загрузка данных из файлов¶
В этой главе описывается загрузка данных в TDG из файлов.
TDG предоставляет возможность загрузки данных в хранилища из файлов
с помощью файловых коннекторов. Поддерживается загрузка из двух форматов:
comma-separated values
(csv
) и JSON Lines (jsonl
).
В момент своего создания файловый коннектор обрабатывает все входящие данные из указанного в конфигурации файла и затем удаляет его. После этого коннектор периодически проверяет существование файла и при его наличии загружает содержимое. Таким образом, для загрузки новых данных нужно помещать их в файл с тем же именем.
В этом руководстве рассмотрим пример загрузки данных из CSV-файла в TDG с помощью файлового коннектора.
Для выполнения примера требуются:
модель данных, сохраненная в файле
model.avsc
. В примере используется модель из раздела по настройке модели данных.
Руководство включает в себя следующие шаги:
Создание и загрузка файла с данными¶
CSV-файл с данными для загрузки в TDG должен содержать в каждой строке поля одного объекта данных. Файл может содержать данные только одного модельного типа. Первая строка должна описывать формат строк с данными: в ней указывается порядок полей объекта.
CSV-файл countries.csv
для загрузки нескольких объектов типа Country
может
выглядеть следующим образом:
"title","phone_code"
"Argentina","+54"
"Australia","+61"
"Austria","+43"
Note
Значения обнуляемых полей могут быть пропущены. В этом случае они получат значение null
.
Файл с данными необходимо загрузить в место, откуда его сможет вычитать TDG. У пользователя, под которым работает процесс TDG, должны быть права на чтение и запись в директорию с этим файлом.
Для выполнения примера загрузите файл на сервер, на котором работает узел кластера
с ролью connector, в директорию /tmp/csv/
.
Настройка коннектора¶
Файловый коннектор в TDG можно настроить в файле конфигурации .yml
.
Создайте файл конфигурации config.yml
со следующими настройками:
types:
__file: model.avsc
connector:
input:
- name: csv_importer
type: file
format: csv
workdir: /tmp/csv/
filename: countries.csv
routing_key: input_key
input_processor:
handlers:
- key: input_key
function: classifier.call
storage:
- key: country
type: 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 param
end
}
Загрузка конфигурации¶
Чтобы выполнить пример, нужно загрузить архив с моделью данных, файлом конфигурации и функцией обработчика в TDG:
Поместите файл с функцией обработчика
classifier.lua
в папкуsrc
.Упакуйте в zip-архив:
папку
src
, внутри которой лежит файлclassifier.lua
;модель данных
model.avsc
;файл конфигурации
config.yml
.
Загрузите архив в TDG согласно инструкции.
Файловый коннектор выполнит загрузку данных в соответствии со своей конфигурацией немедленно после добавления.
Warning
В результате срабатывания файлового коннектора файл, из которого выполнялась загрузка, будет удалён.
В случае ошибки при работе файлового коннектора в директории workdir
будет создан
файл с расширением .error
с информацией об ошибке.
Проверка загрузки данных¶
В результате работы файлового коннектора:
Корректно форматированные объекты из файла будут загружены в соответствующее хранилище;
Объекты, которые не удалось загрузить автоматически, попадут в ремонтную очередь;
Для проверки добавления новых объектов отправьте GraphQL-запрос на чтение объектов
типа Country
(например, на вкладке GraphQL веб-интерфейса TDG):
{
Country {
phone_code
title
}
}
В результате вы получите список объектов, которые были описаны в CSV-файле:
{
"data": {
"Country": [
{
"title": "Argentina",
"phone_code": "+54"
},
{
"title": "Australia",
"phone_code": "+61"
},
{
"title": "Austria",
"phone_code": "+43"
}
]
}
}