描述
验证两个图层或表之间的连接,以确定图层或表是否具有有效的字段名称和对象 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 - 验证消息或警告的进一步描述,包括有关如何解决问题的信息。
- TYPE - 此关键字用于指示在经过验证的连接中发现的具体特征或问题。值包括以下内容:
连接的基数(无论是一对一还是一对多)将由此工具进行验证。连接表中的记录可以与输入图层或表视图中的多个记录相匹配。同样,连接表中的多个记录可以与输入图层或表视图中的一个记录相匹配,从而生成一对多的连接。
语法
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 |
代码示例
以下 Python 窗口脚本演示了如何在即时模式下使用 ValidateJoin 函数。
import arcpy
arcpy.ValidateJoin_management("vegetation", "HOLLAND95", "vegtable", "HOLLAND95")
arcpy.AddJoin_management("vegetation", "HOLLAND95", "vegtable", "HOLLAND95")
该独立脚本显示了作为工作流一部分的 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.ValidateJoin_management(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.AddJoin_management(inFeatures, joinField, joinTable, joinField)
# Copy the joined layer to a new permanent feature class
arcpy.CopyFeatures_management(joined, outFeatures)
print(f"Output Features: {outFeatures} had matches {matched} and created {row_count} records")
环境
许可信息
- Basic: 是
- Standard: 是
- Advanced: 是