2026年のEsriユーザー会議で、何人かの方から次のようなご要望を伺いました。ゼロコピー外部データ統合。つまり、ETLコピーに書き込むことなく、理想的には中間サーバーも介さずに、オンデマンドでArcGISにライブデータを配信することです。これは、データ仮想化の一歩先であり、キャッシュが保持される場合があります(非常に良い理由、すなわち表示パフォーマンスのためです)。「地図にデータをそのまま表示してほしい」と彼らは言いました。
はい、こちらです。
ご覧いただいているのは、Overture Maps FoundationのPlacesテーマデータで、AWS S3から読み込み、現在の地図範囲内で数秒以内にArcGIS Proのメモリレイヤーに配信されています。
中間コピーも配信チェーン内のデータベースサーバーもありません。
少し話を戻すと、このブログタイトルは少し野心的ですが、これはサポートされているQuery Layer版ではありませんが、多くのユースケースにとって「十分良い」近似であり、一度限りではなくオンデマンドでデータを更新できます。どうやって動作するのでしょうか?ブログの添付ファイルにはArcGIS Pro 3.7用のツールボックスがあり、その中にスクリプトツール「
Make Serverless Query Layer」があります。入力パラメーターは2つで、ダウンロードするデータをフィルタリングするwhere句と、出力スキーマのテキストフィールド幅をデフォルト幅にするか、データから推測した幅にするか(これを「チューニング」と呼んでいます)を決定するブール値です。
ソースデータ、地図範囲検出、およびビュー定義はツール内にハードコードされています。
ビュー定義クエリは次のようになっています:
# S3へのクエリ
query = f"""select
id,
names.primary as primary_name,
basic_category,
taxonomy.primary as primary_category,
brand.names.primary as primary_brand,
concat_ws(',',brand.names.common) as other_brands,
concat_ws(' ',addresses[1].freeform,addresses[1].locality,addresses[1].postcode,addresses[1].region,addresses[1].country) as address,
array_to_string(taxonomy.hierarchy,' > ') as taxonomy_hierarchy,
array_to_string(websites,' ') as websites,
array_to_string(emails,' ') as emails,
array_to_string(socials,' ') as socials,
array_to_string(phones,' ') as phones,
operating_status,
confidence,
ST_AsWKB(geometry) as shape,
from read_parquet('s3:\/\/overturemaps-us-west-2\/release\/{release}\/theme=places\/type=place\/*.parquet',filename=false,hive_partitioning=1)
where ST_Intersects(geometry,ST_MakeEnvelope({xmin},{ymin},{xmax},{ymax}))
and bbox.xmin >= {xmin} and bbox.ymin >= {ymin} and bbox.xmax <= {xmax} and bbox.ymax <= {ymax}
and {where};"""
私たちは現在、S3内のGeoParquetをDuckDBでクエリしています。