追加 (数据管理)

摘要

将多个输入数据集追加到现有目标数据集,或更新现有目标数据集。 输入数据集可以是要素类、表格、shapefile、栅格、注记或尺寸注记要素类。

要将输入数据集合并到新的输出数据集中,请使用合并工具。

插图

追加工具图示

使用情况

  • 使用该工具,可将多个数据集中的新要素或其他数据添加至现有数据集。 该工具可将点、线、面要素类、表、栅格、注记要素类或尺寸要素类追加到现有的相同类型数据集中。 例如,您可以将多个表追加到现有表,或者可以将多个栅格追加到现有栅格数据集,但无法将线要素类追加到点要素类。

  • 可使用字段映射参数控制如何将输入数据集字段中的属性信息传输到目标数据集。 仅在将方案类型参数指定为使用字段映射协调方案差异时,才能使用字段映射参数。

  • 使用字段映射参数将输入数据集中的字段映射或匹配到目标数据集中的字段。

    • 使用操作确定将如何将输入数据集中的一个或多个字段的值映射到目标数据集中的单个字段。
    • 可用的操作包括第一个最后一个串连求和平均值中位数众数最小值最大值标准差计数
    • 当使用串连操作时,可以指定分隔符,例如逗号或其他字符。 单击分隔符文本框的开始部分以添加分隔符。
    • 单个输入值不支持标准差选项。
    • 对于文本源字段,使用分割文本按钮,可以选择从输入值中提取到目标输出字段的字符。 要访问分割文本按钮,需将鼠标悬停在输入字段列表中的文本字段上,然后指定起始和结束字符位置。
    • 还可以使用 Python 脚本映射字段。

  • 向目标数据集添加要素时,此工具不会打断要素。 输入要素类和目标要素类中的所有要素都将在追加后保持原样,即使出现要素相互叠置情况也是如此。 要合并或打断要素几何,请使用联合工具。

  • 如果字段匹配类型参数设置为输入字段必须与目标字段匹配,则输入数据集方案必须与目标数据集相匹配,才能追加要素。

    如果字段匹配类型参数设置为使用使用字段映射协调字段差异,则方案无需匹配。 不会将与目标数据集字段不匹配的输入数据集字段映射到目标数据集,除非在字段映射参数中设置了映射。 目标数据集中未映射到输入数据集字段的字段将包含空值。

    如果字段匹配类型参数设置为如果方案不匹配,则跳过并发出警告,则输入数据集方案必须与目标数据集方案相匹配,才能追加要素。 如果输入数据集包含的一些字段与目标数据集中的字段不匹配,则输入数据集将被忽略。

  • 由于输入数据集的数据被写入具有预定义方案的现有目标数据集中,因此无法使用字段映射参数在目标数据集中添加或移除字段。

  • 使用此工具,可以通过相同操作,在目标数据集中插入新记录和更新现有记录(相当于 UPSERT 数据库操作)。 使用更新匹配字段参数,来指定要匹配到目标数据集中的字段的输入数据集字段。 对于具有匹配字段值的记录,目标记录中的任何字段都将使用输入记录中同名字段的值进行更新。 如果已选中更新几何参数,则几何将被更新。

  • 输入和目标数据集可能具有不同的空间参考。 在这种情况下,该工具会将输入要素投影到目标的坐标系。 为了获得最佳结果,需使用地理变换环境指定适当的地理变换。 如果目标数据集是地图图层,则该工具可能应用默认变换。 在 Python 中,不存在默认变换。

  • 此工具不执行边匹配,即不会对要素的几何进行调整。

  • 可将地图图层用作输入数据集参数值。 如果图层具有选定内容,则将使用所选记录(要素或表行)。

  • 在工具中,无法使用具有相同名称的多个输入图层。 而是使用地理处理窗格上的浏览按钮,浏览到每个输入数据集值的完整路径。

  • 要使用子类型参数,目标数据集必须已定义子类型字段且已分配子类型代码。 在子类型参数中,提供子类型描述以将该子类型分配给已追加到目标数据集中的所有新数据。

  • 此工具可直接用于后端数据存储、服务器或 Web 要素图层的数据库,以确保最佳性能。 对于引用地理数据库的要素服务,该工具可以与数据库连接配合使用,执行大规模数据加载操作,将其直接加载到底层数据库。 对于 ArcGIS Enterprise 上的托管服务,可以通过要素图层项目页面或 ArcGIS REST API 执行 append 操作

    对于 ArcGIS Online 上的托管服务,当 supportAppend 属性为 true 时,管理员和服务所有者可以将追加地理处理工具与 ArcGIS REST API 配合使用,以实现最佳性能。 必须为非管理用户启用要素服务追加功能才能将追加工具与 ArcGIS REST API 一起使用。

参数

标注说明数据类型
输入数据集

所含数据将被追加到目标数据集的输入数据集。 输入数据集可以是点、线、面要素类、表、栅格、注记要素类或尺寸要素类。

可将表和要素类组合起来。 如果将要素类追加到表,则将传递属性,但不会移除要素。 如果将表追加到要素类中,则输入表中的行将具有空几何。

Table View; Raster Layer
目标数据集

将追加输入数据集数据的现有数据集。

Table View; Raster Layer
字段匹配类型
(可选)

指定输入数据集的字段是否必须与目标数据集的字段匹配才能追加数据。

  • 输入字段必须与目标字段匹配输入数据集的字段必须与目标数据集的字段相匹配。 如果字段不匹配,将返回错误。
  • 使用字段映射协调字段差异输入数据集的字段不需要与目标数据集的字段相匹配。 不会将与目标数据集字段不匹配的输入数据集字段映射到目标数据集,除非在字段映射参数中显式设置了映射。
  • 如果方案不匹配,则跳过并发出警告输入数据集的字段必须与目标数据集的字段相匹配。 如果某个输入数据集包含的字段与目标数据集不匹配,则输入数据集将被忽略,并且将发出一条警告消息。
String
字段映射
(可选)

字段映射参数用于控制将字段从输入数据集传输或映射到目标数据集。 仅当将字段匹配类型参数设置为使用字段映射协调字段差异时,才可使用此参数。

由于输入数据集追加到的现有目标数据集具有预定义字段,因此无法在字段映射中添加、移除或更改字段类型。

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

Field Mappings
子类型
(可选)

将分配给追加到目标数据集的所有新数据的子类型描述。

String
表达式
(可选)

用于选择输入数据集记录子集的 SQL 表达式。 如果指定了多个输入数据集,将使用表达式对它们进行评估。 如果没有与输入数据集表达式匹配的记录,将不会向目标数据集追加该数据集的记录。

有关 SQL 语法的详细信息,请参阅在 ArcGIS 中使用的查询表达式的 SQL 参考

SQL Expression
要更新的匹配字段
(可选)

用于匹配到目标数据集的输入数据集字段。 如果这些字段的值匹配,则将使用输入数据集的记录更新目标数据集的相应记录。

Value Table
更新几何
(可选)

指定当要更新的匹配字段参数字段值相匹配时,目标数据集中的几何是否将使用输入数据集中的几何进行更新。

  • 选中 - 当要更新的匹配字段参数字段值相匹配时,将更新目标数据集中的几何。
  • 未选中 - 不更新几何。 这是默认设置。
Boolean

派生输出

标注说明数据类型
更新的目标数据集

已更新的目标数据集。

Table View; Raster Layer

arcpy.management.Append(inputs, target, {schema_type}, {field_mapping}, {subtype}, {expression}, {match_fields}, {update_geometry})
名称说明数据类型
inputs
[inputs,...]

所含数据将被追加到目标数据集的输入数据集。 输入数据集可以是点、线、面要素类、表、栅格、注记要素类或尺寸要素类。

可将表和要素类组合起来。 如果将要素类追加到表,则将传递属性,但不会移除要素。 如果将表追加到要素类中,则输入表中的行将具有空几何。

Table View; Raster Layer
target

将追加输入数据集数据的现有数据集。

Table View; Raster Layer
schema_type
(可选)

指定输入数据集的字段是否必须与目标数据集的字段匹配才能追加数据。

  • TEST输入数据集的字段必须与目标数据集的字段相匹配。 如果字段不匹配,将返回错误。
  • NO_TEST输入数据集的字段不需要与目标数据集的字段相匹配。 不会将与目标数据集字段不匹配的输入数据集字段映射到目标数据集,除非在字段映射参数中显式设置了映射。
  • TEST_AND_SKIP输入数据集的字段必须与目标数据集的字段相匹配。 如果某个输入数据集包含的字段与目标数据集不匹配,则输入数据集将被忽略,并且将发出一条警告消息。
String
field_mapping
(可选)

字段映射参数用于控制将字段从输入数据集传输或映射到目标数据集。 仅当 schema_type 参数设置为 NO_TEST 时,才能使用该参数。

由于输入数据集追加到的现有目标数据集具有预定义字段,因此无法在字段映射中添加、移除或更改字段类型。

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

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

Field Mappings
subtype
(可选)

将分配给追加到目标数据集的所有新数据的子类型描述。

String
expression
(可选)

用于选择输入数据集记录子集的 SQL 表达式。 如果指定了多个输入数据集,将使用表达式对它们进行评估。 如果没有与输入数据集表达式匹配的记录,将不会向目标数据集追加该数据集的记录。

有关 SQL 语法的详细信息,请参阅在 ArcGIS 中使用的查询表达式的 SQL 参考

SQL Expression
match_fields
[[target_field, input_field],...]
(可选)

用于匹配到目标数据集的输入数据集字段。 如果这些字段的值匹配,则将使用输入数据集的记录更新目标数据集的相应记录。

Value Table
update_geometry
(可选)

指定当 match_fields 参数字段值相匹配时,目标数据集中的几何是否将使用输入数据集中的几何进行更新。

  • UPDATE_GEOMETRY当要 match_fields 参数字段值相匹配时,将更新目标数据集中的几何。
  • NOT_UPDATE_GEOMETRY不更新几何。 这是默认设置。
Boolean

派生输出

名称说明数据类型
output

已更新的目标数据集。

Table View; Raster Layer

代码示例

Append 示例 1(Python 窗口)

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

import arcpy
arcpy.env.workspace = "C:/data"
arcpy.management.Append(["north.shp", "south.shp", "east.shp", "west.shp"], 
                        "wholecity.shp", "TEST")
Append 示例 2(Python 窗口)

以下 Python 窗口脚本演示了如何在即时模式下使用带有 match_fieldsupdate_geometry 参数的 Append 函数。

import arcpy
arcpy.env.workspace = "C:/data/zoning.gdb"
arcpy.management.Append("Zoning_update_2040", "Zoning_2020", "TEST", 
                        match_fields=[["ZONEID", "ZONEID"]], update_geometry="UPDATE_GEOMETRY")
Append 示例 3(独立脚本)

以下脚本演示了如何使用 Append 函数。

# Name: Append.py
# Description: Use the Append tool to combine several polygon feature classes

# Import system modules 
import arcpy
import os

# Set environment settings
arcpy.env.workspace = "C:/data/towns.gdb"

# Set local variables
outLocation = "C:/data/output.gdb"
outName = "MA_towns.shp"
schemaType = "NO_TEST"
fieldMappings = ""
subtype = ""

# Process: Append to an existing "amherst" polygon feature class
target = os.path.join(outLocation, "amherst")

# All polygon FCs in the workspace are MA town FCs, you want to append these
# to the target FC. The list will resemble ["amherst", "hadley", "pelham",
# "coldspring"]

fcList = arcpy.ListFeatureClasses("", "POLYGON")

# Create FieldMappings object to manage merge output fields
fieldMappings = arcpy.FieldMappings()

# Add the target table to the field mappings class to set the schema
fieldMappings.addTable(target)

# Add input fields for the town name to TOWNNAME field that matches the 
# target dataset since each input dataset has a different field name for 
# this info
fldMap = arcpy.FieldMap()
fldMap.addInputField("amherst","TOWNNAME")
fldMap.addInputField("hadley","NAME")
fldMap.addInputField("pelham","TOWN_NAME")
fldMap.addInputField("coldspring","TOWN")

# Set name of new output field "TOWNNAME"
townName = fldMap.outputField
townName.name, townName.aliasName, townName.type = "TOWNNAME", "TOWNNAME", "TEXT"
fldMap.outputField = townName

# Add output field to field mappings object
fieldMappings.addFieldMap(fldMap)

# Do the same for the POPULATION field
fldMap = arcpy.FieldMap()
fldMap.addInputField("amherst","POPULATION")
fldMap.addInputField("hadley","POP")
fldMap.addInputField("pelham","POP_2010")
fldMap.addInputField("coldspring","POP")

# Set name of new output field "POPULATION"
pop = fldMap.outputField
pop.name, pop.aliasName, pop.type = "POPULATION", "POPULATION", "LONG"
fldMap.outputField = pop

# Add output field to field mappings object
fieldMappings.addFieldMap(fldMap)

# Process: Append the feature classes to the target feature class
arcpy.management.Append(fcList, os.path.join(outLocation, "amherst"), schemaType, 
                        fieldMappings, subtype)

环境

特殊情况

保留全局 ID

对于追加工具而言,此环境仅适用于企业级地理数据库数据,且仅作用于拥有含唯一索引的全局 ID 字段的数据。 若全局 ID 字段不具有唯一索引,则此工具可能无法使用。 要赋予全局 ID 字段一个唯一索引,可使用添加属性索引工具。