Durante a Conferência de Usuários Esri 2026, ouvimos várias pessoas dizerem que gostariam de integração de dados externos zero-copy. Isso significa dados ao vivo entregues sob demanda no ArcGIS sem serem gravados em uma cópia ETL, e idealmente também sem nenhum servidor intermediário. Isso é um passo além da virtualização de dados, onde um cache pode ser mantido (por um motivo muito bom, nomeadamente desempenho de exibição). Apenas me dê os dados no meu mapa eles disseram.
OK, aqui está.
O que você está vendo é o Overture Maps Foundation Places dados temáticos lidos do AWS S3 e entregues em uma camada de memória do ArcGIS Pro, dentro da extensão atual do mapa, em segundos.
Sem cópia intermediária, sem servidor de banco de dados na cadeia de entrega.
Para recuar um pouco, estou sendo um pouco ambicioso com o título do blog, esta não é uma edição suportada de Query Layer, mas pode ser uma aproximação "boa o suficiente" para muitos casos de uso, e não apenas para uma sessão - você pode atualizar os dados sob demanda.Como isso funciona? No anexo do blog há uma caixa de ferramentas do ArcGIS Pro 3.7 contendo uma ferramenta script
Make Serverless Query Layer com dois parâmetros de entrada, uma cláusula where filtrando os dados baixados, e um booleano que determina se o esquema de saída tem campos de texto com largura padrão ou uma inferida dos dados, que estou chamando de "ajuste".Os dados fonte, detecção da extensão do mapa e definição da visualização estão codificados na ferramenta.
Aqui está como a consulta da definição da visualização se parece:
# Consultar 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};"""
Estamos
consultando GeoParquet no S3 usando DuckDB, então a sintaxe SQL que você vê acima é para DuckDB. Não mostrado, leitura do nome da release Overture a partir de um catálogo STAC mantido pela Overture para que possamos injetar o valor na string f da consulta.Coisas para destacar no código:
Funções SQL do DuckDB são usadas
- Colunas complexas são achatadas em um único valor, para simplicidade
- Tanto o operador espacial
- ST_Intersects quanto uma estrutura bbox propriedades são consultadasIsto é temporário até que
- estatísticas geométricas do grupo de linhas GeoParquet 2.0.0 estejam disponíveisVou deixar você inspecionar o código da ferramenta script no seu tempo livre, mas outro aspecto notável é os dados sendo lidos em uma tabela
Apache Arrow, a caminho de se tornar uma classe de feição em memória. Tabelas Arrow podem ser usadas no lugar das classes nativas de feição do ArcGIS como parâmetros de geoprocessamento, porém encontrei um bug que necessita manipulação dupla dos dados (passando os dados por meio de uma classe separada em memória ao invés de anexá-los diretamente ao meu destino), então você pode esperar desempenho mais rápido quando isso for corrigido.Para executar a ferramenta, primeiro adicione a caixa de ferramentas anexada ao blog ao seu projeto, depois ative um mapa ou cena numa extensão que lhe interesse - lembrando que todos os dados Places na extensão serão lidos usando a cláusula where padrão "1 = 1" - então escolha se deseja ajustar (ou não) os campos de texto e clique em Executar. Experimente as cláusulas where exemplo na ferramenta script:
Aqui estão aproximadamente 5.400 supermercados na grande Londres, GB quando meu mapa estava na escala 1:500K no momento da execução:
Sobre ajustar os campos de texto nos dados: Formatos baseados em arquivo (ex.: GeoParquet, CSV, JSON) geralmente não vêm com definição de esquema (exceto EsriJSON). No ArcGIS, diferentes ferramentas fazem escolhas diferentes sobre larguras dos campos de texto, o que pode levar ao que é conhecido na indústria como "esquema patológico", por exemplo dados não ajustados neste exemplo criariam campos texto com 5000 bytes de largura. Normalmente isso não é problema, mas pode ser dependendo para onde os dados vão depois, como desempenho mais lento em geodatabase ou serviço de feição para big data. Como provavelmente não estamos lidando com big data usando este exemplo, você provavelmente pode escolher não ajustar as saídas, mas em todo caso você tem uma abordagem alternativa.
Se você realmente tiver colunas em escala documental nos seus dados, pode executar a ferramenta sem ajuste e depois executar
Export Features para definir suas próprias larguras das colunas com o controle field map nessa ferramenta.Se você quiser uma verdadeira "camada de consulta serverless", então peça essa funcionalidade ao seu representante Esri! Eu sei que um colega está testando algumas abordagens usando o Pro SDK, mas sua contribuição é inestimável.
If you would like a real "serverless query layer" then ask your Esri representative for the feature! I know a colleague testing out some approaches using the Pro SDK, but your input is invaluable.