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

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

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

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

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

  • Этот инструмент будет создавать сообщения, отражающие следующие характеристики проверенного соединения:

    • Количество строк и совпадений в соединении между входным слоем или видом таблицы и таблицей соединения. Если соединение не дает совпадений, будет включено предупреждающее сообщение. Количество строк и совпадений также возвращаются как производные выходные данные инструмента.
    • Если таблицы соединения не имеют идентификаторов Object ID, будет включено предупреждающее сообщение.
    • Кардинальность соединения (если создаются результаты один к одному или один ко многим).
    • Если поля соединения содержат недопустимые символы в начале имени или проблемные символы в любом месте имени, будет включено предупреждающее сообщение.
    • Если в полях соединения используются зарезервированные ключевые слова SQL, будет включено предупреждающее сообщение.
    • Поля соединения индексируются или не имеют атрибутивного индекса. Индексы полей обеспечивают оптимальную производительность некоторых форматов данных.
    • Таблицы соединения из одной рабочей области. Когда входной слой или вид таблицы и таблица соединения хранятся в одной и той же рабочей области или базе данных, производительность объединения будет значительно выше. Соединения между таблицами из разных баз данных возможны, но производительность будет снижена, так как базу данных нельзя использовать для выполнения соединения.

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

    • TYPE- ключевое слово, используемое для обозначения конкретной характеристики или проблемы, обнаруженной в проверяемом соединении. К значениям относятся следующие:

      Ключевое словоОписание

      GPM_INVALID_CHARACTER_IN_NAME

      Имя поля содержит недопустимый символ.

      GPM_INVALID_FIRST_CHARACTERS_MSG

      Поле имеет недопустимый первый символ.

      GPM_RESERVED_SQL_KEYWORD

      В имени поля включены зарезервированные ключевые слова SQL.

      GPM_NO_MATCH_JOIN

      Соединение не создает совпадений.

      GPM_NO_OBJECTID_JOIN

      В слое или виде таблицы нет поля идентификатора Object ID.

      GPM_NOT_INDEX_FIELD

      Поле не индексируется.

      DIFFERENT_WORKSPACE

      Таблицы хранятся в разных рабочих областях или базах данных.

    • TABLE_NAME- имя таблицы, в которой были созданы сообщения или предупреждения о результатах проверки соединения.
    • FIELD_NAME- имя поля во входном слое, виде таблицы или таблице соединения, которое вызвало создание сообщения или предупреждения о проверке соединения.
    • DESC- дополнительное описание сообщения или предупреждения о проверке соединения, включающее информацию о том, как решить проблему.

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

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

Параметры

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

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

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

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

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

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

Mosaic Layer; Raster Layer; Table View
Поле соединяемой таблицы

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

Field
Выходная таблица
(Дополнительный)

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

Table

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

ПодписьОписаниеТип данных
Количество совпадений

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

Long
Количество строк

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

Long

arcpy.management.ValidateJoin(in_layer_or_view, in_field, join_table, join_field, {output_msg})
ИмяОписаниеТип данных
in_layer_or_view

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

Mosaic Layer; Raster Layer; Table View
in_field

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

Field
join_table

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

Mosaic Layer; Raster Layer; Table View
join_field

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

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

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

Table

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

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

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

Long
row_count

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

Long

Пример кода

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

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

import arcpy
arcpy.management.ValidateJoin("vegetation", "HOLLAND95", "vegtable", "HOLLAND95")
arcpy.management.AddJoin("vegetation", "HOLLAND95", "vegtable", "HOLLAND95")
ValidateJoin, пример 2 (автономный скрипт)

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

# Name: AttributeJoin.py
# Purpose: Join a table to a feature class and find one-to-many matches

# Import system modules
import arcpy

# Set environment settings
arcpy.env.workspace = "C:/data/Habitat_Analysis.gdb"
arcpy.env.qualifiedFieldNames = False

# Set local variables
inFeatures = "vegtype"
joinTable = "vegtable"
joinField = "HOLLAND95"  # Both tables have HOLLAND95 field
outFeatures = "Vegtype_Joined"

# Join the feature layer to a table
val_res = arcpy.management.ValidateJoin(inFeatures, joinField, joinTable, joinField)
matched = int(val_res[0]) 
row_count = int(val_res[1])

print(arcpy.GetMessages())  # Tool messages about the Join

# Validate the join returns matched rows before proceeding
if matched >= 1:
    joined = arcpy.management.AddJoin(inFeatures, joinField, joinTable, joinField)

    # Copy the joined layer to a new permanent feature class
    arcpy.management.CopyFeatures(joined, outFeatures)

print(f"Output Features: {outFeatures} had matches {matched} and created {row_count} records")