クエリ テーブルの作成(Make Query Table) (データの管理)
サマリ
このツールは、SQL クエリをデータベースに適用し、結果をレイヤまたはテーブル ビューのどちらかに表示します。クエリを使用して複数のテーブルを結合したり、データベース内の元のデータから列または行の一部を取得したりできます。
このツールは、ArcSDE ジオデータベース、ファイル ジオデータベース、パーソナル ジオデータベース、または OLE DB 接続からのデータに対して使用します。
使用法
このツールで作成されるレイヤは一時的であるため、ドキュメントを保存しておかない限り、セッション後に削除されます。
-
すべての入力フィーチャクラスまたはテーブルは、同じ入力ワークスペース内のものでなければなりません。
-
Shape 列をフィールド リストに追加した場合、結果はレイヤになります。それ以外の場合、結果はテーブル ビューになります。
-
出力結果がレイヤである場合、[レイヤ ファイルの保存(Save To Layer File)] ツールを使用してレイヤ ファイルに保存するか、または [フィーチャのコピー(Copy Features)] ツールを使用してフィーチャクラスに保存することができます。
-
フィールド リスト内のフィールド順序は、出力レイヤまたはテーブル ビューにフィールドが表示される順序を示しています。
-
このツールでは、キー フィールド オプションおよびキー フィールド リストを指定することができます。この情報は、行を一意に識別し、動的に生成された ObjectID 列をデータに追加するために使用されます。ObjectID 列がない場合、選択はサポートされません。
-
キー フィールド リストで、列をいくつか選択することができます。これらの列の組み合わせは、一意の値を定義するうえで必要です。
-
SQL 式を使用しても一致するレコードが返されない場合、出力フィーチャクラスは空になります。
-
フィーチャクラスは結合することが可能です。ただし、その場合は、フィールド リストに含めることのできるジオメトリ タイプのフィールドは最大で 1 つまでに限定されます。複数のジオメトリ列を追加しておいた場合、[OK] をクリックしたときにエラーが表示され、ツールの実行が中断されます。
-
[式] パラメータの構文の詳細については、「SQL 式の作成」または「SQL リファレンス」をご参照ください。
-
[フィールド] パラメータと [キー フィールド] パラメータの [値の追加] ボタンは、ModelBuilder 専用です。ModelBuilder では、先のツールが実行されていないか、出力データが存在しないために、[フィールド] パラメータと [キー フィールド] パラメータにフィールド名が表示されない場合があります。[フィールドの追加] ボタンで [クエリ テーブルの作成(Make Query Table)] ダイアログ ボックスに所定のフィールド(1 つまたは複数)を追加して完了した後、モデルの作成を続行できます。
-
入力テーブルがファイル ジオデータベース内のものである場合、テーブルは一般的に [入力テーブル パラメータ] にリストされている順に結合されます。たとえば、テーブル 1 がテーブル 2 より前にリストされている場合、まずテーブル 1 から行を取得した後、その行に一致する行をテーブル 2 から取得すると、テーブル 2 が結合されます。ただし、結合の結果、インデックスの付いていないフィールド上のテーブル 2 に対してクエリが実行されて順序が反転した場合は、パフォーマンスの最大化を図るために、インデックス付きフィールド上のテーブル 1 に対してクエリが実行されて順序が反転します。これは、このツールと一緒にファイル ジオデータベース データを使用している場合に機能する、唯一のクエリ最適化ロジックです。一般的に、ファイル ジオデータベース内で、1 対多および 1 対 1 の結合を行うときに最適に動作します。
構文
パラメータ | 説明 | データ タイプ |
in_table [in_table,...] |
クエリに使用するテーブル(1 つまたは複数)の名前。複数のテーブルがリストされている場合は、[式] パラメータを使用して、テーブル同士の結合方法を定義することができます。 入力テーブルとして使用できるのは、ArcSDE ジオデータベース、ファイル ジオデータベース、パーソナル ジオデータベース、または OLE DB 接続からのものです。 | Table View; Raster Layer |
out_table |
ツールで作成するレイヤまたはテーブル ビューの名前。 | Table View;Raster Layer |
in_key_field_option |
クエリ用の ObjectID フィールドを生成する場合、その生成方法を指定します。デフォルトは USE_KEY_FIELDS です。
| String |
in_key_field [in_key_field,...] (オプション) |
クエリ内の行を一意に識別するために使用できる、フィールドまたはフィールドの組み合わせを指定します。このパラメータが使用可能になるのは、USE_KEY_FIELDS が設定されているときだけです。 [フィールドの追加] ボタンは ModelBuilder だけで使用され、ダイアログ ボックスを完了してモデルの作成を続行できるように、必要なフィールドが追加されます。 | Field |
in_field [[Field, {Alias}],...,...] (オプション) |
レイヤまたはテーブルに格納されるフィールド。フィールド用のエイリアスが設定されている場合、この名前が表示されます。フィールドを指定しないと、すべてのテーブル内のすべてのフィールドが格納の対象になります。 | Value Table |
where_clause (オプション) |
レコードのサブセットを選択するために使用する SQL 式。この式の構文はデータ ソースによって多少異なります。たとえば、クエリ対象がファイル ジオデータベース、ArcSDE ジオデータベース、シェープファイル、カバレッジ、dBASE、または INFO テーブルの場合は、次のようにフィールド名を二重引用符で囲みます。 "MY_FIELD" クエリ対象がパーソナル ジオデータベースの場合は、以下のようにフィールドを角括弧で囲みます。 [MY_FIELD] Python では、文字列を単一引用符または二重引用符で囲みます。SQL 式の WHERE 句などで通常行われるように、引用符を含む文字列を作成する場合は、引用符を円記号(\)でエスケープするか、文字列を三重引用符で囲みます。たとえば、次のような WHERE 句を記述する場合、 "CITY_NAME" = 'Chicago' 次のように文字列全体を二重引用符で囲み、内部の二重引用符をエスケープします。 " \"CITY_NAME\" = 'Chicago' " または、次のように文字列全体を単一引用符で囲み、内部の単一引用符をエスケープします。 ' "CITY_NAME" = \'Chicago\' ' あるいは、次のようにエスケープしないで文字列全体を三重引用符で囲みます。 """ "CITY_NAME" = 'Chicago' """ SQL 構文の詳細とデータ ソースによる違いについては、ヘルプ トピックの「ArcGIS で使用されるクエリ式への SQL リファレンス」をご参照ください。 | SQL Expression |
コードのサンプル
次の Python ウィンドウ スクリプトは、MakeQueryTable(クエリ テーブルの作成)関数をイミディエイト モードで使用する方法を示しています。
import arcpy from arcpy import env 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'")
次のスクリプトは、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. # Author: ESRI # Import system modules import arcpy try: # Local variables... tableList = ["Database Connections/balrog.odc/vtest.COUNTIES",\ "Database 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") except Exception, e: # If an error occurred, print line number and error message import traceback, sys tb = sys.exc_info()[2] print "Line %i" % tb.tb_lineno print e.message