Настройка узла Объединение

Окно настроек узла Объединение имеет четыре вкладки: Выбор ключа, Тип объединения, Выбор колонок и Общие.

Настройка вкладки Выбор ключа

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

window properties key selection.rus

Колонки подключенных узлов располагаются в левой и правой части в зависимости от назначенной роли. Используйте кнопку button swap для того, чтобы поменять наборы данных местами.

Для добавления пары выберите колонки с одинаковым типом данных в обоих списках и нажмите на кнопку Добавить пару. Соответствующий ключ будет добавлен в таблицу ниже.

Вы также можете воспользоваться кнопкой Автоматически: в этом случае узел Объединение предпримет попытку подбора пар по критерию одинаковых имен и типов данных колонок.

Для удаления выбранной пары нажмите на кнопку button remove pair, либо воспользуйтесь кнопкой Удалить все для того, чтобы очистить таблицу ключей.

Теоретически ограничение на количество ключей отсутствует. На практике не рекомендуется использовать более 10. При работе с колонками с текстовым типом данных следует воздержаться от добавления других ключей.

Настройка вкладки Тип объединения

На второй вкладке выберите режим объединения:

window properties join type.rus
  • Внешнее объединение – включает строки из правой и левой таблицы независимо от того, указан ключ или нет;

  • Внешнее левое объединение – включает все строки из левой таблицы и только соответствующие им строки из правой;

  • Внешнее правое объединение – включает все строки из правой таблицы и только соответствующие им строки из левой;

  • Внутреннее объединение – включает только те строки из обеих таблиц, которые отвечают условию ключа.

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

Настройка вкладки Выбор колонок

Вкладка Выбор колонок узла Объединение аналогичная одноименной вкладке узла Конкатенация. Подробную информацию см. в соответствующем разделе.

При определенных настройках также доступна опция Фильтр колонок по шаблону.

Использование текстовых колонок в качестве ключа

Текстовые колонки не совсем удобно использовать в качестве компонента для ключа объединения. Текстовые значения не предназначены для сравнения на предмет равенства (например, трудно сказать, равно ли значение A значению B). В связи с этим объединять таблицы с помощью ключа, который включает текстовую колонку, не рекомендуется.

С технической точки зрения в системе PolyAnalyst подобная возможность имеется. Поэтому необходимо знать, как ведет себя узел при использовании текстовых колонок в качестве ключа объединения.

Прежде всего вы должны понимать, каким образом PolyAnalyst сохраняет текстовые значения на сервере PolyAnalyst. Каждый раз, когда PolyAnalyst генерирует данные, например, при создании новой таблицы для сохранения выходных данных узла-источника данных, и эта таблица содержит текстовую колонку, PolyAnalyst использует специальную скрытую базу данных документов, в которой сохраняет полные текстовые значения текстовых колонок в таблице. Значения текстовых колонок не хранятся вместе с другими структурированными данными в таблице, как может показаться на первый взгляд. Вместо этого каждое текстовое значение (под каждым здесь понимается каждое значение в записи, а не каждое уникальное значение) сохраняется как новая запись во внутренней базе документов на сервере PolyAnalyst. Каждому текстовому значению (каждому документу) назначается простой числовой идентификатор, который по сути является простым первичным ключом документа. ID документа, который также называется внутренним "тегом" документа,– это тот номер, который сохраняется внутри строки со структурированными данными вместо фактического текстового значения.

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

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

Режимы объединения по числовым колонкам

В отличие от режима точного объединения по числовым колонкам, роли левой и правой таблицы не равнозначны.

Предположим, что мы выполняем операцию объединения по полю y, используя режим объединения по числовым колонкам ключ слева <= ключ справа:

Левая таблица:

Ключ

Значение

a

1

b

2

c

10

Правая таблица:

Ключ

Значение

x

1

y

3

z

4

В результате получаем таблицу:

Ключ

Значение

Ключ 1

Значение 1

a

1

x

1

b

2

y

3

В получившейся таблице пара b-z отсутствует, так как используется строка (или строки, если включена опция Разрешить объединение многих-со-многими), имеющая наиболее близкое значение к присоединяемому полю.

Если мы поменяем местами правую и левую таблицы и выполним объединение в режиме ключ слева >= ключ справа:

Ключ

Значение

Ключ 1

Значение 1

x

1

a

1

y

3

b

2

z

4

b

2

Если выполнить операцию с отключенной опцией Разрешить объединение многих-со-многими:

Левая таблица:

Ключ

Значение

a

1

b

2

c

10

Правая таблица:

Ключ

Значение

x

1

y

3

z

3

Узел выполнится с ошибкой, поскольку объединение данных невозможно.