データベース レイヤーをマップ上にドラッグして、クエリ レイヤーを自動的に作成するか、[マップ] タブの [データの追加] ボタン を使用して、クエリ レイヤーをマップ内に作成することができます。
ヒント:
このページでは、データベース内のテーブルのクエリ レイヤーを作成する方法を説明します。 クラウド データ ウェアハウス内のデータにアクセスする場合は、「クラウド データ ウェアハウス内のデータのクエリ レイヤーを作成」をご参照ください。
ジオデータベース システム テーブルにアクセスするクエリ レイヤーはサポートされていません。
前提条件とワークフロー
クエリ レイヤーを作成する前に、「クエリ レイヤー向けのデータベースとクライアントの構成」に目を通しておいてください。
次に、以下の各サブセクションを参照し、[新しいクエリ レイヤー] ダイアログ ボックスを使用してデータベースのクエリ レイヤーを作成する際に実行するワークフローを確認してください。
データベースへの接続
クエリ レイヤーを定義する前に、クエリ対象のデータベースに接続しておく必要があります。
「ArcGIS AllSource でのデータベース コネクション」の記載に従って [カタログ] ウィンドウでデータベース接続を作成し、プロジェクトに追加した後、そのデータベース接続を [新しいクエリ レイヤー] ダイアログ ボックスから選択することができます。また、[新しいクエリ レイヤー] ダイアログ ボックスからデータベース接続を作成することもできます。
SQL クエリの定義
[クエリ] テキスト ボックスに SQL クエリを指定して、テーブルまたはビューから必要なデータにアクセスします。
SQL クエリを [クエリ] テキスト ボックスに貼り付けるか、準備された SQL クエリがなく、テーブルのリストを表示する必要がある場合は、[テーブルの一覧] チェックボックスをオンにします。 リストに表示されているテーブルと列をダブルクリックし、SQL クエリをダブルクリックするか、[テーブルの一覧] ウィンドウから [クエリ] テキスト ボックスまでドラッグして、SQL クエリを構築することができます。
データベースの各列にはそれぞれデータ タイプが設定されています。 ArcGIS では、ほとんどの一般的なデータベース タイプを使用できます。 ただし、一部のデータベース タイプはサポートされていません。 属性列のタイプに不明と表示されている場合は、ArcGIS がサポートしていないデータ タイプであることを示します。 クエリを指定するときには、データ タイプが不明の列をすべて除外するか、ArcGIS でサポートされているデータ タイプにクエリで変更する必要があります。 データベースごとにサポートされているデータ タイプのリストについては、「ArcGIS でサポートされている DBMS のデータ タイプ」をご参照ください。
クエリ レイヤーを構築する際には、そのデータベースに固有の SQL 構文を使用します。 一般的な例は、SELECT * FROM Test.myuser.US_States のようになります。 この場合は、US_States テーブル内のすべての行を含むクエリ レイヤーが作成されます。 マップに米国全体が表示されます。
SQL クエリの変数の使用法については、「クエリ レイヤーのパラメーターの定義」をご参照ください。
SQL ステートメントの整合チェック
SQL クエリを定義したら、その整合チェックを実行します。 整合チェック中に、ArcGIS では、テーブル内に最初に返された行のプロパティを使用して、クエリの整合性を確認します。
また、ArcGIS では、ArcGIS 要件を満たすために、クエリから最初に返された行のプロパティを使用して、マップに表示される他の行をフィルタリングします。 たとえば、ArcGIS では、空間テーブル内の 1 つの空間参照しかサポートしていません。 フィーチャクラス内のフィーチャごとに異なる空間参照 ID (SRID) が使用されている場合、クエリ レイヤーはデフォルトで、クエリから最初に返されたフィーチャと同じ SRID を持つ行だけを返します。 同様に、ArcGIS では、テーブルごとに 1 つのジオメトリ タイプしかサポートしていません。 デフォルトでは、クエリから最初に返された行と同じジオメトリ タイプを持つフィーチャだけがマップに表示されます。 別の SRID またはジオメトリ タイプを使用するには、クエリ レイヤーの空間プロパティを定義します。
一意識別子の指定
一意識別子は、テーブル内の各行を識別するために ArcGIS で使用される 1 つまたは複数の列です。
整合チェック中に、ArcGIS では、テーブルの 1 つの一意識別子列を識別しようとします。 適切な列が見つかった場合は、その列をクエリ レイヤーに使用できます。 一意識別子が見つからない場合や別の一意識別子を使用したい場合は、ダイアログ ボックスの次のパネルで新しい一意識別子を定義できます。
クエリ レイヤーを含むフィーチャ レイヤーを公開する場合、クエリ レイヤーの一意識別子フィールドは、データベースで管理された NULL 以外の一意の単一列にする必要があります。
空間プロパティの定義 (オプション)
空間列を含むフィーチャクラスまたはビューの場合、以下を定義するか、整合チェック時に ArcGIS が検出したデフォルト値を使用します。
- ジオメトリ タイプ - レイヤーがポイント、マルチポイント、ライン、またはポリゴン フィーチャのどれを格納するかを決定します。
- Z 値と M 値 - これらのオプションは、Z 座標または M 座標を持つフィーチャをレイヤーに含めるかどうかを決定します。
- 空間参照 - レイヤーの座標系とその他の関連空間プロパティを表します。
データベース内のフィーチャに設定された現在の SRID 値に基づいて、空間参照を正確に確定できない場合があります。 この場合は、クエリ レイヤーの空間参照が不明になるため、空間参照を定義する必要があります。 このことはクラウド データ ウェアハウスには当てはまらないので、クラウド データ ウェアハウスでは空間参照を定義できません。
注意:
クエリ レイヤーの空間参照を定義しても、データは再投影されず、ArcGIS でクエリの結果をマッピングする際に使用する空間参照が定義されるだけです。 - SRID - レイヤーの空間参照 ID を表し、クエリで空間参照 ID が同じジオメトリだけを返すために使用されます。 クエリ レイヤーが空間フィールドを持たない場合は、SRID 値はブランクです。 値が設定されている場合、指定したジオメトリ SRID 値を持たないフィーチャはすべて結果セットから除外されます。 データベース内のデータにカスタム SRID が使用されている場合は、その SRID をクエリ レイヤーの空間プロパティで指定する必要があります。 このことはクラウド データ ウェアハウスには当てはまりません。
データベース テーブルのクエリ レイヤーを作成
クエリ対象のテーブルに何十万ものレコードが含まれていない場合は、そのテーブルをマップ上にドラッグして、クエリ レイヤーを自動的に作成することができます。 大規模なデータセットの場合は、[新しいクエリ レイヤー] ダイアログ ボックスを使用してクエリ レイヤーを定義します。
テーブルをマップ上にドラッグ
[カタログ] ウィンドウ内のデータベース接続から、データベース フィーチャクラス、テーブル、またはビューをマップ上にドラッグすると、ArcGIS AllSource は、そのフィーチャクラス、テーブル、またはビューからすべての行とフィールドを選択するクエリ レイヤーを自動的に作成します。 これは、データベースにのみ適用されますが、エンタープライズ ジオデータベースには適用されません。
レイヤーをマップにドラッグすると、ArcGIS AllSource でそのレイヤーの範囲が計算されます。 多数のフィーチャを含むテーブルを追加する場合は、範囲の計算に時間がかかる場合があります。 データの範囲を知っている場合や、範囲の計算を待たずに独自の空間参照の範囲を使用したい場合は、そちらを選択できます。 [範囲の計算] ダイアログ ボックスで該当するボタンをクリックします。 [範囲の入力] をクリックした場合は、テーブル内のすべてのフィーチャを含む有効な範囲を入力する必要があります。
レイヤーをマップに追加したら、必要に応じてクエリ レイヤーを変更できます。
クエリの定義
[新しいクエリ レイヤー] ダイアログ ボックスを使用して ArcGIS AllSource プロジェクトのマップ内にクエリ レイヤーを定義するには、次の手順を実行します。
- クエリ レイヤーを追加するマップを ArcGIS AllSource で開きます。
- [マップ] リボン上の [データの追加] ボタン をクリックして、ドロップダウン リストから [クエリ レイヤー] ボタン を選択します。
[新しいクエリ レイヤー] ダイアログ ボックスが表示されます。
- 次のいずれかの方法で接続を指定します。
- 接続ファイル (*.sde) がプロジェクト内にすでに存在する場合は、ドロップダウン リストからそのファイルを選択します。
- プロジェクトに接続が存在していない場合は、新しいデータベース接続ボタン を選択して新しい接続を作成します。
- [名前] テキスト ボックスに、作成するクエリの名前を指定します。
この名前は、マップの [コンテンツ] ウィンドウに表示されます。
- [クエリ] テキスト ボックスに SQL クエリを入力するか貼り付けます。
テーブルとその列を一覧表示するには、[テーブルの一覧] チェックボックスをオンにします。 [テーブルの一覧] セクション内のテーブルをダブルクリックして、そのテーブル内のすべての列を [クエリ] テキスト ボックスに追加し、[クエリ] テキスト ボックスでクエリを編集することができます。 たとえば、クエリ レイヤーに含まれるデータを制限するために、含めたくない列をクエリから削除したり、クエリに項目を追加したりすることができます。
- レイヤーの空間プロパティを定義する方法を指定します。
- [ArcGIS Pro でレイヤーの空間プロパティを検索] (デフォルト オプション) を選択して、クエリから最初に返された行の空間プロパティを ArcGIS AllSource で使用できるようにします。 SQL ステートメントの整合チェックを実行する際に、ArcGIS AllSource でこれらのプロパティが検索されます。
- 最初の行の空間プロパティとは異なる空間プロパティを持つフィーチャをレイヤーに含める場合は、[レイヤーの空間プロパティの定義] を選択します。
- クエリの構文が正しいかどうかと ArcGIS でそのクエリを使用できるかどうかを確認するための整合チェックを実行する必要があります。 [整合チェック] をクリックして、整合チェック プロセスを開始します。
整合チェックでは、データベースに対してクエリを実行し、クエリから返された結果セットが ArcGIS のデータ モデリング標準に従っているかどうかを確認します。 クエリ レイヤーは、整合性が確認されるまでマップに追加されません。
整合チェック ルールとして、次を満たしていることが確認されます。
- 結果セットの持つ空間フィールドは 1 つだけである。
- 結果セットが持つ空間参照は 1 つだけである。
- 結果セットが持つシェープ タイプは 1 つだけである。
- 結果セットに、ArcGIS のサポートしないフィールド タイプは含まれていない。
何らかの理由で整合チェックに失敗した場合は、エラー メッセージが返されるため、クエリを修正する必要があります。
整合チェックは、対象のデータが ArcGIS と同じ標準を使用しない空間データベース内のデータである場合に特に重要になります。
- クエリが整合チェックに合格したら、[次へ] をクリックします。
- クエリ レイヤーの一意識別子フィールドを選択するか、ArcGIS AllSource で選択されたフィールドを使用します。
マップのすべてのフィーチャには一意識別子が必要です。 したがって、クエリ レイヤーには、各フィーチャの値を含む一意識別子が含まれている必要があります。 詳細については、「クエリ レイヤーの一意識別子フィールドの選択」をご参照ください。
- ジオメトリ タイプと空間参照を選択します。
ArcGIS AllSource が空間プロパティを決定できることを選択した場合は、これらのパラメーターがすでに設定されている可能性があります。
- ドロップダウン メニューからジオメトリ タイプを選択します。
- [座標系] ボタン をクリックして、データで使用される空間参照の座標系を選択するか、既存のデータセットから空間参照をインポートします。 ただし、これによってデータが再投影されることはありません。
- ArcGIS AllSource で空間プロパティが定義されることをステップ 6 で選択した場合は、[完了] をクリックして、クエリ レイヤーをマップに追加します。
- レイヤーの空間プロパティを定義することをステップ 6 で選択した場合は、上記のダイアログ ボックスに追加セクションが表示されます。 [レイヤー範囲プロパティ] セクションでは、次のいずれかを選択して、クエリ レイヤーの空間範囲を指定する必要があります。
- [範囲の入力] - [次へ] をクリックした際に、範囲を入力する必要があります。 必ず有効な範囲を指定し、テーブル内のすべてのフィーチャを範囲に含める必要があります。
- [マップ範囲を使用] - 現在のマップの範囲がクエリ レイヤーの範囲として使用されます。 [次へ] をクリックして、マップ範囲の値を確認します。
- [空間参照範囲の使用] - データの空間参照の範囲がクエリ レイヤーの範囲として使用されます。 一部の空間参照では、この範囲は地球全体になります。 [次へ] をクリックして、空間参照範囲の値を確認します。
- レイヤーの範囲の設定または確認が終了したら、[完了] をクリックして、クエリ レイヤーをマップに追加します。
クエリ レイヤーのプロパティを変更する方法については、「クエリ レイヤーの変更」をご参照ください。