フィールドの結合 (Join Field) (データ管理)

サマリー

共通属性フィールドに基づいて、テーブルの内容を別のテーブルに永続的に結合します。 入力テーブルが更新され、結合テーブル内のフィールドが格納されます。 結合テーブルからのフィールドの中から、入力テーブルに追加するフィールドを選択することができます。

使用法

  • [入力結合フィールド] パラメーターの値および [結合テーブル フィールド] パラメーターの値に基づいて [入力テーブル] 値のレコードを [結合テーブル] 値のレコードと照合します。 結合時に、特定のフィールドを [結合テーブル] 値から選択し、[入力テーブル] 値に付加できます。

  • [入力テーブル] の値には、フィーチャクラス (シェープファイルを含む) またはテーブルを指定できます。

  • 結合時は [入力テーブル] 値のすべてのフィールドが保持されます。 [結合テーブル] の値から特定のフィールドを選択し、出力に追加することも可能です。 [転送フィールド] パラメーターを使用して、フィールドを出力に追加します。

  • [結合テーブル] 値のレコードは、[入力テーブル] 値の複数のレコードと照合できます。

  • オプションの [転送フィールド] パラメーター用にフィールドを選択しない場合、[結合テーブル] 値のフィールドはすべて、出力に結合されます。 フィールド名、エイリアス、またはプロパティを変更するには、[転送方法] パラメーターを [フィールド マッピングの使用] に設定します。

  • 結合はフィールドのタイプ (テキスト、日付または数値) に基づいて実行できます。

  • テキスト フィールドに基づく結合では、大文字と小文字が区別されます。

  • 数値形式が異なるフィールド同士でも、それぞれの値が等しい限り結合できます。 たとえば、Float 型のフィールドと Short 型のフィールドを結合できます。

  • 入力テーブルへの結合時、Global ID タイプまたは Object ID タイプを持つ結合テーブルのフィールドは転送されません。

    [入力結合フィールド] 値と [結合テーブル フィールド] 値にはそれぞれ異なるフィールド名を付けることができます。

  • 結合フィールドに入力テーブル内のフィールドと同じ名前が付いている場合、結合フィールドの名前が他と重複することのないように、結合フィールドの末尾に _1 (あるいは _2、_3、... など) が付加されます。

  • [転送方法] パラメーターに [転送フィールドの選択] オプションが指定され、[結合テーブル フィールド] パラメーターの値が一意でない場合は、各値の最初の値のみが使用されます。 最初に出現した値 (1 対多の結合) 以外の値を考慮するには、[転送方法] パラメーターを [フィールド マッピングの使用] に設定します。 1 対多の結合を実行するには、[入力テーブル] パラメーター値は、Object ID フィールドがあり、[結合テーブル] パラメーター値と同じワークスペースに存在する必要があります。

  • フィールド マップ パラメーターを使用すると、出力データセット内のフィールドとそのコンテンツを管理できます。

    • フィールド リストにフィールドを追加したり、フィールド リストからフィールドを削除したり、フィールド リストの順序を変更したり、フィールドの名前を変更したりすることができます。
    • 出力フィールドのデフォルトのデータ タイプは、最初に検出した (その名前の) 入力フィールドのデータ タイプと同じになります。 データ タイプを有効な別のデータ タイプに変更できます。
    • アクションを使用して、1 つまたは複数の入力フィールドの値を 1 つの出力フィールドにマージする方法を決定します。 使用可能なアクションは [最初][最後][連結][合計][平均][中央][最頻][最小][最大][標準偏差]、および [個数] です。
    • [連結] アクションを使用する場合は、カンマなどの文字を区切り文字として指定できます。 [区切り文字] テキスト ボックスの先頭をクリックして、区切り文字を追加します。
    • [標準偏差] は、単一の入力値に有効なオプションではありません。
    • テキスト ソース フィールドにある [テキストのスライス] ボタンを使用して、入力値のどの文字を出力フィールドに抽出するかを選択します。 [テキストのスライス] ボタンにアクセスするには、入力フィールド リスト内のテキスト フィールドにポインターを合わせて、最初の文字と最後の文字の位置を指定します。
    • フィールドは、Python スクリプトを使用してマッピングすることもできます。

  • [フィールド マップ] パラメーターが結合マージ ルールを使って指定されていると、値が一意でない場合、結合された値の順序が [結合テーブル フィールド] パラメーターの行の順序と一致する保証するはありません。 たとえば、ANIMAL 属性値がネズミ、猫、犬である 3 つのフィーチャを結合した場合、結果は必ずしもネズミ、猫、犬の順にはなりません。

  • [結合の検証 (Validate Join)] ツールを使用すると、レイヤーまたはテーブルに有効なフィールド名および Object ID フィールドがあるかどうか、結合によって一致するレコードが生成されるか、結合が 1 対 1 であるか 1 対多であるかなどの結合のプロパティを判定するため、2 つのレイヤーまたはテーブル間の結合について検証を行うことができます。

    結合の検証を行うボタンは、簡単に使用できるよう、ツールのダイアログ ボックスにあります。

  • 入力フィールドと結合フィールドにインデックスを付けると、パフォーマンスが向上します。 [インデックス結合フィールド] パラメーターを使用して、インデックスを追加または置換します。

  • 結合結果が想定外または未完了の場合は、入力フィールドと結合フィールドにインデックスが付けられているかどうかを確認します。 フィールドにインデックスがない場合は、インデックスを追加してみてください。 フィールドにすでにインデックスがある場合は、インデックスを削除して再度追加し、インデックスに関する問題を修正してください。 [インデックス結合フィールド] パラメーターを使用して、ツール実行中のインデックス管理を行います。

パラメーター

ラベル説明データ タイプ
入力テーブル

結合テーブルの結合先となるテーブルまたはフィーチャクラス。

Mosaic Layer; Raster Layer; Table View
入力フィールド

結合のキーになる入力テーブル内のフィールド。

Field
結合テーブル

入力テーブルに結合されるテーブル。

Mosaic Layer; Raster Layer; Table View
結合フィールド

結合のキーとなる値が格納されている、結合テーブル内のフィールド。

Field
転送フィールド
(オプション)

入力テーブルと結合テーブルの間の結合に基づいて、入力テーブルに転送される、結合テーブルのフィールド。

Field
転送方法
(オプション)

結合フィールドとフィールド タイプを出力に転送する方法を指定します。

  • 転送フィールドの選択結合テーブル:のフィールドとフィールド タイプが出力に転送されます。 これがデフォルトです。
  • フィールド マッピングの使用結合テーブルのフィールドとフィールド タイプの出力への転送は、[フィールド マップ] パラメーターによって制御されます。
String
フィールド マップ
(オプション)

それぞれのプロパティおよびソース フィールドとともに入力テーブルに結合されるフィールド。 デフォルトでは、結合テーブル内のすべてのフィールドが含まれます。

フィールド マップを使用すると、フィールドの追加、フィールドの削除、フィールド名の変更、フィールドの順序変更、他のフィールド プロパティの変更を実行できます。

フィールド マップを使用して、複数の入力フィールドの値を 1 つの出力フィールドに結合することができます。

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
(オプション)

それぞれのプロパティおよびソース フィールドとともに入力テーブルに結合されるフィールド。 デフォルトでは、結合テーブル内のすべてのフィールドが含まれます。

フィールド マップを使用すると、フィールドの追加、フィールドの削除、フィールド名の変更、フィールドの順序変更、他のフィールド プロパティの変更を実行できます。

フィールド マップを使用して、複数の入力フィールドの値を 1 つの出力フィールドに結合することができます。

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 関数を示しています。このスクリプトでは、テーブルのフィールドのうちの 2 つだけが、結合の対象となります。

# 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)