Маппинг данных что это
Перейти к содержимому

Маппинг данных что это

  • автор:

Big Data Mapping: что такое маппирование больших данных

В этой статье рассмотрено, что такое маппирование больших данных, как это связано с Data Science, когда и как часто выполняется этот процесс, а также, какие программные инструменты позволяют автоматизировать Big Data mapping.

Что такое маппирование данных и где это используется

Представим, что в одной из корпоративных систем сведения о семейном положении сотрудника хранятся так, что «1» в поле «дети» означает их наличие. В другой системе эти же данные записаны с помощью значения «True», а в третьей – словом «да». Таким образом, разные системы для обозначения одних и тех же данных используют разные отображения. Чтобы привести информацию к единообразию, следует сопоставить обозначения одной системы обозначениям в других источниках, т.е. выполнить процедуру мэппинга данных (от английского map – сопоставление). В широком смысле маппирование – это определение соответствия данных между разными семантиками или представлениями одного объекта в разных источниках. На практике этот термин чаще всего используется для перевода или перекодировки значений [1].

Дисциплина управления данными, Data Management, трактует маппинг как процесс создания отображений элементов данных между двумя различными моделями, который выполняется в начале следующих интеграционных задач [2]:

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

Таким образом, маппирование данных представляет собой процесс генерации инструкций по объединению информации из нескольких наборов данных в единую схему, например, конфигурацию таблицы. Поскольку схемы данных в разных источниках обычно отличаются друг от друга, информацию из них следует сопоставить, выявив пересечение, дублирование и противоречия [3].

С прикладной точки зрения можно следующие приложения маппинга данных [4]:

  • одноразовая миграция, когда данные перемещаются из одной системы в другую. После удачного завершения этого процесса новое место назначения становится местом хранения перенесенных данных, а исходный источник удаляется. В этом случае мапирование нужно для сопоставления исходных полей с полями назначения.
  • Регулярная интеграция данных, когда выполняется периодический обмен данными между несколькими разными системами. Как и при вышеописанном переносе данных, маппинг нужен для сопоставления исходных полей с полями назначения.
  • Преобразование данных из одного формата в другой, включая очистку (удаление пропущенных значений и дублей), изменение типов, агрегирование, обогащение и прочие преобразования.

В Big Data мэппинг выполняется при загрузке информации в озеро данных (Data Lake) и корпоративное хранилище (DWH, Data Warehouse). Чем Data Lake отличается от DWH, рассмотрено здесь. В этом случае маппинг реализуется в рамках ETL-процесса (Extract, Transform, Load) на этапе преобразования. При этом настраивается соответствие исходных данных с целевой моделью (рис. 1). В случае реляционных СУБД для идентификации одной сущности в разных представлениях нужно с ключами таблиц и настройкой отношений (1:1, *:1, 1:* или *:*) [5].

Рис.1. Маппирование данных при консолидации таблиц

В Data Science маппирование данных входит в этап их подготовки к ML-моделированию, когда выполняется формирование датасета в виде матрицы значений для обработки соответствующими алгоритмами. В частности, когда Data Scientist обогащает исходный датасет данными из сторонних источников, он занимается маппингом данных. Проводить процедуру дата мэппинга можно вручную или автоматически с помощью соответствующих подходов и инструментов, которые рассмотрены далее.

Особенности процесса дата мэппинга

На практике трудоемкость мэппинга зависит от следующих факторов [3]:

  • размеры сопоставляемых датасетов;
  • количество объединяемых источников информации;
  • форматы схемы данных, в т.ч. первичные и внешние ключи в реляционных таблицах;
  • различия между исходными и целевой структурами данных;
  • иерархия данных.

Облегчить процесс маппирования можно за счет метаданных – сведениях о признаках и свойствах объектов, которые позволяют автоматически искать и управлять ими в больших информационных потоках. В частности, если каждое приложение будет выполнять публикацию метаданных, что позволит создать их стандартизированный реестр, то маппинг будет полностью автоматизированным [2]. Однако в большинстве случаев процесс мапирования данных не полностью автоматизирован и состоит из следующих этапов [4]:

  1. определение данных, которые нужно переместить, включая таблицы, поля в каждой таблице и формат поля после его перемещения. При регулярной интеграции также определяется частота передачи данных.
  2. сопоставление исходных полей с полями назначения;
  3. преобразование значений, включая кодирование формулы или правила преобразования;
  4. тестирование полученных результатов переноса (обогащения) путем сравнения их с образцами данных из первичных источников.
  5. развертывание production-решений по регулярной консолидации данных в соответствии с планом переноса или интеграции.

При работе с большими объемами данных выделяют 3 основных подхода к маппированию [2]:

Рис. 2. Маппирование в Talend Data Fabric

  • ручное кодирование, когда приходится писать код для консолидации данных из разных таблиц или форматов. Сюда же можно отнести сопоставление данных в графическом режиме, когда GUI специализированных программ позволяет пользователю рисовать линии от полей в одном наборе данных до соединения с другим источником. При этом «под капотом» автоматически генерируется программный код преобразования на SQL, XSLT, Java, C++ и прочих языках программирования. Такие графические средства часто встречаются в ETL-инструментах в качестве основного средства задания мэппингов для перемещения данных. Например, SAP BODS, Informatica PowerCenter и Talend Data Fabric (рис. 2).
  • data-driven мэппинг, который сочетает оценку фактических значений данных в разных источниках данных с использованием эвристики и статистики для автоматического обнаружения сложных взаимосвязей между ними. Этот интеллектуальный подход используется для поиска преобразований между разными датасетами, выявления подстрок, конкатенаций, математический зависимостей, условных операторов и прочих логический преобразований. Также он позволяет найти исключения, которые не соответствуют обнаруженной логике преобразования. Обычно именно этот подход используется в специализированных системах подготовки данных к ML-моделированию, например, SAS, IBM SPSS и т.д.
  • семантический маппинг похож на вышеописанный data-driven метод, но здесь к интеллектуальному сопоставлению также подключается реестр метаданных. Например, если в исходной системе указано FirstName, а в системе-приемнике есть поле PersonGivenName, сопоставление будет успешно выполнено, если эти элементы данных перечислены как синонимы в реестре метаданных. Семантическое сопоставление способно выявить только точные совпадения между столбцами данных, но не обнаружит никакой логики преобразования или исключений между столбцами. На практике этот подход применяется при интеграции реляционных СУБД и построении DWH.

Также стоит упомянуть полуавтоматическое маппирование в виде конвертирования схем данных, когда специализированная программа сравнивает источники данных и целевую схему для консолидации. Затем разработчик проверяет схему маппирования и вносит исправления, где это необходимо. Далее программа конвертирования схем данных автоматически генерирует код на C++, C # или Java для загрузки данных в систему приемник (рис. 3) [3].

Рис. 3. Конвертирование схем данных в процессе мэппинга

Далее рассмотрим, какие инструментальные средства реализуют вышеперечисленные подходы.

Инструменты маппирования больших данных

Как и большинство прикладных решений, все средства для маппинга данных можно разделить на 3 категории [6]:

  • проприетарные (on-premise), например, Centerprise Data Integrator, CloverDX, IBM InfoSphere, Informatica PowerCenter, Talend Data Integration. Как правило, эти продукты широко используются в корпоративном секторе.
  • открытые (open-source), которые дешевле предыдущих аналогов и являются более легковесными с точки зрения функциональных возможностей. Однако их вполне достаточно для индивидуальных исследований Data Science. Наиболее популярными в этой категории считаются Pentaho, Pimcore, Talend Open Studio.
  • облачныесервисы, такие как, Informatica Cloud Data Integration, Oracle Integration Cloud Service, Talend Cloud Integration, Dell Boomi AtomSphere, DX Mapper, Alooma, Jitterbit. Современные Cloud-решения считаются безопасными, быстрыми, масштабируемыми, относительно недорогими и удобными для использования. Поэтому их можно применять как в корпоративных, так и в личных целях.

Большинство перечисленных продуктов поддерживают все 3 подхода к маппированию: ручной (GUI и кодирование), data-driven и семантический. Однако, семантический мэппинг требует наличия реестров метаданных, что имеется далеко не в каждом предприятии. А публичные реестры метаданных, такие как национальные, отраслевые или городские репозитории [7] не всегда напрямую коррелируют, например, с задачами построения локального DWH. Но, наряду с открытыми государственными данными и другими публичными датасетами, их можно использовать в исследовательских DS-задачах.

При выборе конкретного инструмента для маппинга больших данных стоит учитывать следующие факторы:

  • cложность данных – объемы, разнообразие форматов и схем. Этот критерий непосредственно связан со спецификой задачи. Например, если требуется обогатить не слишком большой датасет для ML-моделирования, сопоставив данные из нескольких источников, Data Scientist может воспользоваться простым облачным сервисом или написать собственный скрипт. Однако, в случае регулярной загрузки информации из множества СУБД в корпоративное хранилище или озеро данных, необходимо выбирать надежное ETL-средство enterprise-уровня.
  • расширяемость– наглядный GUI повышает удобство пользования, однако, на практике часто возникает задача кастомизации автоматически сгенерированных соответствий. Поэтому инструмент маппирования должен включать возможность править созданные мэппинги, настраивать правила и писать собственные преобразования в виде программных скриптов.
  • стоимость, включая все затраты на приобретение, использование, техническую поддержку и прочие расходы.

Резюме

Итак, маппирование данных – это важная часть процесса работы с данными, в том числе и для Data Scientist’а. Эта процедура выполняется в рамках подготовки к ML-моделированию, в частности, при обогащении датасетов. В случае одноразового формирования датасета из нескольких разных источников сопоставление данных можно выполнить вручную или с помощью самописного Python-скрипта. Однако, такой подход не применим в промышленной интеграции нескольких информационных систем или построении корпоративных хранилищ и озер данных. Поэтому знание инструментов дата мэппинга пригодится как Data Scientist’у, так и Data Engineer’у. Наконец, сопоставление данных с целью избавления от дублирующихся и противоречивых значений входит в задачи обеспечения качества данных (Data Quality) [4]. В свою очередь, Data Quality относится к области ответственности стратега по данным и инженера по качеству данных. Таким образом, понимание процесса маппирования необходимо каждому Data-специалисту.

  1. https://ru.wikipedia.org/wiki/Мапирование
  2. https://en.wikipedia.org/wiki/Data_mapping
  3. https://www.xplenty.com/blog/data-mapping-an-overview-of-data-mapping-and-its-technology/
  4. https://www.talend.com/resources/data-mapping/
  5. https://habr.com/ru/post/248231/
  6. https://dzone.com/articles/what-is-data-mapping
  7. https://en.wikipedia.org/wiki/Metadata_registry

Руководство администратора

dev_icon

Скоро эта страница будет выглядеть по-новому

term_icon

Маппинг — это описание соответствий между импортируемыми данными и объектами «Первой Формы», в которые эти данные записываются. Для каждого импортируемого элемента создается отдельная строка маппинга.

Чтобы получить образец маппинга для данной настройки импорта, нажмите на ссылку «Пример данных». При этом будет создан и загружен файл-образец формата CSV.

import7

Получение примера маппинга данных для настройки импорта.

Маппинг настраивается в окне настроек импорта.

import9

Настройки маппинга (шапка таблицы настроек).

Имя поля во внешней системе:

• колонка CSV или Excel, поле в SQL;

• для импорта из другого приложения «Первая Форма»:

o TaskId (ID задачи),

o text (текст задачи),

o ResponsibleId (ID ответственного исполнителя),

o OwnerId (ID заказчика),

o StepId (ID перехода на маршруте задачи),

o epXXX (для ДП, где XXX — ID ДП),

o epXXX_ZZZ (для столбца ДП «Таблица», где XXX — ID ДП «Таблица», а ZZZ — ID столбца таблицы).

warning_icon

Имя внешнего идентификатора чувствительно к регистру (например, TaskId правильно, TaskID — нет)

Идентификатор в «Первой Форме»

При импорте задач — основной или дополнительный параметр, в который импортируются данные.

• для номера задачи указывается TaskId (вводится вручную),

• ДП выбираются из выпадающего списка (по ID ДП).

При импорте пользователей и оргструктуры — поле таблицы БД в «Первой Форме» (выбирается из выпадающего списка, см. описание).

Сущность, к которой относятся данные:

• Task — для TaskId,

• ExtParam — для ДП,

• GUID — для ДП типа Lookup при импорте из CSV,

• OrgStructure — для орг. единицы,

• User — для пользователя,

• File — для файла,

• TableColumn — для колонки ДП «Таблица» (используется только в заказных модулях импорта)

Тип импортируемых данных (практически всегда можно указывать String )

Маппинг данных из реляционной БД

Иногда возникают ситуации, когда решение задачи выборки данных из реляционной БД не укладывается в возможности используемой в проекте ОРМ, например, либо из-за недостаточной скорости работы самой ОРМ, либо не совсем оптимальных SQL запросов генерируемых ею. В таком случае обычно приходится писать запросы вручную.

Проблема в том, что данные из БД (в т.ч. в ответ на JOIN запрос) возвращаются в виде “плоского” двухмерного массива никак не отражающего сложную “древовидную” структуру данных приложения. Работать с таким массивом дальше крайне неудобно, поэтому требуется более-менее универсальное решение, позволяющее привести этот массив в более подходящий вид по заданному шаблону.

Решение было найдено, удобное и достаточно быстрое.

На сколько быстрое

Для оценки скорости работы библиотеки я собрал небольшой испытательный стенд на котором скорость работы моей библиотеки сравнивается со скоростью работы Eloquent. Для замеров использовался пакет phpbench.

Для того чтобы развернуть стенд у себя:

git clone https://github.com/hrustbb2/env-arrayproc-bench.git cd env-arrayproc-bench ./env

Здесь я использовал инструмент описанный в моей предыдущей статье.

Затем в меню выбираем: 1 Develop, затем: 1 Build, затем 2 Deploy and Up;
Затем запускаем тесты 5. Run tests

В базе 3000 книг. Результаты получились следующие:

+-----------------+-----+------+------+-------------+--------------+ | subject | set | revs | iter | mem_peak | time_rev | +-----------------+-----+------+------+-------------+--------------+ | benchEloquent | 0 | 1 | 0 | 76,442,912b | 12,781.612ms | | benchEloquentId | 0 | 10 | 0 | 5,123,224b | 16.432ms | | benchProc | 0 | 1 | 0 | 36,364,176b | 1,053.937ms | | benchProcId | 0 | 10 | 0 | 4,462,696b | 7.684ms | +-----------------+-----+------+------+-------------+--------------+ 

benchEloquent — вытаскивает все книги с авторами с использованием Eloquent
benchEloquentId — вытаскивает определенную книгу с авторами с использованием Eloquent (10 раз)

benchProc — вытаскивает все книги с авторами с использованием библиотеки
benchProcId — вытаскивает определенную книгу с авторами с использованием библиотеки (10 раз)

Возможно приведенные тесты недостаточно репрезентативны, но разница заметна, как по времени выполнения, так и по расходованию памяти.

Как это работает

composer require hrustbb2/arrayproc:v1.0.0

Далее, для примера (крайне простого), представим, что у нас имеется БД книг и авторов со следующей структурой.

image

Задача — вытащить все книги с их авторами.

Запрос будет выглядеть как-то так:

SELECT books.id, books.name, authors.id, authors.name FROM books LEFT JOIN relations ON relations.books_id = books.id LEFT JOIN authors ON authors.id = relations.authors_id

В ответ мы получим примерно такой массив данных.

book.id book.name author.id author.name
1 book1 2 author2
1 book1 4 author4
1 book1 6 author6
2 book2 2 author2
2 book2 3 author3
2 book2 6 author6
2 book2 7 author7

Массив двумерный, некоторые поля дублируются, для удобства нужно его преобразовать

[ 1 => [ 'id' => 1, 'name' => 'book1', 'authors' => [ 2 => [ 'id' => 2, 'name' => 'author2' ], 4 => [ 'id' => 4, 'name' => 'author4' ], 6 => [ 'id' => 6, 'name' => 'author6' ], ] ], 2 => [ 'id' => 2, 'name' => 'book2', 'authors' => [ 2 => [ 'id' => 2, 'name' => 'author2' ], 3 => [ 'id' => 3, 'name' => 'author3' ], 6 => [ 'id' => 6, 'name' => 'author6' ], 7 => [ 'id' => 7, 'name' => 'author7' ], ] ], ] 

Для этого немного изменим наш запрос:

 SELECT books.id AS book_id, books.name AS book_name, authors.id AS author_id, authors.name AS author_name FROM books LEFT JOIN relations ON relations.books_id = books.id LEFT JOIN authors ON authors.id = relations.authors_id 

Здесь мы в секции SELECT задали алиасы: для полей с данными о книгах алиасы с префиксом ‘book_’, а для полей с информацией об авторах с префиксом ‘author’.

Далее преобразуем ответ БД

use hrustbb2\arrayproc\ArrayProcessor; $arrayProcessor = new ArrayProcessor(); $config = [ 'prefix' => 'book_', 'authors' => [ 'prefix' => 'author_', ] ] $booksData = $arrayProcessor->process($conf, $rows)->resultArray(); 

$rows — ответ БД в виде массива объектов /stdClass()
$config — ассоциативный массив отражающий структуру данных итогового массива

В итоге в $booksData имеем древовидный массив имеющий структуру, описанную в $config, заполненный соответствующими данными.

Мапирование

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

Рассматриваемому термину по смыслу ближе всего англоязычный термин data mapping. Например, один объект (база данных) для обозначения элементов использует обозначения «да» и «нет», а другой объект (другая база данных) для обозначения этих же объектов использует обозначения «1» и «0», то есть коды одной базы данных мапируются в соответствии с кодами другой базы данных. Мапирование чаще используется для перевода значений сложно воспринимаемых машинных кодов в значения понятные человеку; для перекодирования сообщений в разные системы кодировки; для переименования меток дисков или портов.

См. также

  • Конвертация данных
  • Маршалинг
  • Метаданные
  • Отображение онтологий
  • Представление знаний
  • Интерфейсы доступа к данным

Wikimedia Foundation . 2010 .

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

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