Объединение и конкатенация данных

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

Вместо узла Объединение можно использовать SQL-запрос SELECT в узле ODBC для того, чтобы соединить внешние таблицы внутри базы данных до их импорта, в результате чего узел ODBC будет импортировать только результаты объединения. Подобный подход имеет свои преимущества и недостатки. Внешняя база данных хранит данные в каком-то внутреннем формате, и внутренняя операция объединения выполняется с максимально возможной для данной базы данных скоростью. Эта операция выполняется быстрее, чем объединение данных в PolyAnalyst, где ключи преобразуются во свой внутренний формат. Система PolyAnalyst – аналитический инструмент, который не так эффективен в объединении таблиц, как специализированное программное обеспечение баз данных. Выполнение объединения на уровне базы данных также позволяет сократить количество узлов, подлежащих настройке и выполнению в аналитическом проекте в системе PolyAnalyst. Все настройки объединения данных задаются с помощью одного SQL-запроса в узле ODBC.

С одной стороны, все это облегчает управление импортированными данными и позволяет не загромождать скрипт большим количеством узлов. Процесс настройки также упрощается, поскольку пользователи настраивают только один узел в PolyAnalyst, выполняя объединение в базе данных. Для объединения таблиц в PolyAnalyst требуется настроить и выполнить как минимум 3 узла. Другой плюс в объединении на уровне базы данных заключается в том, что через протокол ODBC в систему PolyAnalyst передаются только те строки и колонки с данными, которые были сгенерированы в результате операции объединения. Это позволяет существенно сократить объем передаваемой информации. При объединении данных в PolyAnalyst происходит следующее: как минимум две таблицы загружаются с помощью отдельных источников данных, затем узел Объединение создает третью таблицу. Таким образом, объем данных, сохраняемых в системе PolyAnalyst, при таком подходе может увеличиться в несколько раз. С другой стороны, многим пользователям не нравится "непрозрачность" процесса объединения данных с помощью узла ODBC, поскольку его назначение и выполняемые им операции не очевидны.

Если использовать два или более источников данных и несколько узлов Объединение, одного взгляда на скрипт будет достаточно, чтобы понять, какие таблицы объединяются.

SQL-запросы JOIN обычно объемные, содержат несколько строк, а для того, чтобы их использовать, пользователь должен точно знать, какие колонки необходимо включить в выходные данные. Следует признать, что далеко не каждый пользователь виртуозно владеет языком составления SQL-запросов. В этом отношении узел Объединение очень удобен, поскольку он фактически позволяет создавать SQL-запрос без знания языка структурированных запросов. Оформлять запрос на объединение данных, используя готовые формы, намного легче, чем использовать синтаксис SQL для оформления запроса. Другое преимущество объединения в PolyAnalyst состоит в том, что две исходные таблицы могут быть повторно использованы для других целей. Выполнение объединения на уровне базы данных позволяет вам видеть и обрабатывать лишь результаты этого объединения. Загрузка двух таблиц в PolyAnalyst позволяет вам применять исходные таблицы для других целей, в качестве родительских данных для других узлов. Иногда одну из таблиц необходимо сначала некоторым образом преобразовать или пропустить через фильтр. PolyAnalyst позволяет использовать результат фильтрации в качестве входных данных для узла Объединение, вместо таблицы с необработанными данными. Еще одним преимуществом операции объединения в PolyAnalyst является тот факт, что данные не всегда поступают из одной и той же базы данных или даже одного и того же типа источников данных. Используя гибкость узлов PolyAnalyst, вы можете объединить CSV-файл, таблицу Microsoft Excel, таблицу базы данных Oracle, таблицу базы данных IBM DB2 и так далее, вне зависимости от того, откуда поступают данные. Такое практически невозможно проделать на уровне базы данных.

Представьте, что вам нужно объединить две таблицы и поработать с этой объединенной таблицей в PolyAnalyst. Сделать это можно несколькими способами. Вы можете создать два узла ODBC, по одному для каждой таблицы, и один узел Объединение, который будет объединять эти две таблицы данных. Одного взгляда на скрипт будет достаточно, чтобы понять, что происходит: данные из двух узлов-источников данных объединяются с помощью третьего узла. При этом в PolyAnalyst импортируются все записи обеих исходных таблиц, хотя не все они могут вам понадобиться. Во-вторых, три узла займут много места на скрипте, что может не понравиться тем пользователям, которые предпочитают точные и четко организованные скрипты. Вместо этого можно добавить один узел ODBC, создать в нем SQL-запрос SELECT, который выполнит объединение двух указанных таблиц. При этом может возникнуть ощущение, что мы имеем дело с одной таблицей данных, хотя на самом деле их две. У каждого подхода есть свои плюсы и минусы, вы можете выбрать любой подход в зависимости от имеющихся ресурсов и, возможно, от решений, принятых коллегиально с другими пользователями.

Еще один способ объединения данных в системе PolyAnalyst предлагает узел Конкатенация.

Основной принцип работы узла Конкатенация

Для пользователей, знакомых с языком SQL, будет очевидно, что результат работы узла Конкатенация тот же, что и при использовании SQL-запроса UNION. Проще говоря, две таблицы "склеиваются" в одну: строки из одной таблицы накладываются поверх строк другой. Колонки, которые не присутствуют в обеих таблицах, тем не менее, появятся в результирующей таблице, при этом они будут наполовину пустыми, поскольку соответствия во второй таблице не оказалось. Колонки, которые присутствуют в обеих таблицах, будут объединены в одну, которая будет содержать строки обеих таблиц. Обычно две объединяемые таблицы очень похожи друг на друга; это могут быть два подмножества одного массива данных.

Узел Конкатенация подобен узлу Объединение, но результаты их работы отличаются. Объединение и конкатенация таблиц – две разные операции. В случае объединения колонки каждой таблицы размещаются на одной строке, согласно объединяющему ключу. При конкатенации строки первой таблицы добавляются к строкам второй.

Допустим, у нас есть две таблицы со следующей структурой:

Таблица 1

Колонка1

Колонка2

1

2

3

4

Таблица 2

Колонка1

Колонка3

5

6

7

8

В результате конкатенации выходная таблица будет выглядеть следующим образом:

Выходная таблица

Колонка1

Колонка2

Колонка3

1

2

3

4

5

6

7

8

Строки "Таблицы 2" добавляются к строкам "Таблицы 1". Колонка1 присутствует в обеих таблицах, поэтому она имеется и в выходной таблице. Колонка2 представлена только в "Таблице 1", поэтому в выходной таблице значения строк из "Таблицы 2" отсутствуют. Колонка3 была представлена только в "Таблице 2", поэтому в выходной таблице значения строк из "Таблицы 1" отсутствуют. Несмотря на то, что Колонка2 и Колонка3 присутствовали не в обеих таблицах, они вошли в выходную таблицу.