結合の検証 (Validate Join) (データ管理)

サマリー

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

このツールは結合を生成せず、現在のデータを使用して可能性のある結合を分析します。 すべての結合が 1 対多になる可能性があるため、レイヤー プロパティには常に 1 対多の基数が表示されます。 データが変化すると、結合は 1 対 1 から 1 対多に変わります。 このツールで検証される結合は、[テーブルの結合 (Add Join)] または [フィールドの結合 (Join Field)] ツールで作成できます。 結合の検証結果はメッセージとしてレポートされ、オプションで出力テーブルによるレポートも可能です。

使用法

  • このツールにより、検証する結合の特性を示すメッセージが作成されます。次のような特性があります。

    • 入力レイヤーまたはテーブル ビューと結合テーブルの間で指定された結合の行数および一致数。 結合による一致がない場合は、警告メッセージが含まれます。 行数および一致数は、ツールの派生した出力としても返されます。
    • 結合テーブルに Object ID がない場合は、警告メッセージが含まれます。
    • 結合の基数 (結果が 1 対 1 または 1 対多の場合)。
    • 結合フィールドの先頭文字が無効であったり名前の文字に問題があったりした場合は、警告メッセージが含まれます。
    • 結合フィールドに予約済みの 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

      レイヤーまたはテーブル ビューに Object ID フィールドがありません。

      GPM_NOT_INDEX_FIELD

      インデックスがありません。

      DIFFERENT_WORKSPACE

      テーブルが、異なるワークスペースまたはデータベースに格納されています。

    • TABLE_NAME - 結合の検証のメッセージまたは警告を生成したテーブルの名前。
    • FIELD_NAME - 結合の検証のメッセージまたは警告を生成した、入力レイヤー、テーブル ビュー、または結合テーブルのフィールドの名前。
    • DESC - 問題解決方法についての情報を含む、検証に関するメッセージまたは警告の詳細。

  • 結合の基数は (1 対 1 と 1 対多のいずれの場合も) このツールによって検証されます。 結合テーブルのレコードを、入力のレイヤーまたはテーブル ビュー内の複数のレコードに一致させることができます。 同様に、結合テーブルの複数のレコードを、入力レイヤーまたはテーブル ビューの 1 レコードに一致させ、1 対多結合を生成することができます。

  • 結合によって 1 対多の結合が生成された場合、結合の結果は属性テーブルで確認でき、テーブルに重複する Object ID が存在する場合、警告メッセージが表示されます。 多くのジオプロセシング ツールは重複した Object ID を含むデータをサポートしておらず、そのようなデータを処理した際に予期しない結果が生じる可能性があるため、最初に [フィーチャのエクスポート (Export Features)] ツールを使用して結合したレイヤーを新しいフィーチャクラスにコピーすることをお勧めします。 その後、新しいフィーチャクラスを他のジオプロセシング ツールの入力として使用します。

パラメーター

ラベル説明データ タイプ
入力レイヤーまたはテーブル ビュー

結合テーブルへの結合を含むレイヤーまたはテーブル ビュー。

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

結合のキーとなる、入力のレイヤーまたはテーブル ビューのフィールド。

Field
結合テーブル

入力レイヤーまたはテーブル ビューへの結合を含むテーブルまたはテーブル ビュー。このテーブルが検証されます。

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

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

Field
出力テーブル
(オプション)

表形式の検証メッセージを含む出力テーブル。

Table

派生した出力

ラベル説明データ タイプ
一致数

結合レイヤーまたはテーブルの 1 レコードに一致する、入力レイヤーまたはテーブルの一意のレコードの数。

Long
行数

入力および結合レイヤーまたはテーブルの結合によって生成されるレコードの数。 1 対多結合は、一致する各レコードのペアを数えます。 1 対多結合のため、出力行数は一致数より大きくなることがあります。

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

結合レイヤーまたはテーブルの 1 レコードに一致する、入力レイヤーまたはテーブルの一意のレコードの数。

Long
row_count

入力および結合レイヤーまたはテーブルの結合によって生成されるレコードの数。 1 対多結合は、一致する各レコードのペアを数えます。 1 対多結合のため、出力行数は一致数より大きくなることがあります。

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