Для чтения данных
Шаги для чтения (считыватели) могут считывать данные из входных файлов, получать их из подключенного дополнительного входного порта, читать из базы данных. Шаг DATA_GENERATOR занимается генерацией данных и тоже относится к этой группе, поскольку является начальным шагом.
Различают следующие шаги для чтения:
FLAT_FILE_READER - читает данные из плоского файла
DATABASE_READER - читает данные из базы данных
DATA_GENERATOR - генерирует данные по шаблону
SPREADSHEET_READER - читает данные из файла в форматах xlsx, xls
FLAT_FILE_READER
FLAT_FILE_READER считывает данные из плоских файлов в формате CSV
и TXT
с разделителями, фиксированной длины или смешанных текстовых файлов.
Порты FLAT_FILE_READER:
Тип порта | Номер | Обязательный | Описание | Метаданные |
---|---|---|---|---|
Output | 0 | да | Для корректных записей | Любые |
Output | 1 (в разработке) | нет | Для не корректных записей | Структура метаданных ошибок приведена ниже |
Атрибут | Обязательный | Описание | Возможные значения |
---|---|---|---|
fileURL | да | Путь к источнику данных (плоский файл) для чтения. | ${READ_DIR}/in.txt |
charset | нет | Кодировка файла, читаемого с помощью этого шага. | encoding="windows-1251" |
dataPolicy | нет | Определяет обработку неправильно отформатированных или неверных данных. Может принимать значения "strict", "lenient" | dataPolicy="strict" по умолчанию |
trim | нет | Указывает, следует ли удалять начальные и конечные пробелы из строк в момент прохождения данных через FLAT_FILE_READER. | trim="true" по умолчанию |
quotedStrings1 | нет | Поля, содержащие специальные символы (запятая, новая строка или двойные кавычки), должны быть заключены в кавычки. В качестве символа кавычки принимаются только одинарные/двойные кавычки. Если установлено значение true, специальные символы не рассматриваются как разделители и удаляются при чтении компонентом. Пример: Чтобы прочитать входные данные "25"|"Джон", установите для параметра quotedStrings значение true и установите для символа кавычки значение quoteChar="" ". В результате будут получены два поля: 25|Джон. | quotedStrings="true" по умолчанию |
quoteChar1 | нет | Символы, в которые будет заключено значение поля при quotedStrings="true". | quoteChar="" " |
fieldDelimiter | нет | Разделитель полей | fieldDelimiter="," |
recordDelimiter | нет | Разделитель записей | recordDelimiter="/n" |
По умолчанию значение этого атрибута наследуется из метаданных порта ?вывода? 0.
Пример. Чтение файла.
Например, есть файл customers.csv. Каждая запись в нем содержит три поля: «дата», «фамилия» и «имя», разделенные символом «|». Нужно считать этот файл для дальнейшей обработки в системе.
Данные в файле:
01.02.2011|Горилов|Алексей
29.12.2013|Нечаев|Илья
25.11.2016|Васькин|Николай
23.10.2019|Иванов|Григорий
19.09.2022|Горбунов|Евгений
Решение:
В файле задания нужно описать выходные метаданные шага. Опишите поля «date», «last_name» и «first_name». Установите для них типы данных «date», «string» и «string» соответственно.
<Metadata id="ObjectWithPos">
<Record fieldDelimiter="|" recordDelimiter="\n">
<Field name="date" type="date" format="dd.mm.YY"/>
<Field name="last_name" type="string"/>
<Field name="first_name" type="string"/>
</Record>
</Metadata>
С помощью атрибута format="yyyy-MM-dd HH:mm:ss.SSS" можно указать используемый формат даты.
Файл будет считан системой во внутреннюю память:
date | last_name | first_name |
---|---|---|
01.02.2011 | Гончаров | Алексей |
29.12.2013 | Нечаев | Илья |
25.11.2016 | Васькин | Николай |
23.10.2019 | Серов | Григорий |
19.09.2022 | Глинка | Евгений |
Обрезание данных
- Входные строки обрабатываются в соответствии с типом данных поля следующим образом:
- Пробелы удаляются как из начала, так и из конца поля для типов данных
boolean
,date
,integer
. - Входная строка остаётся полем, включающим начальные и конечные пробелы в случае типа данных
string
.
- Если для атрибута trim установлено значение
true
, все начальные и конечные пробельные символы удаляются. Поле, состоящее только из пробелов, преобразуется в нулевое значение (строка нулевой длины). Значениеfalse
подразумевает сохранение всех начальных и конечных символов пробелов. Входная строка может содержать пробелы только если представляет строковый тип данных.
DATABASE_READER
DATABASE_READER считывает данные из базы данных. Поддерживает подключение к СУБД PostgreSQL, Oracle, MySQL. Подробнее про подключение к базам данных можно прочитать в разделе Соединения с базами данных.
Тип порта | Номер | Обязательный | Описание | Метаданные |
---|---|---|---|---|
Output | 0 | да | Для корректных записей | Любые, но одинаковые на всех подключённых портах |
1-n | нет |
Атрибут | Обязательный | Описание | Возможные значения |
---|---|---|---|
dbConnection | да | Идентификатор соединения с базой данных, которое будет использоваться для доступа к базе данных |
|
sqlQuery | да | SQL-запрос к базе, определенный в графе. |
|
Пример. Чтение записей из базы данных.
С помощью DATABASE_READER прочитайте данные из базы данных OneBridge
из таблицы Customers
.
Решение:
Для описания параметров соединения можно указать строку подключения в элементе Connection в атрибуте dbURL
.
Описание параметров соединения в элементе Connection:
<Global>
...
<Connection id="CONN_A" dbURL="${CONN_TYPE}://${DB_USER}:${DB_PASSWORD}@${DB_URL}:${DB_01_PORT}/${DB_DATABASE}"/>
<GraphParameters>
<GraphParameter name="CONN_TYPE" value="mysql"/>
<GraphParameter name="DB_USER" value="user007"/>
<GraphParameter name="DB_URL" value="234.1.1.0"/>
<GraphParameter name="DB_PORT" value="5432"/>
<GraphParameter name="DB_DATABASE" value="OneBridge"/>
</GraphParameters>
<!-- <GraphParameters scopeNonce="d3WVmJ8eCaIC">
<GraphParameter name="DB_PASSWORD" secure="true" value="Ir2m0qTbu12WW7RJILIvlv499fpbggCl02"/>
</GraphParameters>-->
...
</Global>
SQL-запрос для чтения данных из базы, записывается в атрибут Attr, определенный в элементе Node:
<Node id="db_reader" guiX="250" guiY="100" guiName="DATABASE_READER" dbConnection="CONN_A" type="DATABASE_READER">
<Attr name= “sqlQuery”>
<![CDATA[
SELECT date, last_name, first_name
FROM public."Customers";
]]>
</Attr>
</Node>
Этот запрос считает значения полей date
, last_name
, first_name
из таблицы Customers
из базы данных во внутреннюю память системы.
DATA_GENERATOR
DATA_GENERATOR генерирует данные по шаблону, вместо чтения данных из файла, базы данных или любого другого источника данных. Этот шаг может отправлять разные записи на разные выходные порты, используя возвращаемые значения функции generate
.
Тип порта | Номер | Обязательный | Описание | Метаданные |
---|---|---|---|---|
Output | 0 | да | Для сгенерированных записей | Любые |
1-n | нет |
Метаданные на выходных портах могут отличаться.
Атрибут | Обязательный | Описание | Возможные значения |
---|---|---|---|
generate | да | Определение способа создания записей, записанное в графе на языке преобразований |
|
recordsNumber | нет | Количество записей, которые необходимо создать. Отрицательное значение позволяет создать количество записей, ограниченное кодом в generate. | recordsNumber="1" |
Шаблон записи
Шаблон записи — это строка, содержащая все постоянные поля сгенерированных записей в виде записей с разделителями (с разделителями, определенными в метаданных на выходном порте) или фиксированной длины (с размерами, определенными в метаданных на выходном порте).
Последовательность полей
Последовательность полей можно определить в диалоговом окне, которое открывается после нажатия атрибута Последовательности. Диалоговое окно «Последовательности» выглядит следующим образом:
Диалоговое окно «Последовательности»
Случайные поля
Этот атрибут определяет значения всех полей, которые генерируются случайным образом. Для каждого поля вы можете определить его диапазон (т.е. минимальное и максимальное значения). Эти значения относятся к соответствующим типам данных согласно метаданным. Вы можете назначить случайные поля в диалоговом окне «Редактировать ключ», которое открывается после нажатия атрибута «Случайные поля».
Диалоговое окно «Редактирование значения»
Слева находится панель «Поля», справа — «Случайные поля», а внизу — панель «Случайные диапазоны». На последней панели вы можете указать диапазоны выбранного случайного поля. Там вы можете ввести конкретные значения. Перемещать поля между панелями «Поля» и «Случайные поля» можно, как описано выше – нажатием кнопок «Стрелка влево» и «Стрелка вправо».
Пример. Создание записей.
Пример в разработке
SPREADSHEET_READER
SPREADSHEET_READER считывает данные с указанных листов файлов формата .xls
или .xlsx
. Позволяет указывать маппинг данных из таблицы и метаданных OneBridge.
Должен иметь один выходной порт для успешно считанных записей.
Тип порта | Номер | Обязательный | Описание | Метаданные |
---|---|---|---|---|
Output | 0 | да | Для успешно считанных записей | Любые |
1 | не | Для некорректных считанных записей |
Атрибут | Обязательный | Описание | Возможные значения |
---|---|---|---|
fileURL | да | Путь к файлу проекта, из которого читать данные. | fileURL="testFile.txt" |
sheet | нет | Название или номер листа в excel документе. Нумерация страниц начинается с 0. Можно перечислить в атрибуте sheet через запятую либо указать множество листов с помощью «*», чтобы все листы читались по порядку с использованием одного маппинга для всех. | sheet="Sheet1" |
mapping | нет | Сопоставляет ячейки электронной таблицы с полями OneBridge. |
|
dataPolicy (в разработке) | нет | Определяет обработку неправильно отформатированных или неверных данных. Может принимать значения "strict", "lenient" | dataPolicy="strict" по умолчанию |
password | нет | Пароль для расшифровки файла,если он запаролен. Актально только для формата xlsx. | password="faihfi4t9(&Yhflaieg)" |
Пример. Сопоставление полей по порядку.
Нужно прочитать из файла таблицы с количеством проданных некой компанией товаров за первый квартал года. Таблицы имеют одинаковую структуру: название товара, январь, февраль, март. Компания международная. Каждый партнер может использовать свой язык, поэтому вы не можете сопоставить поля по имени.
лист 1:
Product | January | February | March |
---|---|---|---|
T1 | 620 | 600 | 700 |
T2 | 150 | 150 | 100 |
лист 2:
Товар | Январь | Февраль | Март |
---|---|---|---|
T1 | 500 | 400 | 600 |
T2 | 300 | 400 | 500 |
Решение:
Укажите атрибуты: fileURL
, sheet
, mapping
.
Заполните маппинг следующим образом:
<Node fileURL="${DATAIN_DIR}/Book2.xlsx" sheet="*" type="SPREADSHEET_READER">
<attr name="mapping"><![CDATA[<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<mapping>
<globalAttributes>
<orientation>VERTICAL</orientation>
<step>1</step>
<writeHeader>true</writeHeader>
</globalAttributes>
<defaultSkip>1</defaultSkip>
<headerGroups>
<headerGroup skip="1">
<autoMappingType>ORDER</autoMappingType>
<headerRanges>
<headerRange begin="A1"/>
<headerRange begin="B1"/>
<headerRange begin="C1"/>
<headerRange begin="D1"/>
</headerRanges>
</headerGroup>
</headerGroups>
</mapping>
]]></attr>
</Node>