[カタログ] ウィンドウ内のデータベース接続 (.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 句を使用できますが、その他の句はサポートされていません。
- レイヤーの空間プロパティを定義する方法を指定します。
- [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 つのステップは [レイヤーの空間プロパティの定義] オプションを選択した場合にのみ適用されます。
クエリ レイヤーのプロパティを変更する方法については、「クエリ レイヤーの変更」をご参照ください。