验证连接 (数据管理)

摘要

验证两个图层或表之间的连接,以确定图层或表是否具有有效的字段名称和对象 ID 字段,该连接是否会生成匹配记录,该连接是一对一还是一对多连接,以及其他连接属性。

此工具不会产生连接;它将分析与当前数据的潜在连接。 由于所有连接都可能成为一对多,因此图层属性将始终显示基数一对多。 如果数据发生变化,则连接可以从一对一更改为一对多。 将要由此工具进行验证的连接可以使用添加连接连接字段工具进行创建。 该工具将以消息形式,也可以输出表形式报告连接验证结果。

使用情况

  • 该工具将创建消息以指示已验证连接的特征,其中包括以下内容:

    • 输入图层或表视图与连接表之间的指定连接的行计数和匹配计数。 如果连接未生成任何匹配内容,将包含警告消息。 行计数和匹配计数也将被作为工具的派生输出予以返回。
    • 如果连接表没有对象 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

      图层或表视图没有“对象 ID”字段。

      GPM_NOT_INDEX_FIELD

      该字段的索引并未构建。

      DIFFERENT_WORKSPACE

      这些表将存储在不同的工作空间或数据库中。

    • TABLE_NAME - 生成连接验证消息或警告的表的名称。
    • FIELD_NAME - 生成连接验证消息或警告的输入图层或表视图或连接表中的字段的名称。
    • DESC - 验证消息或警告的进一步描述,包括有关如何解决问题的信息。

  • 连接的基数(无论是一对一还是一对多)将由此工具进行验证。 连接表中的记录可以与输入图层或表视图中的多个记录相匹配。 同样,连接表中的多个记录可以与输入图层或表视图中的一个记录相匹配,从而生成一对多的连接。

  • 当连接生成一对多连接时,可以在属性表中查看连接结果,如果该表具有重复的对象 ID,则会显示警告消息。 由于许多地理处理工具不支持具有重复对象 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")