SQLの言語はArcGISツールを介してどの程度アクセスできますか?


10

その質問はとても冗長に聞こえます...
とにかく、私はArcGISでのSQLの使用を調査するように求められました。すべてのサーバー側ストレージとDB管理/大規模編集にはSDE DBを使用します。ただし、統合されたSQLがArcGISのツールにどのように組み込まれているかを詳しく調べようとしています。ArcGIS 10のヘルプのSQLクエリリファレンスガイドに、フィールド計算ツールを使用するとSQL構文が機能しないと明記されています。フィールド値を計算するときに、データベース自体から情報を直接プルしたり、マングルしたりできると非常に便利に思えるので、これは非常に残念です。

ArcGISでSQLを利用しようとするときに遭遇する可能性がある最大の制限と落とし穴は何ですか?SQLと統合すると、どのツールが最高の機能を発揮しますか?

これをより明確な質問にするために例が必要な場合、私は特定の地域で特定のタイプの関心のあるポイントの数を追跡しようとしています。各ポイントには、そのタイプとリージョンを説明する属性があります。私の現在の解決策は、カウントとデータの取得にカーソルを多用することですが、上層部は、単純なSQLクエリでこれらすべてを実行できることを指摘しました。残念ながら、この機能は存在しないようです。

またはそれは?


クエリされたテーブルのバージョンはありますか?
Michael Todd

バージョン化?私はその用語をよく知らないと思います。
Nathanus

1
レイヤーのバージョン管理により、以前の機能を維持しながらレイヤーを変更できます。つまり、フィーチャが削除された場合、レイヤーの現在のバージョンは、そのフィーチャが存在しないことを示しています。ただし、フィーチャは実際には「ベース」レイヤにまだ存在しており、GISツールを使用して、フィーチャを示すさまざまなバージョンのレイヤを表示できます。レイヤーがバージョン管理されているかどうかは、ArcCatalogでレイヤーを右クリックして[プロパティ]を選択するとわかります。[全般]タブの下部には[バージョン管理]と呼ばれるセクションがあり、ここにある情報により、レイヤーがバージョン管理されているかどうかがわかります。
Michael Todd

回答:


9

Pythonを使用する場合は、ArcSDESQLExecuteコマンドをご覧ください。これにより、任意のSQLを実行できますが、SDEを介して接続する必要があります。クエリの結果が行のセットである場合、属性はリストのPythonリストとして返されます。それ以外の場合、SQLが正常に実行された場合はTrueを返し、そうでない場合はNoneを返します。参照:ArcSDE接続を使用したSQLの実行


間違いなくやります!この文脈では、これはまさに私が探していたもののようです。どうもありがとう。
Nathanus、2011年

5

カスタムArcObjectsを記述している場合、ExecuteSQLメソッドを使用して、SDEワークスペースに対して任意のSQLを実行できます。このメソッドは、INSERT、UPDATE、または一部のストアドプロシージャなど、結果セットを返さないクエリに限定されます。

ArcMap UIを使用している場合、オプションはもう少し制限されます。Calculate FieldでSQLを使用できない理由は、式が実際にはVBScriptやPythonであるためです。VBScriptまたはPythonを使用して任意のSQL式を実行し、結果のカーソルから値をプルすることはできますが、お勧めしません。

または、Reganの回答を使用してクエリレイヤーを作成することもできます。読み取り専用データの場合、これが最善の方法です。データを更新する必要がある場合は、少し複雑になります。「新しい」値でクエリレイヤーを作成し、既存のテーブルに対して結合を実行してから、計算フィールドを使用する必要があります。これをExecuteSQLと組み合わせて複雑な更新を実行し、結果を表示することができます(不格好)。

最後の選択肢は、ArcSDEテーブルに対してSQLを直接実行することです。


1
最後のポイント(テーブルに対して直接SQLを実行する)は、バージョン管理の質問をした理由です。データベースレベルでのSQLクエリは、ベースレイヤーからのみプルするため(マルチバージョン対応ビューを設定しない限り)、レイヤーがバージョン管理されている場合は機能しません。
Michael Todd

私が行っている作業は主にPythonで行われていますが、UIの実際の機能はArcObjectsに依存しているようです。
Nathanus

Python機能を含め、すべてが内部的にArcObjects上に構築されています。
James Schek、2011年

PythonのArcSDESQLExecuteが結果を返すことができる場合、IWorkspace.ExecuteSQLを使用して同じことをどのように実現できますか?
Petr Krebs

@petrあなたは直接できない...私は私の答えを更新しました。
James Schek


1

使用しているRDBMSに応じて、フィーチャデータの取得に依存しない限り、ArcObjectsまたはarcpyの外部でSQLライブラリを利用できます。私が日常的に使用しているSQL Serverデータベースのクエリの多くは本質的に空間的ではないため、.NET内のSystem.Dataクラス、またはPythonアプリケーション内のpymssql Pythonライブラリを使用します。空間データの使用が必要な場合は、クエリレイヤーが最適です。クエリレイヤーの唯一の注意点は、(標準のSDEBINARYタイプではなく)空間データタイプを使用して保存されたデータでのみ機能することです。


これは激しくなり始めています。自分のニーズをもっと注意深く評価する必要があると思います。ポリゴンやポイント/ライン自体のようなものを意味するのであれば、「空間」データは必要ありませんが、単にテキスト/整数フィールドの値です。
Nathanus

ジオメトリタイプを返す必要がある場合は、標準のArcObjects / arcpyデータアクセスを使用します。「表形式」のデータ(空間タイプは含まれません)にアクセスするだけの場合は、通常のSqlConnectionsを使用してデータベースを呼び出すだけです(SQL Serverの場合、接続タイプは異なる場合があります)。結果は、ICursorから得られるものよりも柔軟性があります。ただし、質問を理解し、フィールド計算機の使用に制限されている場合、生のSQLを使用することはできません。
SagebrushGIS 2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.