[新しいクエリ レイヤー] ダイアログ ボックスからクエリ レイヤーを作成して、クラウド データ ウェアハウス内のデータにアクセスします。 最高のパフォーマンスを得るには、データ ウェアハウスの検索に使用する ArcGIS AllSource クライアントをデータ ウェアハウスと同じクラウド環境とリージョンにインストールします。
ヒント:
このページでは、クラウド データ ウェアハウス内のテーブルのクエリ レイヤーを作成する方法を説明します。 データベース内のデータにアクセスする方法については、「データベース内のデータのクエリ レイヤーを作成」をご参照ください。
前提条件とワークフロー
クエリ レイヤーを作成する前に、「クエリ レイヤー向けのデータベースとクライアントの構成」に目を通しておいてください。
次に、以下の各サブセクションを参照し、[新しいクエリ レイヤー] ダイアログ ボックスを使用してクラウド データ ウェアハウスのクエリ レイヤーを作成する際のワークフローを確認してください。
データ ウェアハウスへの接続
クエリ レイヤーを定義する前に、データ ウェアハウスへの接続を確立しておく必要があります。
[カタログ] ウィンドウにデータベース コネクションを作成 (「ArcGIS AllSource のクラウド データ ウェアハウスへの接続」で説明) し、プロジェクトに追加して、[新しいクエリ レイヤー] ダイアログ ボックスから参照できます。または、[新しいクエリ レイヤー] ダイアログ ボックスからコネクションを作成することもできます。
SQL クエリの定義
[クエリ] テキスト ボックスに SQL (Structured Query Language) クエリを指定して、ウェアハウス内のデータから必要なデータにアクセスします。 多数の行を含むテーブルまたはビューにアクセスする場合、定義したクエリはレイヤーに含まれる行数を制限する必要があります。 たとえば、フィーチャがビンに集約されていない場合、マップ上に何百万ものフィーチャを実際に表示することはできません。 そのようなテーブルまたはビューの場合、データのサブセットを返すクエリを使用します。
クエリ レイヤーを構築する際には、そのデータ ウェアハウスに固有の SQL 構文を使用します。
テーブルの各列にはそれぞれデータ タイプが設定されています。 ArcGIS では、ほとんどの一般的なデータ タイプを使用できます。 ただし、一部のデータ タイプはサポートされていません。 属性列のタイプに不明と表示されている場合は、ArcGIS がサポートしていないデータ タイプであることを示します。 クエリを指定するときには、データ タイプが不明の列をすべて除外するか、ArcGIS でサポートされているデータ タイプにクエリで変更する必要があります。
詳細については、「ArcGIS でサポートされているクラウド データ ウェアハウスのデータ タイプ」をご参照ください。
ヒント:
- SQL クエリの変数の使用法については、「クエリ レイヤーのパラメーターの定義」をご参照ください。
- 準備された SQL クエリがなく、テーブルのリストを表示する必要がある場合は、[テーブルの一覧] チェックボックスをオンにします。 リストに表示されたテーブルと列をダブルクリックして、SQL クエリを構築できます。
- クエリに外部テーブルを含めると、描画およびクエリのパフォーマンスが低下することがあります。
ArcGIS AllSource では、次のデータ タイプがサポートされるようになりました。
- Big Integer
- Date Only
- Time Only
- Timestamp Offset
新しいデータ タイプのサポートは、データベースおよびクラウド データ ウェアハウスのプラットフォームによって異なります。 詳細については、「ArcGIS でサポートされているクラウド データ ウェアハウスのデータ タイプ」をご参照ください。
マテリアライズド ビューの作成
データ ウェアハウス内に大量のデータを含むテーブルにアクセスし、クエリが返すフィーチャ総数を妥当な数に制限する SQL クエリを定義する場合、データにアクセスする際のクエリ パフォーマンスを向上させるために、そのクエリをマテリアライズド ビューとしてデータベースに格納します。
[新しいクエリ レイヤー] ダイアログ ボックスでマテリアライズド ビューを作成すると、ビュー定義はクエリ レイヤーに指定した SQL クエリになります。 クエリ レイヤーは、クエリ レイヤーを操作するたびに SQL クエリを実行するのではなく、マテリアライズド ビューにアクセスします。
Google BigQuery でマテリアライズド ビューを作成した場合、有効期限が切れるようにマテリアライズド ビューを構成できます。 何日もビューを必要としない場合は、これを実行して、格納されたマテリアライズド ビューが変更されないようにしてください。
SQL クエリに変数が含まれている場合または SQL クエリがビュー用に定義されている場合は、マテリアライズド ビューを作成できません。 クエリに外部テーブルを含めると、マテリアライズド ビューを作成できません。
ヒント:
クエリ レイヤーに関連付けられているマテリアライズド ビューの名前を確認するには、マップ内のクエリ レイヤーの [レイヤー プロパティ] ダイアログ ボックスを開きます。 クラウド データ ウェアハウス内のこのビューを削除または変更しないでください。
特定のデータ ソースでのマテリアライズド ビューのサポート状況については、クラウド データ ウェアハウス ベンダーが提供するドキュメントをご参照ください。
SQL ステートメントの検証
SQL クエリを定義し、マテリアライズド ビューを作成したら、SQL ステートメントを検証します。 検証中に、ArcGIS では、テーブル内に最初に返された行のプロパティを使用して、クエリの整合性を確認します。
また、ArcGIS では、ArcGIS 要件を満たすために、クエリから最初に返された行のプロパティを使用して、マップに表示される他の行をフィルタリングします。 たとえば、ArcGIS では、空間テーブル内の 1 つの空間参照しかサポートしていません。 フィーチャクラス内のフィーチャごとに異なる空間参照 ID (SRID) が使用されている場合、クエリ レイヤーはデフォルトで、クエリから最初に返されたフィーチャと同じ SRID を持つ行だけを返します。 同様に、ArcGIS では、テーブルごとに 1 つのジオメトリ タイプしかサポートしていません。 デフォルトでは、クエリから最初に返された行と同じジオメトリ タイプを持つフィーチャだけがマップに表示されます。 別の SRID またはジオメトリ タイプを使用するには、クエリ レイヤーの空間プロパティを定義します。
一意識別子の指定
一意識別子は、テーブル内の各行を識別するために ArcGIS で使用される複数の列のうちの 1 つです。
検証中に、ArcGIS では、テーブルの 1 つの一意識別子列を識別しようとします。 適切な列が見つかった場合は、その列をクエリ レイヤーに使用できます。 一意識別子が見つからない場合や別の一意識別子を使用したい場合は、[新しいクエリ レイヤー] ダイアログ ボックスを使用して新しい一意識別子を定義できます。
空間プロパティの定義 (オプション)
空間列を含むフィーチャクラスまたはビューの場合、以下を定義するか、検証時に ArcGIS が検出したデフォルト値を使用します。
- ジオメトリ タイプ - レイヤーがポイント、マルチポイント、ライン、またはポリゴン フィーチャのどれを格納するかを決定します。
- 空間参照 - レイヤーの座標系とその他の関連空間プロパティを表します。
注意:
クエリ レイヤーの空間参照を定義しても、データは再投影されず、ArcGIS でクエリの結果をマッピングする際に使用する空間参照が定義されるだけです。
Google BigQuery の検索時には、空間参照を定義できません。
- SRID - レイヤーの空間参照 ID を表し、クエリで空間参照 ID が同じジオメトリだけを返すために使用されます。 クエリ レイヤーが空間フィールドを持たない場合は、SRID 値はブランクです。 値が設定されている場合、指定したジオメトリ SRID 値を持たないフィーチャはすべて結果セットから除外されます。
クラウド データ ウェアハウス内のデータにアクセスするクエリ レイヤーを作成
[新しいクエリ レイヤー] ダイアログ ボックスを使用して ArcGIS AllSource プロジェクトのマップ内にクエリ レイヤーを定義するには、次の手順を実行します。
- ArcGIS AllSource で、クエリ レイヤーを追加するマップを開きます。
- [マップ] リボン上の [レイヤー] グループで [データの追加] ボタン をクリックして、ドロップダウン メニューから [クエリ レイヤー] を選択します。
[新しいクエリ レイヤー] ダイアログ ボックスが表示されます。
- 次のいずれかを実行して、コネクションを指定します。
- 接続ファイル (*.sde) がプロジェクト内にすでに存在する場合は、ドロップダウン リストからそのファイルを選択します。
- プロジェクトに接続が存在していない場合は、新しいデータベース コネクションボタン を選択して新しい接続を作成します。
- [名前] テキスト ボックスに、作成するクエリの名前を指定します。
この名前は、マップの [コンテンツ] ウィンドウに表示されます。
- [クエリ] テキスト ボックスに SQL クエリを入力するか貼り付けます。
テーブルとその列を一覧表示するには、[テーブルの一覧] チェックボックスをオンにします。 [テーブルの一覧] セクション内のテーブルをダブルクリックして、そのテーブル内のすべての列を [クエリ] テキスト ボックスに追加し、[クエリ] テキスト ボックスでクエリを編集することができます。 たとえば、クエリ レイヤーに含まれるデータを制限するために、含めたくない列をクエリから削除したり、クエリに項目を追加したりすることができます。
- レイヤーの空間プロパティを定義する方法を指定します。
- [ArcGIS Pro でレイヤーの空間プロパティを検索] - ArcGIS AllSource はクエリから最初に返された行の空間プロパティを使用します。 SQL ステートメントの検証を実行する際に、ArcGIS AllSource はこれらのプロパティを確認します。 これがデフォルトです。
- [レイヤーの空間プロパティの定義] - このオプションを選択した場合は、レイヤーに使用する空間プロパティを指定する必要があります。
- [出力クエリ レイヤーのマテリアライズド ビューを作成します] チェックボックスをオンにすると、SQL クエリをマテリアライズド ビューとしてクラウド データ ウェアハウスに格納できます。
- BigQuery にマテリアライズド ビューを作成する際、上矢印または下矢印を使用して、マテリアライズド ビューをデータ ウェアハウスに残しておく日数を指定できます。
指定した日数の後、マテリアライズド ビューは削除されます。 この有効期限日の後でクエリ レイヤーを含むマップを開くと、ArcGIS は前と同じクエリ定義と有効期限でマテリアライズド ビューを再作成します。
- [検証] をクリックすると、クエリの構文が正しいかどうかと ArcGIS でそのクエリを使用できるかどうかを確認できます。
これにより、データベースに対してクエリが実行され、クエリから返される結果セットが ArcGIS のデータ モデリング標準に従っているかどうかが確認されます。 クエリ レイヤーは、検証が確認されるまでマップに追加されません。
次の検証ルールが適用されます。
- 結果セットの持つ空間フィールドは 1 つだけである。
- 結果セットが持つ空間参照は 1 つだけである。
- 結果セットが持つシェープ タイプは 1 つだけである。
- 結果セットに、ArcGIS がサポートしないフィールド タイプは含まれていない。
何らかの理由で検証に失敗した場合は、エラー メッセージが返されるため、クエリを修正する必要があります。
- 検証が完了したら [次へ] をクリックします。
- クエリ レイヤーの一意識別子フィールドを選択します。
マップのすべてのフィーチャには一意識別子が必要です。 したがって、クエリ レイヤーには、各フィーチャの値を含む一意識別子が含まれている必要があります。 クエリ レイヤーの一意識別子フィールドの選択の詳細については、「一意識別子フィールド」をご参照ください。
- クエリ レイヤーの空間プロパティを定義します。
ステップ 6 で [ArcGIS でレイヤーの空間プロパティを検索] を選択した場合、これらのパラメーターはすでに設定されています。
- Redshift でクエリ レイヤーを定義する場合、M 座標または Z 座標を含むフィーチャを含めるかどうかを定義します。
- ドロップダウン メニューからジオメトリ タイプを選択します。
- [座標系] をクリックして、データで使用される空間参照の座標系を選択するか、既存のデータセットから空間参照をインポートします。
ただし、これによってデータが再投影されることはありません。
BigQuery または Snowflake のデータでクエリ レイヤーを定義している場合は、座標系を選択できません。
- ステップ 6 で [ArcGIS Pro でレイヤーの空間プロパティを検索] を選択した場合は、[完了] をクリックして、クエリ レイヤーをマップに追加します。
- ステップ 6 で [レイヤーの空間プロパティの定義] を選択した場合は、ダイアログ ボックスに表示された追加セクションを完成させます。
[レイヤー範囲プロパティ] セクションでは、次のいずれかを選択して、クエリ レイヤーの空間範囲を指定する必要があります。
- [入力範囲] - 指定した範囲がクエリ レイヤーの範囲として使用されます。 [次へ] をクリックして、範囲を入力します。 必ず有効な範囲を指定し、テーブル内のすべてのフィーチャを範囲に含める必要があります。
- [マップ範囲を使用] - 現在のマップの範囲がクエリ レイヤーの範囲として使用されます。 [次へ] をクリックして、マップ範囲の値を確認します。
- [空間参照範囲の使用] - データの空間参照の範囲がクエリ レイヤーの範囲として使用されます。 一部の空間参照では、この範囲は地球全体になります。 [次へ] をクリックして、空間参照範囲の値を確認します。
- レイヤーの範囲の設定または確認が終了したら、[完了] をクリックして、クエリ レイヤーをマップに追加します。
マテリアライズド ビューの作成を選択した場合は、ソース テーブルではなくマテリアライズド ビューにクエリ レイヤーで定義されます。
クエリ レイヤーのプロパティを変更する方法については、「クエリ レイヤーの変更」をご参照ください。