连接字段 (数据管理)

摘要

基于公用属性字段将一个表的内容永久连接到另一个表。 输入表将被更新,从而包含连接表中的字段。 您可选择将连接表中的哪些字段添加到输入表。

使用情况

  • 根据输入连接字段连接表字段参数的值,输入表值中的记录将与连接表值中的记录进行匹配。 还可以在连接期间从要追加至输入表值的连接表值中选择特定字段。

  • 输入表值可为要素类(包括 shapefile)或表。

  • 连接过程中,输入表值中的所有字段均将被保留。 还可以从连接表值中选择要添加到输出中的特定字段。 可以使用传输字段参数来添加这些字段。

  • 连接表值中的记录可以与输入表值中的多个记录相匹配。

  • 如果在可选传输字段参数中未选择任何字段,则连接表值中的所有字段均将被连接到输出中。 要更改字段名称、别名或属性,请将传输方法参数设置为使用字段映射

  • 可基于文本、日期或数值等字段类型进行连接。

  • 基于文本字段的连接区分大小写。

  • 只要数值相等,不同数值格式的字段也可以被连接。 例如,浮点类型的字段可以连接到短整型字段。

  • 当连接到输入表时,将不会传输连接表中具有“全局 ID”类型或“对象 ID”类型的字段。

    输入连接字段值与连接表字段值的名称可以不同。

  • 如果连接字段的名称与输入表中某字段的名称相同,为使名称唯一,被连接字段的名称将追加 _1(或 _2、_3 等)。

  • 如果输入表连接表参数值具有相同的名称,则单击验证连接按钮将失败并出现错误。 这是一个已知限制。 但是,当单击运行按钮时,该工具将成功运行。

  • 如果针对传输方法参数指定了选择传输字段选项并且连接表字段参数值中的字段值不唯一,则将仅使用第一次出现的各值。 要考虑非第一次出现的值(一对多连接),请将传输方法参数设置为使用字段映射。 要执行一对多连接,输入表参数值必须具有“对象 ID”字段,并且与连接表参数值位于同一工作空间中。

  • 使用字段映射参数管理输出数据集中的字段及其内容。

    • 您可以向字段列表中添加和移除字段,重新排序字段列表,并重命名字段。
    • 输出字段的默认数据类型与其所遇到的第一个名称相同的输入字段的数据类型相同。 可以将数据类型更改为其他有效的数据类型。
    • 使用操作确定如何将一个或多个输入字段的值合并到单个输出字段中。 可用的操作包括第一个最后一个串连求和平均值中位数众数最小值最大值标准差计数
    • 当使用串连操作时,可以指定分隔符,例如逗号或其他字符。 单击分隔符文本框的开始部分以添加分隔符。
    • 单个输入值不支持标准差选项。
    • 对于文本源字段,使用分割文本按钮,可以选择从输入值中提取到输出字段的字符。 要访问分割文本按钮,需将鼠标悬停在输入字段列表中的文本字段上,然后指定起始和结束字符位置。
    • 还可以使用 Python 脚本映射字段。

  • 当使用连接合并规则指定了字段映射参数时,如果值不唯一,则无法确保连接值的顺序与连接表字段参数的行顺序一致。 例如,如果将三个 ANIMAL 属性值为 mouse、cat 和 dog 的要素连接起来,结果未必是 mouse、cat 和 dog。

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

    该工具的对话框上有一个用于验证连接的按钮,以方便用户的使用。

  • 对输入字段和连接字段进行索引可以提高性能。 使用索引连接字段参数来添加或替换索引。

  • 如果连接结果意外或者不完整,请检查是否已对输入字段和连接字段建立索引。 如果未对字段建立索引,请尝试添加索引。 如果已对字段建立索引,请尝试删除并重新添加索引以纠正索引中的任何问题。 在运行工具时,使用索引连接字段参数来管理索引。

参数

标注说明数据类型
输入表

连接表将要连接到的表或要素类。

Mosaic Layer; Raster Layer; Table View
输入字段

连接将基于的输入表中的字段。

Field
连接表

将连接到输入表的表。

Mosaic Layer; Raster Layer; Table View
连接字段

连接表中的字段,其中包含连接所依据的值。

Field
传输字段
(可选)

来自连接表的、将基于输入表和连接表之间的连接传输至输入表的字段。

Field
传输方法
(可选)

指定如何将连接字段和字段类型传输到输出。

  • 选择传输字段连接表中的字段和字段类型将传输到输出。 这是默认设置。
  • 使用字段映射从连接表到输出的字段和字段类型的传输将由字段映射参数控制。
String
字段映射
(可选)

将字段及其各自属性和源字段连接到输入表。 默认情况下,将包含连接表中的所有字段。

使用字段映射来添加、删除、重命名和重新排序字段,以及更改其他字段属性。

字段映射可以用于将两个或多个输入字段的值合并为单个输出字段。

Field Mappings
索引连接字段
(可选)

指定是否为输入字段和连接字段添加或替换属性索引。

  • 不添加索引不添加属性索引。 这是默认设置。
  • 为没有现有索引的字段添加属性索引将为没有索引的任何字段添加属性索引。 将保留现有的属性索引。
  • 替换所有字段的索引将为没有索引的任何字段添加属性索引。 将替换现有的属性索引。
String

派生输出

标注说明数据类型
更新的输入表

已更新的输入数据集。

Table View; Raster Layer; Mosaic Layer

arcpy.management.JoinField(in_data, in_field, join_table, join_field, {fields}, {fm_option}, {field_mapping}, {index_join_fields})
名称说明数据类型
in_data

连接表将要连接到的表或要素类。

Mosaic Layer; Raster Layer; Table View
in_field

连接将基于的输入表中的字段。

Field
join_table

将连接到输入表的表。

Mosaic Layer; Raster Layer; Table View
join_field

连接表中的字段,其中包含连接所依据的值。

Field
fields
[fields,...]
(可选)

来自连接表的、将基于输入表和连接表之间的连接传输至输入表的字段。

Field
fm_option
(可选)

指定如何将连接字段和字段类型传输到输出。

  • NOT_USE_FM连接表中的字段和字段类型将传输到输出。 这是默认设置。
  • USE_FM从连接表到输出的字段和字段类型的传输将由 field_mapping 参数控制。
String
field_mapping
(可选)

将字段及其各自属性和源字段连接到输入表。 默认情况下,将包含连接表中的所有字段。

使用字段映射来添加、删除、重命名和重新排序字段,以及更改其他字段属性。

字段映射可以用于将两个或多个输入字段的值合并为单个输出字段。

Python 中,使用 FieldMappings 类来定义此参数。

Field Mappings
index_join_fields
(可选)

指定是否为输入字段和连接字段添加或替换属性索引。

  • NO_INDEXES不添加属性索引。 这是默认设置。
  • NEW_INDEXES将为没有索引的任何字段添加属性索引。 将保留现有的属性索引。
  • REPLACE_INDEXES将为没有索引的任何字段添加属性索引。 将替换现有的属性索引。
String

派生输出

名称说明数据类型
out_layer_or_view

已更新的输入数据集。

Table View; Raster Layer; Mosaic Layer

代码示例

JoinField 示例 1(Python 窗口)

以下 Python 窗口脚本演示了如何在即时模式下使用 JoinField 函数。

import arcpy
arcpy.env.workspace = "C:/data/data.gdb"
arcpy.management.JoinField("zion_park", "zonecode", "zion_zoning", "zonecode", 
                           ["land_use", "land_cover"])
JoinField 示例 2(独立脚本)

该独立 Python 脚本显示了用于将表连接到要素类的 JoinField 函数,并且连接中仅包含表中的两个字段。

# PermanentJoin.py
# Purpose: Join two fields from a table to a feature class 

# Import system modules
import arcpy

# Set the current workspace 
arcpy.env.workspace = "c:/data/data.gdb"

# Set the local parameters
inFeatures = "zion_park"
joinField = "zonecode"
joinTable = "zion_zoning"
fieldList = ["land_use", "land_cover"]

# Join two feature classes by the zonecode field and only carry 
# over the land use and land cover fields
arcpy.management.JoinField(inFeatures, joinField, joinTable, joinField, 
                           fieldList)

相关主题