[カタログ] ウィンドウ内のデータベース接続 (.dbconn) から空間テーブルをマップ上にドラッグし、ドキュメント データベースのデータにアクセスするクエリー レイヤーを自動的に作成できます。 または、[マップ] タブの [データの追加] ボタン
を使用し、ArcGIS Pro のマップにクエリー レイヤーを作成します。
ヒント:
サポートされているドキュメント データベース内のテーブル用にクエリー レイヤーを作成する手順については、以下で説明しています。 これらのソース タイプにアクセスするクエリー レイヤーを作成する手順については、「リレーショナル データベース内のデータのクエリー レイヤーを作成」または「クラウド データ ウェアハウス内のデータのクエリー レイヤーを作成」をご参照ください。
ワークフローの概要
サポートされているドキュメント データベースからデータのクエリー レイヤーを作成するために実行する必要がある操作について、概要を以下に示します。
- データベースに接続 - [カタログ] ウィンドウでデータベース接続を作成してプロジェクトに追加し、[新しいクエリー レイヤー] ダイアログ ボックスからそれを参照することができます。 または、[新しいクエリー レイヤー] ダイアログ ボックスからデータベース接続を作成できます。 手順については、「ArcGIS Pro から Elasticsearch への接続」または「ArcGIS Pro から OpenSearch への接続」をご参照ください。
- クエリーを定義 - クエリーに含めるテーブルとフィールドを選択します。 クエリー レイヤーでは SQL ステートメントが使用されます。 ただし、Elasticsearch と OpenSearch はリレーショナル データベースではないため、これらのデータベース内のデータからクエリー レイヤーを作成する際には、SQL ステートメントのサブセットのみがサポートされます。 JOIN 句や RELATE 句を含めることはできず、WHERE 句は制限されています。
- クエリーを検証 - 検証プロセスではクエリー ステートメントの構文がチェックされます。 テーブルに返された 1 つ目の行のプロパティを使用して、クエリーの妥当性が判別されます。 クエリー ステートメントが妥当でない場合、クエリー レイヤーを追加することはできません。
- 一意識別子を指定 - マップ内のすべてのフィーチャに一意識別子が必要です。 クエリー レイヤーには、各フィーチャの値を含む一意識別子フィールドが含まれている必要があります。 デフォルトでは、各フィーチャの一意識別子フィールドとしてシステム ID フィールドが使用されます。 別の ID フィールドを使用したい場合、その ID フィールドを選択できます。 フィールドを選択する場合、それは一意の値を含む整数フィールドである必要があります。
- ジオメトリー タイプを定義 - レイヤーのジオメトリー タイプは、そのレイヤーがポイント フィーチャ、マルチポイント フィーチャ、ライン フィーチャ、ポリゴン フィーチャのいずれかを格納しているのかを示します。 デフォルトでは、1 つ目の行のジオメトリー タイプが、そのテーブルに格納されるジオメトリー タイプを決めるのに使用されます。 ArcGIS ではテーブルにつき 1 つのジオメトリー タイプしかサポートしていないため、そのジオメトリー タイプのフィーチャだけがマップ上に描画されます。 クエリー レイヤーによって返された 1 つ目の行のジオメトリー タイプとは異なるタイプを指定できます。
たとえば、クエリーによって返された 1 つ目の行がライン フィーチャである場合、ライン フィーチャだけがマップ上に描画されます。 テーブルにポリゴン フィーチャが含まれている場合、レイヤーのジオメトリー タイプをポリゴンとして定義すると、クエリーによって返されたポリゴン フィーチャだけがマップ上に描画されます。
ネストしたジオメトリー フィールドはサポートされません。
サポートされる WHERE 句の形式
ArcGIS からドキュメント データベースに対してクエリーを実行する際に、すべての SQL WHERE 句ステートメントがサポートされるわけではありません。 ドキュメント データベースにアクセスするクエリー レイヤーでは次の構文を使用できます。
- <FIELD_NAME | LITERAL>'<='<FIELD_NAME | LITERAL>
- <FIELD_NAME | LITERAL>'>='<FIELD_NAME | LITERAL>
- <FIELD_NAME | LITERAL>'<'<FIELD_NAME | LITERAL>
- <FIELD_NAME | LITERAL>'>'<FIELD_NAME | LITERAL>
- <FIELD_NAME | LITERAL>'='<FIELD_NAME | LITERAL>
- <FIELD_NAME | LITERAL>'<>'<FIELD_NAME | LITERAL>
- <BOOLEAN EXPRESSION> AND | OR <BOOLEAN EXPRESSION>
- NOT <BOOLEAN EXPRESSION>
- <FIELD_NAME> LIKE <STRING>
- <FIELD_NAME> NOT LIKE <STRING>
- <FIELD_NAME> IN ( <LITERAL>, <LITERAL>, ... )
- <FIELD_NAME> NOT IN ( <LITERAL>, <LITERAL>, ... )
- <FIELD_NAME> BETWEEN <FIELD_NAME | LITERAL> AND <FIELD_NAME | LITERAL>
- <FIELD_NAME> NOT BETWEEN <FIELD_NAME | LITERAL> AND <FIELD_NAME | LITERAL>
以下の構文もサポートされますが、サポートされているドキュメント データベースでフィールド内の NULL 値はサポートされないため、リレーショナル データベースやデータ ウェアハウスのテーブルに同じ句を定義した場合に返されるものとは使用法が若干異なります。
- <FIELD_NAME> IS NULL - 指定したフィールドで値が欠落している行を返します。
- <FIELD_NAME> IS NOT NULL - 指定したフィールドで値を持つ行を返します。
Elasticsearch または OpenSearch のテーブルにクエリー レイヤーを作成します。
Elasticsearch または OpenSearch のデータにアクセスするクエリー レイヤーをマップに追加するには、テーブルをマップ上にドラッグするか、[新しいクエリー レイヤー] ダイアログ ボックスでクエリー レイヤーを定義します。
テーブルをマップ上にドラッグ
[カタログ] ウィンドウのデータベース接続ファイル (.dbconn) からマップ上にテーブルをドラッグすると、ArcGIS Pro で、そのテーブルのすべての行とフィールドを選択するクエリー レイヤーが自動的に作成されます。 また、システム管理された _id フィールドを、レイヤーの一意識別子フィールドとして設定します。
レイヤーをマップにドラッグすると、ArcGIS Pro でそのレイヤーの範囲が計算されます。 ArcGIS Pro では、1 つ目の行のジオメトリー タイプが特定され、そのジオメトリー タイプがクエリー レイヤーのジオメトリー タイプとして設定されます。 そのジオメトリー タイプのフィーチャだけがマップに描画されます。
レイヤーをマップに追加したら、必要に応じてクエリー レイヤーを変更できます。
新しいクエリー レイヤー ダイアログ ボックスでクエリーを定義する
[新しいクエリー レイヤー] ダイアログ ボックスを使用して ArcGIS Pro プロジェクトのマップ内にクエリー レイヤーを定義するには、次の手順を実行します。
- クエリー レイヤーを追加するマップを ArcGIS Pro で開きます。
- [マップ] リボン上の [レイヤー] グループで [データの追加] ボタン
の矢印をクリックして、ドロップダウン メニューから [クエリー レイヤー]
を選択します。
[新しいクエリー レイヤー] ダイアログ ボックスが表示されます。
- 次のいずれかの手順を実行して接続を指定します。
- 接続ファイル (*.dbconn) がプロジェクト内にすでに存在する場合は、ドロップダウン リストからそのファイルを選択します。
- プロジェクトに接続が存在していない場合は、新しいデータベース接続ボタン
をクリックして新しい接続を作成します。 接続を作成したら、ドロップダウン リストからそれを選択します。
- [名前] テキスト ボックスで、作成するクエリー レイヤーの名前を指定します。
この名前は、マップの [コンテンツ] ウィンドウに表示されます。
- [クエリー] テキスト ボックスに SQL クエリーを入力するか貼り付けます。
テーブル (インデックス) とそのフィールドを一覧表示するには、[テーブルの一覧] チェックボックスをオンにします。 [テーブルの一覧] セクション内のテーブルをダブルクリックしてすべてのフィールドを [クエリー] テキスト ボックスに追加し、[クエリー] テキスト ボックスでクエリーを編集することができます。 たとえば、含めたくないフィールドをクエリーから削除したり、クエリー レイヤーに含まれるデータを制限するためにクエリーに WHERE 句を追加したりすることができます。
上記のセクションで説明している WHERE 句を使用できますが、その他の句はサポートされていません。
クエリーにオブジェクト フィールド タイプが含まれる場合、そのフィールドにクエリーを実行して内部のすべてのサブフィールド値を返すか、単一のサブフィールドにクエリーを実行できます。 たとえば、次のオブジェクト フィールド (parts) には、サブフィールド modelno、installed、inspected、および replaced が含まれます:
"parts": { "modelno": { "type": "text" },{ "installed": { "type": "date" }, "inspected": { "type": "date" }, "replaced": { "type": "date" } }以下の例に示すように、テーブル (コンピューター) のクエリーに parts フィールドを含めることができます。4 つのサブフィールドすべての値がテキスト フィールドとして返されます。
パート フィールド内のすべてのサブフィールドを返すクエリーを定義します。
SELECT parts FROM machinesまたは、単一のサブフィールドにクエリーを実行することもできます。 次の例では、inspected サブフィールドにクエリーが実行され、その日付値が返されます。
検査対象のサブフィールド値を返すクエリーを定義します。
SELECT "parts.inspected" FROM machinesレイヤーのクエリーを定義する際、サブフィールドまたは最上位フィールドのいずれかにクエリーを実行できますが、両方にクエリーを実行することはできません。
- レイヤーの空間プロパティを定義する方法を指定します。
- [ArcGIS Pro でレイヤーの空間プロパティを検索] (デフォルト オプション) を選択して、クエリーから最初に返された行の空間プロパティを ArcGIS Pro で使用できるようにします。 SQL ステートメントの検証を実行する際に、ArcGIS Pro でこれらのプロパティが検索されます。
- 最初の行の空間プロパティとは異なる空間プロパティを持つフィーチャをレイヤーに含める場合は、[レイヤーの空間プロパティの定義] を選択します。
- [検証] をクリックすると、クエリーの構文が正しいかどうかと ArcGIS でそのクエリーを使用できるかどうかを確認できます。
検証プロセスでは、データベースに対してクエリーを実行し、クエリーから返される結果セットが ArcGIS のデータ モデリング標準に従っているかどうかが確認されます。 クエリー レイヤーは、検証が確認されるまでマップに追加されません。
検証ルールとして、次を満たしていることが確認されます。
- 結果セットの持つ空間フィールドは 1 つだけである。
- 結果セットが持つシェープ タイプは 1 つだけである。
- 結果セットに、ArcGIS のサポートしないフィールド タイプは含まれていない。
何らかの理由で検証に失敗した場合は、エラー メッセージが返されるため、クエリーを修正する必要があります。
検証は、対象のデータが ArcGIS と同じ標準を使用しないデータベース内のデータである場合に特に重要になります。
- クエリーが検証に合格したら、[次へ] をクリックします。
- フィーチャの内部 ID フィールド以外の一意識別子フィールドを選択するには、ArcGIS が各フィールドの ID として使用可能な一意の値が含まれている整数フィールドの横のチェックボックスをオンにします。
一意識別子フィールドを選択する必要はありません。 フィールドを指定しなかった場合、システム ID フィールドが使用されます。
- ドロップダウン メニューからジオメトリー タイプを選択します。
[ArcGIS Pro でレイヤーの空間プロパティを検索] オプションを選択した場合、これはすでに設定済みである可能性があります。
- ステップ 6 で [ArcGIS Pro でレイヤーの空間プロパティを検索] オプションを選択した場合は、[完了] をクリックして、クエリー レイヤーをマップに追加します。
- [レイヤー範囲プロパティ] セクションで、次のいずれかを選択して、クエリー レイヤーの空間範囲を指定します。
- [範囲の入力] - [次へ] をクリックした際に、範囲を入力する必要があります。 必ず有効な範囲を指定し、テーブル内のすべてのフィーチャを範囲に含める必要があります。
- [マップ範囲を使用] - 現在のマップの範囲がクエリー レイヤーの範囲として使用されます。 [次へ] をクリックして、マップ範囲の値を確認します。
- [空間参照範囲の使用] - データの空間参照の範囲がクエリー レイヤーの範囲として使用されます。 一部の空間参照では、この範囲は地球全体になります。 [次へ] をクリックして、空間参照範囲の値を確認します。
- レイヤーの範囲の設定または確認が終了したら、[完了] をクリックして、クエリー レイヤーをマップに追加します。
注意:
M 値と Z 値はサポートされていません。
レイヤーに対して空間参照は定義できません。SRID 4326、GCS WGS 1984 が常に使用されます。
次の 2 つのステップは [レイヤーの空間プロパティの定義] オプションを選択した場合にのみ適用されます。
クエリー レイヤーのプロパティを変更する方法については、「クエリー レイヤーの変更」をご参照ください。