クエリ テーブルの作成 (Make Query Table) (データ管理)

サマリー

SQL クエリをデータベースに適用し、結果をレイヤーまたはテーブル ビューのどちらかに表示します。クエリを使用して複数のテーブルを結合したり、データベース内の元のデータからフィールドまたは行の一部を取得したりできます。

このツールは、ジオデータベース接続または OLE DB 接続からデータを受け取ります。

使用法

  • このツールで作成されるレイヤーは一時的であるため、ドキュメントを保存しておかない限り、セッション後に削除されます。

  • すべての入力フィーチャクラスまたはテーブルは、同じ入力ワークスペース内のものでなければなりません。

  • Shape フィールドをフィールド リストに追加した場合、結果はレイヤーになります。それ以外の場合、結果はテーブル ビューになります。

  • 出力結果がレイヤーである場合、[レイヤー ファイルの保存 (Save To Layer File)] ツールを使用してレイヤー ファイルに保存するか、または [フィーチャのコピー (Copy Features)] ツールを使用してフィーチャクラスに保存することができます。

  • フィールド リスト内のフィールド順序は、出力レイヤーまたはテーブル ビューにフィールドが表示される順序です。

  • このツールでは、キー フィールド オプションおよびキー フィールド リストを指定することができます。この情報は、行を一意に識別し、動的に生成された ObjectID フィールドをデータに追加するために使用されます。ObjectID フィールドがない場合、選択はサポートされません。

  • 一意の値を定義するうえでフィールドの組み合わせが必要な場合、キー フィールド リストでフィールドをいくつか選択することができます。

  • SQL 式を使用しても一致するレコードが返されない場合、出力フィーチャクラスは空になります。

  • フィーチャクラスは結合することが可能です。ただし、その場合は、フィールド リストに含めることのできるジオメトリ タイプのフィールドは最大で 1 つまでに限定されます。

  • [式] パラメーターの構文の詳細については、「SQL モード」をご参照ください。

  • [フィールド] パラメーターと [キー フィールド] パラメーターの [フィールドの追加] は ModelBuilder でのみ使用されます。ModelBuilder では、先のツールが実行されていないか、出力データが存在しない場合、[フィールド] パラメーターと [キー フィールド] パラメーターにフィールド名が表示されない場合があります。[フィールドの追加] ボタンで [クエリ テーブルの作成 (Make Query Table)] ダイアログ ボックスに所定のフィールド (1 つまたは複数) を追加して完了した後、モデルの作成を続行できます。

  • 入力テーブルがファイル ジオデータベース内のものである場合、テーブルは一般的に [入力テーブル] パラメーターにリストされている順に結合されます。たとえば、テーブル 1 がテーブル 2 より前にリストされている場合、まずテーブル 1 から行を取得した後、その行に一致する行をテーブル 2 から取得すると、テーブル 2 が結合されます。ただし、結合の結果、インデックスの付いていないフィールド上のテーブル 2 に対してクエリが実行されて順序が反転した場合は、パフォーマンスの最大化を図るために、インデックス付きフィールド上のテーブル 1 に対してクエリが実行されて順序が反転します。これは、このツールと一緒にファイル ジオデータベース データを使用している場合に機能する、唯一のクエリ最適化ロジックです。一般的に、ファイル ジオデータベース内で、1 対多または 1 対 1 の結合を行うときに最適に動作します。

パラメーター

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

クエリに使用するテーブル (1 つまたは複数) の名前。複数のテーブルがリストされている場合は、[式] パラメーターを使用して、テーブル同士の結合方法を定義することができます。

入力テーブルは、ジオデータベース接続またはデータベース接続から取得できます。

Table View; Raster Layer
テーブル名

作成されるレイヤーまたはテーブル ビューの名前。

Table View; Raster Layer
キー フィールド オプション

クエリ用の ObjectID フィールドを生成する場合、その生成方法を指定します。ArcGIS のレイヤーとテーブル ビューには、ObjectID フィールドが必要です。ObjectID フィールドは、使用されるデータの行を一意に識別する整数フィールドです。デフォルトは [キー フィールドの使用] (Python では USE_KEY_FIELDS) です。

  • キー フィールドの使用[キー フィールド] パラメーターで指定したフィールドは、出力テーブル内の行を一意に識別するために使用されます。これには、単一のフィールド、または組み合わせると出力テーブル内の行を一意に識別できる複数のフィールドを使用できます。キー フィールド リストでフィールドが指定されていない場合、[キー フィールドの生成] オプション (Python では ADD VIRTUAL_KEY_FIELD) が自動的に適用されます。
  • キー フィールドを生成キー フィールドが指定されていない場合、出力テーブル内の各行を一意に識別する ObjectID が生成されます。
  • キー フィールドなしObjectID フィールドが生成されません。テーブル ビューで選択がサポートされません。
    注意:

    このオプションがオンになっている場合でも、フィールド リストに ObjectID タイプのフィールドがすでに存在していれば、その列が ObjectID として使用されます。

String
キー フィールド
(オプション)

クエリ内の行を一意に識別するために使用される、フィールドまたはフィールドの組み合わせ。このパラメーターは、[キー フィールド オプション] パラメーターが [キー フィールドの使用] に設定されている場合にのみ使用されます。

[フィールドの追加] ボタンは ModelBuilder でのみ使用され、ダイアログ ボックスを完了してモデルの作成を続行できるように、必要なフィールドを追加できます。

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

レイヤーまたはテーブルに格納されるフィールド。フィールド用のエイリアスが設定されている場合、この名前が表示されます。フィールドを指定しないと、すべてのテーブル内のすべてのフィールドが格納の対象になります。Shape フィールドをフィールド リストに追加した場合、結果はレイヤーになります。それ以外の場合、結果はテーブル ビューになります。

Value Table
(オプション)

レコードのサブセットを選択するために使用する SQL 式。

SQL Expression

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

クエリ用の ObjectID フィールドを生成する場合、その生成方法を指定します。ArcGIS のレイヤーとテーブル ビューには、ObjectID フィールドが必要です。ObjectID フィールドは、使用されるデータの行を一意に識別する整数フィールドです。デフォルトは [キー フィールドの使用] (Python では USE_KEY_FIELDS) です。

  • USE_KEY_FIELDS[キー フィールド] パラメーターで指定したフィールドは、出力テーブル内の行を一意に識別するために使用されます。これには、単一のフィールド、または組み合わせると出力テーブル内の行を一意に識別できる複数のフィールドを使用できます。キー フィールド リストでフィールドが指定されていない場合、[キー フィールドの生成] オプション (Python では ADD VIRTUAL_KEY_FIELD) が自動的に適用されます。
  • ADD_VIRTUAL_KEY_FIELDキー フィールドが指定されていない場合、出力テーブル内の各行を一意に識別する ObjectID が生成されます。
  • NO_KEY_FIELDObjectID フィールドが生成されません。テーブル ビューで選択がサポートされません。
    注意:

    このオプションがオンになっている場合でも、フィールド リストに ObjectID タイプのフィールドがすでに存在していれば、その列が ObjectID として使用されます。

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

コードのサンプル

MakeQueryTable (クエリ テーブルの作成) の例 1 (Python ウィンドウ)

次の Python ウィンドウ スクリプトは、イミディエイト モードで MakeQueryTable 関数を使用する方法を示しています。

import arcpy
arcpy.env.workspace = "C:/data/data.gdb"
arcpy.MakeQueryTable_management(["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'")
MakeQueryTable (クエリ テーブルの作成) の例 2 (スタンドアロン スクリプト)

次のスクリプトは、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.MakeQueryTable_management(tableList, lyrName,"USE_KEY_FIELDS", keyField, fieldList, whereClause)
# Print the total rows
print(arcpy.GetCount_management(lyrName))
 
# Print the fields
fields = arcpy.ListFields(lyrName)
for field in fields:
    print(field.name)
# Save as a dBASE file
arcpy.CopyRows_management(lyrName, "C:/temp/calinfo.dbf")

環境

特殊なケース

ライセンス情報

  • Basic: Yes
  • Standard: Yes
  • Advanced: Yes

関連トピック