外部データソースをArcGIS OnlineまたはArcGIS Enterpriseのホストされたフィーチャレイヤーに同期している場合、各定期的な変更セットの書き込みはできるだけ効率的に行いたいものです。データセットが数十万または数百万のフィーチャに達すると、最適な挿入、更新、削除トランザクションを計算することが非常に魅力的になり、ダウンタイムとトランザクション失敗のリスクを最小限に抑えられます。
問題は、編集トランザクションを導出するにはターゲットのホストレイヤーを読み取る必要があり、これはコストのかかる操作です。このブログでは、ターゲットフィーチャレイヤーへのクエリを回避し、代わりにファイルジオデータベースのexportを使用し、自動的にローカルにダウンロードしてから高速に読み取り変更セットを見つける方法を示しています。追加のアイテムストレージへの影響はありません。
以下がそのアプローチの実例です:
BulkUpsert2フィーチャレイヤークエリの回避以前の投稿では、ターゲットフィーチャレイヤーを読み取ってアップサートおよび削除トランザクションを導出する例(シリアライズされたアプローチ)を示しました。私のターゲットレイヤーは100万以上のフィーチャがあり、読み取りには数分かかります。上記の方法は同じサービスに対してより良い結果を出します。
投稿ダウンロードにはPro 3.5 ArcGIS Data Interoperability ETLツールが含まれており、BulkUpsert2をご覧ください。このツールはURL上のCSVファイルを読み込み(サーバーのデフォルトであるシリアライズも回避)、さらにポータルコンテンツにアクセスしてファイルジオデータベースexportをトリガーし、ループでexport完了まで待機し、その後ターゲットフィーチャレイヤーのcontent(サービスではなく)をダウンロード・読み取りし、最後にexportアイテム(ダウンロードしたファイルジオデータベースも自動削除)を削除します。これがコア機能です。ツール内にはミントグリーン色のカスタムトランスフォーマーが2つあります。EsriOnlineTokenGetterは後続のHTTP呼び出しに必要なトークンを取得します(Enterpriseポータルの場合はEsriPortalTokenGetterを使用します)。
Spoilerプロヒント! ブログダウンロードには現在、OAuth2ベースのウェブ接続を使用してトークン取得を回避するツールBulkUpsert2WebConnectionが含まれています。ウェブ接続はEsri ArcGIS Connectorパッケージによってサポートされており、このパッケージはワークスペースで使用されるEsri ArcGIS Feature Service形式を提供します。そのウェブ接続はHTTPCallerトランスフォーマーで使用され、トークン不要となります。組織で多要素認証が強制されている場合、トークン取得はブロックされカスタムトランスフォーマーは動作しません。現在では、このパッケージをインストールし、新しいウェブ接続を作成してフィーチャサービスの読み書きやArcGIS REST API HTTP呼び出しに使用することが推奨されています。
もう一つのカスタムトランスフォーマーはタブ名がFeatureServiceExportLooperで確認できるループ型トランスフォーマーです。これはエクスポートジョブのstatusを2秒ごとにチェックしジョブ完了まで待ちます。エクスポートジョブ所要時間はサービスサイズやホストポータルの混雑状況によって異なります。ArcGIS Onlineではジョブがキューイングされたり即時実行されたりすることがあります。以下はArcGIS Onlineで混雑時に約1分超(エクスポートのみ)の実行例です:
FeatureServiceExportLooperFeatureServiceExportLooperしかし最終的な結果として大幅な純利益があります。以下は前述ブログとシリアライズされたアプローチからのスクリーンキャプチャで、セッション時間をご覧ください。
ターゲットフィーチャレイヤーの読み取りに時間がかかるターゲットフィーチャレイヤーの読み取りに時間がかかるこれがシリアライズされたアプローチでホストされたフィーチャレイヤーの読み取りを回避する方法です。これで時間のかかる変更セット構築に対する選択肢ができました!