Добавить соединение (Управление данными)

Краткая информация

Соединяет слой с другим слоем или таблицей на основе значений общего поля. Поддерживаются векторные слои, представления таблиц и растровые слои с поддерживаемой таблицей атрибутов.

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

Иллюстрация

Иллюстрация инструмента Добавить соединение

Использование

  • Значением параметра Входная таблица должен быть векторный слой, представление таблицы или растровый слой с таблицей атрибутов. Если используется путь к данным, слой будет создан при помощи соединения. Соединение всегда будет находиться в слое, а не в данных.

  • Чтобы сделать постоянное соединение, либо используйте инструмент Соединение полей, либо используйте объединенный слой в качестве входных данных для одного из следующих инструментов: Копировать объекты, Копировать строки, Экспорт объектов или Экспорт таблицы. При сохранении результатов в новый класс объектов или таблицу можно использовать параметр среды Поддержка полноценных имен полей, чтобы контролировать, будут ли имена соединяемых выходных полей уточняться именем таблицы, из которой получено поле. Псевдонимы полей сохраняются из слоя в выходные данные, за исключением случаев, когда выходные данные являются шейп-файлом.

  • Используйте инструменты Создать слой запроса, Создать представление базы данных или Создать слой запроса агрегации, чтобы оптимизировать производительность соединения и получить дополнительные возможности, когда вы хотите объединить данные многопользовательской базы геоданных или базы данных SQLite.

  • Если входные данные представлены классом пространственных объектов или путем к набору данных, этот инструмент будет создавать и возвращать новый слой с результатом примененного инструмента.

  • Если кардинальность один-ко-многим используется при соединении, результат соединения можно увидеть в таблице атрибутов, где сообщение с предупреждением укажет на дублирование поля Object ID. Так как множество инструментов геообработки не поддерживают данные с дублированными Object ID, и результаты анализа таких данных могут быть неожиданными, сначала рекомендуется скопировать слой соединения в новый класс объектов с помощью инструмента Экспорт объектов. Затем используйте новый класс объектов в качестве входных данных для инструментов геообработки.

    Дополнительно задайте параметру Операция соединения значение Соединение один-к-первому, чтобы предотвратить дублирование ID объектов.

  • Параметр Операция соединения имеет три состояния для настройки кардинальности. Значение по умолчанию пустое и позволит источнику данных попытаться выполнить соединение один-ко-многим. Параметр Присоединить один ко многим будет работать только с определенными источниками данных, имеющими поле Идентификатор объекта. Параметр Присоединить один к первому будет использовать первое совпадение в таблице, что может привести к различным данным на выходе, если поле Идентификатор объекта будет изменено или изменится рабочая область, в которую копируется таблица. Соединения один-к-первому не чувствительны к регистру; соединения один-ко-многим чувствительны к регистру.

  • В следующих таблицах приведены возможные результаты выполнения соединения с различными входными данными.

    В первой таблице показано соединение один ко многим. Сохранение только совпадающих записей не имеет эффекта, так как все записи имеют совпадения.

    Входная таблицаСоединяемая таблицаРезультат

    Входное поле

    Тип

    Поле соединения

    Значение

    Входное поле

    Тип

    Поле соединения

    Значение

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    1

    300

    1

    A

    1

    300

    2

    400

    2

    B

    2

    400

    Пример добавления соединения: соединение один ко многим, когда каждая таблица имеет поле Object ID

    Во второй таблице используется присоединяемая таблица без поля Object ID; возможно только соединение один-к-первому. Соединение один-к-первому также возможно только в том случае, если каждая таблица находится в отдельной рабочей области. Соединение один-к-первому не учитывает регистр.

    Входная таблицаСоединяемая таблицаРезультат

    Входное поле

    Тип

    Поле соединения

    Значение

    Входное поле

    Тип

    Поле соединения

    Значение

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    300

    4

    400

    Пример добавления соединения: соединение типа один-к-первому, когда в какой-либо таблице нет поля Object ID

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

    Входная таблицаСоединяемая таблицаРезультат

    Входное поле

    Тип

    Поле соединения

    Значение

    Входное поле

    Тип

    Поле соединения

    Значение

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    C

    1

    300

    1

    A

    1

    300

    4

    D

    2

    400

    2

    B

    2

    400

    3

    C

    <Null>

    <Null>

    4

    D

    <Null>

    <Null>

    Пример добавления соединения: соединение один-ко-многим, когда каждая таблица содержит поле Object ID и отмечен параметр Сохранить все входные записи.

    Входная таблица должна иметь поле Object ID для выполнения соединения один-ко-многим и находиться в той же рабочей области.

  • Записи из соединяемой таблицы могут быть сопоставлены более чем с одной записью, если у соединяемой таблицы есть поле Object ID; в противном случае будет выполнено соединение один-к-первому.

  • При соединении таблиц по умолчанию сохраняются все записи. Если запись во входной таблице не имеет совпадения в таблице соединения, этой записи присваиваются нулевые значения для всех полей, добавляемых во входную таблицу из таблицы соединения.

    Входная таблицаСоединяемая таблицаРезультат

    Входное поле

    Тип

    Поле соединения

    Значение

    Входное поле

    Тип

    Поле соединения

    Значение

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    C

    1

    300

    1

    A

    1

    300

    4

    D

    2

    400

    2

    B

    2

    400

    3

    C

    <Null>

    <Null>

    4

    D

    <Null>

    <Null>

    Когда параметр Сохранять все входные записи отключен, если запись во входной таблице не соответствует таблице соединения, эта запись удаляется из итоговых выходных данных. Если входная таблица была атрибутивной таблицей слоя, то объекты слоя, для которых не нашлось соответствующих записей в соединяемой таблице, не будут отображаться на карте.

    Входная таблицаСоединяемая таблицаРезультат

    Входное поле

    Тип

    Поле соединения

    Значение

    Входное поле

    Тип

    Поле соединения

    Значение

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    300

    4

    400

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

  • Такие свойства полей, как псевдонимы, видимость и форматирование чисел, сохраняются и после добавления либо удаления соединения.

  • Соединение сохраняется только на протяжении существования слоя. Слой можно сохранить, сохранив сеанс ArcGIS AllSource или сохранив его в файл слоя с помощью инструмента Сохранить слой в файл.

    Чтобы увидеть результаты соединения, созданного инструментом-скриптом, у инструмента должен быть производный выходной параметр. Точно так же параметр Обновленный входной слой или представление таблицы должен быть установлен в качестве производного выходного параметра в инструменте модели, чтобы можно было увидеть результаты соединения.

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

    Например, соединение landuse с полями A и B с lookup_tab с полями C и D приведет к созданию слоя или представления таблицы с полями landuse.A, landuse.B, lookup_tab.C и lookup_tab.D.

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

  • Индексирование входного поля и поля соединения может повысить производительность. Если параметр Индексировать соединяемые поля отмечен, к обоим полям будет добавлен атрибутивный индекс. Либо все присоединяемые поля можно проиндексировать с помощью инструмента Добавить атрибутивный индекс.

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

  • Если поля входного слоя или представления таблицы были изменены (переименованы или скрыты) с помощью параметра Информация поля в инструменте Создать векторный слой или в инструменте Создать представление таблицы, изменения полей не будут добавлены в выходной соединенный слой или представление таблицы.

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

  • Если в соединяемой таблице есть определяющий запрос, параметр Сохранить все входные записи не будет иметь никакого эффекта. Обновление определяющего запроса вручную путем добавления or OBJECTID is null может исправить это, если это необходимо.

  • Инструмент Проверить соединение можно использовать для проверки соединения между двумя слоями или таблицами, это позволит определить, есть ли у слоев или таблиц допустимые имя полей и поля Object ID, будут ли в ходе соединения сопоставленные записи, тип кардинальности (один-к-одному или один-ко-многим) и другие свойства соединения.

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

  • Выборки во входных или присоединяемых таблицах игнорируются инструментом Добавить объединение. Инструмент Соединение полей поддерживает выборку. Чтобы выполнить соединение только с выбранным поднабором, создайте слой выборки и используйте его в качестве входных данных для инструмента Добавить соединение. Свойства слоя соединения копируются при создании слоя выборки.

Параметры

ПодписьОписаниеТип данных
Входная таблица

Слой или представление таблицы, к которым будет присоединяться соединяемая таблица.

Mosaic Layer; Raster Layer; Table View
Входное поле

Поле входного слоя или представления таблицы, на котором будет основано соединение.

Field
Соединяемая таблица

Таблица или представление таблицы, которые будут присоединяться к входному слою или представлению таблицы.

Mosaic Layer; Raster Layer; Table View
Соединение полей

Поле соединяемой таблицы, содержащее значения, на которых будет основываться соединение.

Field
Сохранить все входные записи
(Дополнительный)

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

  • Отмечено – все записи входного слоя или представления таблицы будут включены в выходные данные. Это также называется внешним соединением. Это значение по умолчанию
  • Не отмечено – только те записи во входных данных, для которых есть сопоставления в соединяемой таблице, будут включены в выходные данные. Это также известно как внутреннее соединение.
Boolean
Индексировать соединяемые поля
(Дополнительный)

Указывает, будут ли индексы атрибутов таблицы добавлены для входного поля и поля соединения.

  • Отмечено – оба поля будут проиндексированы. Если у таблицы уже есть индекс, новый индекс добавлен не будет.
  • Не отмечено - индексы добавляться не будут. Это значение по умолчанию
Boolean
Перестроить индексы соединенных полей
(Дополнительный)

Указывает, будут ли индексы входного поля и поля соединения удалены и перестроены.

  • Отмечено – существующие индексы будут удалены и будет добавлен новый индекс.
  • Не отмечено – существующие индексы не будут удалены или перестроены. Это значение по умолчанию
Boolean
Операция соединения
(Дополнительный)

Указывает, будет ли тип соединения один-ко-многим или один-к-первому, если данные имеют кардинальность один-ко-многим.

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

  • Соединение один-к-первомуОперация соединения будет использовать первое совпадение.
  • Присоединить один-ко-многимОперация соединения выполнит несколько совпадений с учетом регистра.
String

Производные выходные данные

ПодписьОписаниеТип данных
Обновленный входной слой или представление таблицы

Обновленный входной набор данных.

Table View; Raster Layer; Mosaic Layer

arcpy.management.AddJoin(in_layer_or_view, in_field, join_table, join_field, {join_type}, {index_join_fields}, {rebuild_index}, {join_operation})
ИмяОписаниеТип данных
in_layer_or_view

Слой или представление таблицы, к которым будет присоединяться соединяемая таблица.

Mosaic Layer; Raster Layer; Table View
in_field

Поле входного слоя или представления таблицы, на котором будет основано соединение.

Field
join_table

Таблица или представление таблицы, которые будут присоединяться к входному слою или представлению таблицы.

Mosaic Layer; Raster Layer; Table View
join_field

Поле соединяемой таблицы, содержащее значения, на которых будет основываться соединение.

Field
join_type
(Дополнительный)

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

  • KEEP_ALLВсе записи входного слоя или представления таблицы будут включены в выходные данные. Это также называется внешним соединением. Это значение по умолчанию
  • KEEP_COMMONТолько те записи во входных данных, для которых есть сопоставления в соединяемой таблице, будут включены в выходные данные. Это также известно как внутреннее соединение.
Boolean
index_join_fields
(Дополнительный)

Указывает, будут ли индексы атрибутов таблицы добавлены для входного поля и поля соединения.

  • INDEX_JOIN_FIELDSОба поля будут проиндексированы. Если у таблицы уже есть индекс, новый индекс добавлен не будет.
  • NO_INDEX_JOIN_FIELDSИндексы добавляться не будут. Это значение по умолчанию
Boolean
rebuild_index
(Дополнительный)

Указывает, будут ли индексы входного поля и поля соединения удалены и перестроены.

  • REBUILD_INDEXСуществующие индексы будут удалены и будет добавлен новый индекс.
  • NO_REBUILD_INDEXСуществующие индексы не будут удалены или перестроены. Это значение по умолчанию
Boolean
join_operation
(Дополнительный)

Указывает, будет ли тип соединения один-ко-многим или один-к-первому, если данные имеют кардинальность один-ко-многим.

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

  • JOIN_ONE_TO_FIRSTОперация соединения будет использовать первое совпадение.
  • JOIN_ONE_TO_MANYОперация соединения выполнит несколько совпадений с учетом регистра.
String

Производные выходные данные

ИмяОписаниеТип данных
out_layer_or_view

Обновленный входной набор данных.

Table View; Raster Layer; Mosaic Layer

Пример кода

AddJoin, пример 1 (окно Python)

Пример скрипта окна Python для использования функции AddJoin в режиме прямого запуска.

import arcpy
arcpy.env.workspace = "C:/data/Habitat_Analysis.gdb"
veg_joined_table = arcpy.management.AddJoin("vegetation", "HOLLAND95", 
                                            "vegtable", "HOLLAND95")
arcpy.management.CopyFeatures(veg_joined_table, "vegjoin")
AddJoin, пример 2 (автономный скрипт)

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

# Name: AttributeSelection.py
# Purpose: Join a table to a feature class and select the desired attributes

# Import system modules
import arcpy

# Set environment settings
arcpy.env.workspace = "C:/data/Habitat_Analysis.gdb"
# The qualifiedFieldNames environment is used by Copy Features when persisting 
# the join field names.
arcpy.env.qualifiedFieldNames = False

# Set local variables
inFeatures = "vegtype"
joinTable = "vegtable"
joinField = "HOLLAND95"
expression = "vegtable.HABITAT = 1"
outFeature = "vegjoin"

# Join the feature layer to a table
veg_joined_table = arcpy.management.AddJoin(inFeatures, joinField, joinTable, 
                                            joinField)

# Select desired features from veg_layer
arcpy.management.SelectLayerByAttribute(veg_joined_table, "NEW_SELECTION", 
                                        expression)

# Copy the layer to a new permanent feature class
result = arcpy.management.CopyFeatures(veg_joined_table, outFeature)

# See field names and aliases
resultFields = arcpy.ListFields(result)
print([field.name for field in resultFields])
print([field.aliasName for field in resultFields])

Связанные разделы