リレーショナル データベース レイヤーをマップ上にドラッグして、クエリ レイヤーを自動的に作成するか、[マップ] タブの [データの追加] ボタン を使用して、クエリ レイヤーを ArcGIS AllSource のマップ内に作成することができます。
ヒント:
このページでは、リレーショナル データベース内のテーブルのクエリ レイヤーを作成する方法を説明します。 クラウド データ ウェアハウス内のデータにアクセスする場合は、「クラウド データ ウェアハウス内のデータのクエリ レイヤーを作成」をご参照ください。
ジオデータベース システム テーブルにアクセスするクエリ レイヤーはサポートされていません。
前提条件とワークフロー
クエリ レイヤーを作成する前に、「クエリ レイヤー向けのデータベースとクライアントの構成」に目を通しておいてください。
次に、以下の各サブセクションを参照し、[新しいクエリ レイヤー] ダイアログ ボックスを使用してリレーショナル データベースのクエリ レイヤーを作成する際に実行するワークフローを確認してください。
リレーショナル データベースへの接続
クエリ レイヤーを定義する前に、クエリするデータベースに接続しておく必要があります。
「ArcGIS AllSource のリレーショナル データベースへの接続」で説明されているように、[カタログ] ウィンドウでデータベース接続を作成してプロジェクトに追加し、[新しいクエリ レイヤー] ダイアログ ボックスでそれをご参照ください。 または、[新しいクエリ レイヤー] ダイアログ ボックスからデータベース接続を作成できます。
SQL クエリの定義
[クエリ] テキスト ボックスに SQL クエリを指定して、テーブルまたはビューから必要なデータにアクセスします。
SQL クエリを [クエリ] テキスト ボックスに貼り付けるか、準備された SQL クエリがなく、テーブルのリストを表示する必要がある場合は、[テーブルの一覧] チェックボックスをオンにします。 リストに表示されているテーブルと列をダブルクリックするか、テーブルの一覧ウィンドウから [クエリ] テキスト ボックスまでドラッグして、SQL クエリを構築することができます。
データベースの各列にはそれぞれデータ タイプが設定されています。 ArcGIS では、ほとんどの一般的なデータベース タイプを使用できます。 ただし、一部のデータベース タイプはサポートされていません。 属性列のタイプに不明と表示されている場合は、ArcGIS がサポートしていないデータ タイプであることを示します。 クエリを指定するときには、データ タイプが不明の列をすべて除外するか、ArcGIS でサポートされているデータ タイプに変換する必要があります。 データベースごとにサポートされているデータ タイプのリストについては、「ArcGIS でサポートされているデータベースのデータ タイプ」をご参照ください。
ヒント:
ArcGIS AllSource では、次のデータ タイプがサポートされるようになりました。
- Big Integer
- Date Only
- Time Only
- Timestamp Offset
新しいデータ タイプのサポートは、データベースおよびクラウド データ ウェアハウスのプラットフォームによって異なります。 詳細については、「ArcGIS でサポートされているデータベースのデータ タイプ」をご参照ください。
クエリ レイヤーを構築する際には、そのデータベースに固有の 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 をクエリ レイヤーの空間プロパティで指定する必要があります。 このことはクラウド データ ウェアハウスには当てはまりません。
リレーショナル データベース テーブルのクエリ レイヤーを作成
クエリ対象のテーブルに何十万ものレコードが含まれていない場合は、次の最初のセクションで説明されているように、「そのテーブルをマップ上にドラッグ」して、クエリ レイヤーを自動的に作成することができます。 大規模なデータセットの場合は、[新しいクエリ レイヤー] ダイアログ ボックスを使用してクエリ レイヤーを定義します。
テーブルをマップ上にドラッグ
[カタログ] ウィンドウ内のデータベース接続 (.sde) から、データベース フィーチャクラス、テーブル、またはビューをマップ上にドラッグすると、ArcGIS AllSource は、そのフィーチャクラス、テーブル、またはビューからすべての行とフィールドを選択するクエリ レイヤーを自動的に作成します。 これは、データベースにのみ適用されますが、エンタープライズ ジオデータベースには適用されません。
レイヤーをマップにドラッグすると、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 が空間プロパティを定義できることを選択した場合は、これらのパラメーターがすでに設定されている可能性があります。
- ドロップダウン メニューからジオメトリ タイプを選択します。
- [座標系] ボタン をクリックして、データで使用される空間参照の座標系を選択するか、既存のデータセットから空間参照をインポートします。 これによってデータが再投影されることはありません。
- ステップ 6 で ArcGIS AllSource が空間プロパティを定義した場合は、[完了] をクリックして、クエリ レイヤーをマップに追加します。
ArcGIS AllSource で空間プロパティが定義されることを選択した場合は、次の 2 つのステップは該当しません。
- ステップ 6 でレイヤーの空間プロパティを定義した場合は、上記のダイアログ ボックスに追加セクションが表示されます。 [レイヤー範囲プロパティ] セクションでは、次のいずれかを選択して、クエリ レイヤーの空間範囲を指定する必要があります。
- [範囲の入力] - [次へ] をクリックした際に、範囲を入力する必要があります。 必ず有効な範囲を指定し、テーブル内のすべてのフィーチャを範囲に含める必要があります。
- [マップ範囲を使用] - 現在のマップの範囲がクエリ レイヤーの範囲として使用されます。 [次へ] をクリックして、マップ範囲の値を確認します。
- [空間参照範囲の使用] - データの空間参照の範囲がクエリ レイヤーの範囲として使用されます。 一部の空間参照では、この範囲は地球全体になります。 [次へ] をクリックして、空間参照範囲の値を確認します。
- レイヤーの範囲の設定または確認が終了したら、[完了] をクリックして、クエリ レイヤーをマップに追加します。
クエリ レイヤーのプロパティを変更する方法については、「クエリ レイヤーの変更」をご参照ください。