Práticas recomendadas para análise espacial
Este documento descreve as práticas recomendadas para otimizar a performance de consultas geoespaciais no BigQuery. É possível usar essas práticas recomendadas para melhorar o desempenho e reduzir o custo e a latência.
Os conjuntos de dados podem conter grandes coleções de polígonos, formas com vários polígonos e cadeias de linhas para representar atributos complexos, por exemplo, estradas, lotes de terra e zonas de inundação. Cada forma pode conter milhares de pontos. Na maior parte dos ambientes operações no BigQuery (por exemplo, interseções e distância cálculos), o algoritmo subjacente geralmente visita a maioria dos pontos em cada forma para produzir um resultado. Para algumas operações, o algoritmo visita todos os pontos. Para formas complexas, a visita a cada ponto pode aumentar o custo e a duração das operações espaciais. Você pode usar as estratégias e os métodos apresentados neste guia para otimizar essas operações espaciais comuns e melhorar o desempenho e reduzir custos.
Neste documento, consideramos que suas tabelas geoespaciais do BigQuery são agrupados em uma coluna geográfica.
Simplificar formas
Prática recomendada: use as funções de simplificação e ajuste à grade para armazenar uma versão simplificada do seu conjunto de dados original como uma visualização materializada.
Muitas formas complexas com um grande número de pontos podem ser simplificadas sem muito
perda de precisão. Usar o BigQuery
ST_SIMPLIFY
e
ST_SNAPTOGRID
separadamente ou juntas para reduzir o número de pontos em formas complexas.
Combine essas funções com o BigQuery
visualizações materializadas para armazenar uma
versão simplificada do conjunto de dados original como uma visualização materializada que é
são atualizadas automaticamente em relação à tabela base.
Simplificar formas é mais útil para melhorar o custo e o desempenho de um conjunto de dados nos seguintes casos de uso:
- Você precisa manter um alto grau de semelhança com a forma verdadeira.
- Você precisa executar operações de alta precisão e alta precisão.
- Você quer acelerar as visualizações sem perda visível nos detalhes de formas.
O exemplo de código a seguir mostra como usar a função ST_SIMPLIFY
em uma base
tabela que tem uma coluna GEOGRAPHY
chamada geom
. O código simplifica formas
e remove pontos sem perturbar as bordas de uma forma em mais
que a tolerância de 1 metro.
CREATE MATERIALIZED VIEW project.dataset.base_mv
CLUSTER BY geom
AS (
SELECT
* EXCEPT (geom),
ST_SIMPLIFY(geom, 1.0) AS geom
FROM base_table
)
O exemplo de código abaixo mostra como usar a função ST_SNAPTOGRID
para fixar
os pontos em uma grade com uma resolução de 0,00001 graus:
CREATE MATERIALIZED VIEW project.dataset.base_mv
CLUSTER BY geom
AS (
SELECT
* EXCEPT (geom),
ST_SNAPTOGRID(geom, -5) AS geom
FROM base_table
)
O argumento grid_size
nesta função serve como o expoente, o que significa
10e-5 = 0,00001. Essa resolução equivale a cerca de 1 metro no pior
cenário, que ocorre no equador.
Depois de criar essas visualizações, consulte a visualização base_mv
usando a mesma consulta.
semântica que você usaria para consultar a tabela base. Use essa técnica
para identificar rapidamente uma coleção de formas que precisam ser analisadas mais profundamente,
para depois realizar uma segunda análise mais profunda na tabela base. Teste suas consultas para saber quais valores de limite funcionam melhor para seus dados.
Para casos de uso de medição, determine o nível de precisão necessário. Ao usar a função ST_SIMPLIFY
, defina o parâmetro threshold_meters
como o nível de precisão necessário. Para medir distâncias na escala
de uma cidade ou mais, defina o limite de 10 metros. Em escalas menores, por
exemplo, ao medir a distância entre um edifício e o corpo mais próximo de
água. Use um limite menor, de 1 metro ou menos. O uso de valores de limite menores resulta na remoção de menos pontos da forma especificada.
Ao exibir camadas de mapa em um serviço da Web, é possível pré-calcular
visualizações para diferentes níveis de zoom com o
projeto bigquery-geotools,
que é um driver para o Geoserver que permite exibir camadas espaciais de
no BigQuery. Esse driver cria várias visualizações materializadas com
diferentes parâmetros de limite ST_SIMPLIFY
para que menos detalhes sejam exibidos em
níveis de zoom mais altos.
Usar pontos e retângulos
Prática recomendada: reduza a forma a um ponto ou retângulo para representar o o local.
É possível melhorar a performance da consulta reduzindo a forma a um único ponto ou retângulo. Os métodos desta seção não representam os detalhes com precisão e proporções da forma, mas otimizar para representar o local da forma.
Você pode usar o ponto central geográfico de uma forma (o centroide) para representar a localização de toda a forma. Use um retângulo que contenha a forma para criar a extensão dela, que pode ser usada para representar a localização da forma e manter informações sobre o tamanho relativo.
O uso de pontos e retângulos é mais útil para melhorar o custo e o desempenho de um conjunto de dados quando você precisa medir a distância entre dois pontos, como entre duas cidades.
Por exemplo, considere carregar um banco de dados de lotes de terra nos Estados Unidos em
uma tabela do BigQuery e determinar o corpo de água mais próximo.
Nesse caso, a pré-computação dos centroides de lotes usando a
ST_CENTROID
em combinação com o método descrito na
seção Simplificar formas deste documento pode reduzir a
o número de comparações realizadas com o
ST_DISTANCE
ou
ST_DWITHIN
. Ao usar a função ST_CENTROID
, o centroide do pacote precisa ser considerado no cálculo. A pré-computação dos centroides de pacotes dessa maneira
também pode reduzir a variabilidade no desempenho, porque diferentes formas de pacotes provavelmente
contêm números diferentes de pontos.
Uma variante desse método é usar o método
ST_BOUNDINGBOX
em vez da função ST_CENTROID
para calcular um envelope retangular
ao redor da forma de entrada. Embora não seja tão eficiente quanto usar um único ponto,
ele pode reduzir a ocorrência de alguns casos extremos. Essa variante ainda oferece
performance boa e consistente, já que a saída da função ST_BOUNDINGBOX
sempre contém apenas quatro pontos que precisam ser considerados. O
resultado da caixa delimitadora será do tipo
STRUCT
, o que
significa que você vai precisar calcular as distâncias manualmente ou usar o
método de índice de vetor descrito mais adiante
neste documento.
Usar cascos
Prática recomendada: use um casco para otimizar a representação do local de uma forma.
Imagine encobrir uma forma e calcular o limite da redução esse limite é chamado de casco. Em um envolvente convexo, todos os ângulos da forma resultante são convexos. Assim como a extensão de uma forma, um casco convexo retém um pouco informações sobre o tamanho e as proporções relativas da forma subjacente. No entanto, o uso de um casco tem o custo de precisar armazenar e considerar mais pontos em análises subsequentes.
Você pode usar a função ST_CONVEXHULL
para otimizar a representação do
localização do polígono. O uso dessa função melhora a precisão, mas isso
custa a diminuição do desempenho. A função ST_CONVEXHULL
é semelhante a
ST_EXTENT
exceto que a forma final contém mais pontos e varia no número
de pontos com base na complexidade da forma de entrada. Embora o benefício de desempenho seja provavelmente insignificante para pequenos conjuntos de dados de formas não complexas, para conjuntos de dados muito grandes com formas grandes e complexas, a função ST_CONVEXHULL
oferece um bom equilíbrio entre custo, desempenho e precisão.
Usar sistemas de grade
Prática recomendada: use sistemas de grade geoespacial para comparar áreas.
Se seus casos de uso envolvem a agregação de dados em áreas localizadas e a comparação de agregações estatísticas dessas áreas entre si, você pode usar um sistema de grade padronizado para comparar áreas diferentes.
Por exemplo, um varejista pode querer analisar as mudanças demográficas ao longo do tempo nas áreas em que as lojas estão localizadas ou em que ele está pensando em construir uma nova loja. Uma seguradora pode querer melhorar a compreensão de riscos de propriedade analisando riscos de perigo natural predominantes em uma área específica.
O uso de sistemas de grade padrão, como S2 e H3, pode acelerar essas agregações estatísticas e análises espaciais. O uso desses sistemas de grade também pode simplificar o desenvolvimento de análises e melhorar a eficiência do desenvolvimento.
Por exemplo, as comparações usando setores censitários nos Estados Unidos tenham inconsistência de tamanho, o que significa que é necessário aplicar fatores corretivos aplicada para realizar comparações semelhantes entre setores censitários. Além disso, setores censitários e outros limites administrativos mudam com o tempo e exigem para corrigir essas mudanças. Usar sistemas de grade para análise espacial pode esses desafios.
Usar a pesquisa vetorial e os índices de vetor
Prática recomendada: use a pesquisa vetorial e os índices vetoriais para consultas geoespaciais de vizinhos mais próximos.
Os recursos de pesquisa vetorial eram introduzidos no BigQuery para permitir casos de uso de machine learning, como pesquisa semântica, detecção de similaridade e geração aumentada de recuperação. A chave para ativar esses casos de uso é um método de indexação chamado pesquisa aproximada de vizinho mais próximo. É possível usar a pesquisa vetorial para acelerar e simplificar as consultas geoespaciais de vizinho mais próximo comparando vetores que representam pontos no espaço.
A pesquisa vetorial pode ser usada para buscar elementos por raio. Primeiro, estabeleça uma
para sua pesquisa. Você pode descobrir o raio ideal no conjunto de resultados de
para procurar um vizinho mais próximo. Depois de definir o raio, use o método
ST_DWITHIN
para identificar elementos próximos.
Por exemplo, considere encontrar os dez prédios mais próximos de uma construção de âncora ao qual você já tem o local. É possível armazenar os centroides de cada edifício como um vetor em uma nova tabela, indexar a tabela e pesquisar usando a pesquisa vetorial.
Para este exemplo, você também pode usar
Dados do Maps de abertura no BigQuery
para criar uma tabela separada de formas de construção correspondentes a uma área de
interesse e um vetor chamado geom_vector
. A área de interesse neste exemplo
é a cidade de Norfolk, VA, Estados Unidos, representada pelo
código FIPS
51710, conforme mostrado no exemplo de código abaixo:
CREATE TABLE geo-solution-demos.vector_search.norfolk_buildings
AS (
SELECT
*,
[
ST_X(ST_CENTROID(building.geometry)),
ST_Y(ST_CENTROID(building.geometry))] AS geom_vector
FROM geo-solution-demos.overture_maps.building AS building
INNER JOIN bigquery-public-data.geo_us_boundaries.counties AS county
ON (st_intersects(county.county_geom, building.geometry))
WHERE county.county_fips_code = '51710'
)
O exemplo de código a seguir mostra como criar um índice de vetor na tabela:
CREATE
vector index building_vector_index
ON
`geo-solution-demos.vector_search.norfolk_buildings`(geom_vector)
OPTIONS (index_type = 'IVF')
Esta consulta identifica as 10 construções mais próximas a uma âncora específica
que é representado como anchor_building_id
:
declare anchor_building_id STRING;
SET anchor_building_id = '08b2af6202ce5fff02007d1778948bc4';
SELECT base.*
FROM
VECTOR_SEARCH(
TABLE `geo-solution-demos.vector_search.norfolk_buildings`,
'geom_vector',
(
SELECT
geom_vector
FROM
`geo-solution-demos.vector_search.norfolk_buildings`
WHERE id = anchor_building_id
),
top_k => 10,
distance_type => 'EUCLIDEAN',
options => '{"fraction_lists_to_search":0.1}')
Quando você visualiza os dados geoespaciais BigQuery Geo Viz, a saída é um cluster de formas de construções mais próximas à construção da âncora, conforme exibido na seguinte imagem:
Ao executar essa consulta no console do Google Cloud, clique em Informações do job e
verifique se o Modo de uso do índice vetorial está definido como FULLY_USED
. Isso indica
que a consulta está aproveitando o índice de vetor building_vector_index
, que você
que criamos antes.
Dividir formas grandes
Prática recomendada: divida formas grandes com a função ST_SUBDIVIDE
.
Use a função ST_SUBDIVIDE
para
dividir formas grandes ou strings de linhas longas em formas menores.
A seguir
- Aprenda a usar sistemas de grade para análise espacial.
- Saiba mais sobre as funções geográficas do BigQuery.
- Saiba como gerenciar índices de vetor.
- Saiba mais sobre as práticas recomendadas para indexação espacial e clustering no BigQuery.
- Para mais informações sobre como analisar e visualizar dados geoespaciais no BigQuery, consulte Começar a usar a análise geoespacial.