概要
レイヤーまたはテーブルに有効なフィールド名または Object ID フィールドがあるかどうか、結合より一致するレコードが生成されるか、および結合のその他のプロパティを判定するため、2 つのレイヤーまたはテーブル間の結合について整合チェックを行います。
このツールは可能性のある結合を分析するのみで、結合は生成されません。このツールで整合チェックされる結合は、[テーブルの結合 (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 - 問題解決方法についての情報を含む、整合チェックに関するメッセージまたは警告の詳細。
- TYPE - 整合チェックした結合で検出された固有の特性または問題を示すために使用されるキーワード。以下の値があります。
結合の基数は (1 対 1 と 1 対多のいずれの場合も) このツールによって整合チェックされます。結合テーブルのレコードを、入力のレイヤーまたはテーブル ビュー内の複数のレコードに一致させることができます。同様に、結合テーブルの複数のレコードを、入力レイヤーまたはテーブル ビューの 1 レコードに一致させ、1 対多結合を生成することができます。
構文
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 |
コードのサンプル
次の 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: はい