ラベル | 説明 | データ タイプ |
入力テーブル | クエリに使用するテーブル (1 つまたは複数) の名前。 複数のテーブルがリストされている場合は、[式] パラメーターを使用して、テーブル同士の結合方法を定義することができます。 入力テーブルは、ジオデータベース接続またはデータベース接続から取得できます。 | Table View; Raster Layer |
テーブル名 | 作成されるレイヤーまたはテーブル ビューの名前。 | Table View; Raster Layer |
キー フィールド オプション | クエリ用の Object ID フィールドを生成する場合、その生成方法を指定します。 ArcGIS のレイヤーとテーブル ビューには、Object ID フィールドが必要です。 Object ID フィールドは、使用されるデータの行を一意に識別する整数フィールドです。
| String |
キー フィールド (オプション) | クエリ内の行を一意に識別するために使用される、フィールドまたはフィールドの組み合わせ。 このパラメーターは、[キー フィールド オプション] パラメーターが [キー フィールドの使用] に設定されている場合にのみ使用されます。 | Field |
フィールド (オプション) | レイヤーまたはテーブル ビューに格納されるフィールド。 フィールド用のエイリアスが設定されている場合、この名前が表示されます。 フィールドを指定しないと、すべてのテーブル内のすべてのフィールドが格納の対象になります。 Shape フィールドをフィールド リストに追加した場合、結果はレイヤーになります。それ以外の場合、結果はテーブル ビューになります。 | Value Table |
式 (オプション) | レコードのサブセットを選択するために使用する SQL 式。 | SQL Expression |
サマリー
SQL クエリをデータベースに適用し、結果をレイヤーまたはテーブル ビューのどちらかに表示します。 クエリを使用して複数のテーブルを結合したり、データベース内の元のデータからフィールドまたは行の一部を取得したりできます。
このツールは、ジオデータベース コネクションまたは OLE DB コネクションからデータを受け取ります。
使用法
このツールで作成されるレイヤーは一時的であるため、ドキュメントを保存しておかない限り、セッション後に削除されます。
すべての入力フィーチャクラスまたはテーブルは、同じ入力ワークスペース内のものでなければなりません。
Shape フィールドをフィールド リストに追加した場合、結果はレイヤーになります。それ以外の場合、結果はテーブル ビューになります。
出力結果がレイヤーである場合、[レイヤー ファイルの保存 (Save To Layer File)] ツールを使用してレイヤー ファイルに保存するか、または [フィーチャのコピー (Copy Features)] ツールを使用してフィーチャクラスに保存することができます。
フィールド リスト内のフィールド順序は、出力レイヤーまたはテーブル ビューにフィールドが表示される順序です。
キー フィールド オプションとキー フィールド リストを指定できます。 この情報は、行を一意に識別し、動的に生成された Object ID フィールドをデータに追加するために使用されます。 Object ID フィールドがない場合、選択はサポートされません。
一意の値を定義するうえでフィールドの組み合わせが必要な場合、キー フィールド リストでフィールドをいくつか選択することができます。
SQL 式を使用しても一致するレコードが返されない場合、出力フィーチャクラスは空になります。
フィーチャクラスは結合することが可能です。ただし、その場合は、フィールド リストに含めることのできるジオメトリ タイプのフィールドは最大で 1 つまでに限定されます。
[式] パラメーターの構文の詳細については、「SQL モード」をご参照ください。
入力テーブルがファイル ジオデータベース内のものである場合、テーブルは一般的に [入力テーブル] パラメーターにリストされている順に結合されます。 たとえば、テーブル 1 がテーブル 2 より前にリストされている場合、まずテーブル 1 から行を取得した後、その行に一致する行をテーブル 2 から取得すると、テーブル 2 が結合されます。 ただし、結合の結果、インデックスの付いていないフィールド上のテーブル 2 に対してクエリが実行されて順序が反転した場合は、パフォーマンスの最大化を図るために、インデックス付きフィールド上のテーブル 1 に対してクエリが実行されて順序が反転します。 これは、このツールと一緒にファイル ジオデータベース データを使用している場合に使用する、唯一のクエリ最適化ロジックです。 一般的に、ファイル ジオデータベース内で、1 対多または 1 対 1 の結合を行うときに最適に動作します。
パラメーター
arcpy.management.MakeQueryTable(in_table, out_table, in_key_field_option, {in_key_field}, {in_field}, {where_clause})
名前 | 説明 | データ タイプ |
in_table [in_table,...] | クエリに使用するテーブル (1 つまたは複数) の名前。 複数のテーブルがリストされている場合は、where_clause パラメーターを使用して、テーブル同士の結合方法を定義することができます。 入力テーブルは、ジオデータベース接続またはデータベース接続から取得できます。 | Table View; Raster Layer |
out_table | 作成されるレイヤーまたはテーブル ビューの名前。 | Table View; Raster Layer |
in_key_field_option | クエリ用の Object ID フィールドを生成する場合、その生成方法を指定します。 ArcGIS のレイヤーとテーブル ビューには、Object ID フィールドが必要です。 Object ID フィールドは、使用されるデータの行を一意に識別する整数フィールドです。
| String |
in_key_field [in_key_field,...] (オプション) | クエリ内の行を一意に識別するために使用される、フィールドまたはフィールドの組み合わせ。 このパラメーターが使用可能になるのは、in_key_field_option パラメーターが USE_KEY_FIELDS に設定されているときだけです。 | Field |
in_field [[field, {alias}],...] (オプション) | レイヤーまたはテーブル ビューに格納されるフィールド。 フィールド用のエイリアスが設定されている場合、この名前が表示されます。 フィールドを指定しないと、すべてのテーブル内のすべてのフィールドが格納の対象になります。 Shape フィールドをフィールド リストに追加した場合、結果はレイヤーになります。それ以外の場合、結果はテーブル ビューになります。 | Value Table |
where_clause (オプション) | レコードのサブセットを選択するために使用する SQL 式。 | SQL Expression |
コードのサンプル
次の Python ウィンドウ スクリプトは、イミディエイト モードで MakeQueryTable 関数を使用する方法を示しています。
import arcpy
arcpy.env.workspace = "C:/data/data.gdb"
arcpy.management.MakeQueryTable(["Counties","codemog"], "queryout", "ADD_VIRTUAL_KEY_FIELD", "",
[["Counties.OBJECTID", 'ObjectID'], ["Counties.NAME", 'Name'],
["codemog.Males", 'Males'], ["codemog.Females", 'Females']],
"Counties.FIPS = codemog.Fips and Counties.STATE_NAME = 'California'")
次のスクリプトは、Python スクリプト環境で MakeQueryTable 関数を使用する方法を、例を挙げて示したものです。
# MakeQueryTableOLEDB.py
# Description: Create a query table from two OLE DB tables using a limited set of
# fields and establishing an equal join.
# Import system modules
import arcpy
# Local variables...
tableList = ["c:/Connections/balrog.odc/vtest.COUNTIES",\
"c:/Connections/balrog.odc/vtest.CODEMOG"]
fieldList = [["vtest.COUNTIES.OBJECTID", 'ObjectID'], ["vtest.COUNTIES.NAME", 'Name']\
["vtest.CODEMOG.Males", 'Males'], ["vtest.CODEMOG.Females", 'Females']]
whereClause = "vtest.COUNTIES.FIPS = vtest.CODEMOG.Fips" +\
"and vtest.COUNTIES.STATE_NAME = 'California'"
keyField = "vtest.COUNTIES.OBJECTID"
lyrName = "CountyCombined"
# Make Query Table...
arcpy.management.MakeQueryTable(tableList, lyrName,"USE_KEY_FIELDS", keyField, fieldList, whereClause)
# Print the total rows
print(arcpy.management.GetCount(lyrName))
# Print the fields
fields = arcpy.ListFields(lyrName)
for field in fields:
print(field.name)
# Save as a dBASE file
arcpy.management.CopyRows(lyrName, "C:/temp/calinfo.dbf")