Práticas recomendadas para a análise espacial
Este documento descreve as práticas recomendadas para otimizar o desempenho das consultas geoespaciais no BigQuery. Pode usar estas 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 multipoligonal e linhas para representar elementos complexos, por exemplo, estradas, parcelas de terreno e zonas de inundação. Cada forma pode conter milhares de pontos. Na maioria das operações espaciais no BigQuery (por exemplo, interseções e cálculos de distância), o algoritmo subjacente visita normalmente a maioria dos pontos em cada forma para produzir um resultado. Para algumas operações, o algoritmo visita todos os pontos. Para formas complexas, visitar cada ponto pode aumentar o custo e a duração das operações espaciais. Pode usar as estratégias e os métodos apresentados neste guia para otimizar estas operações espaciais comuns para um desempenho melhorado e um custo reduzido.
Este documento pressupõe que as suas tabelas geoespaciais do BigQuery estão agrupadas numa coluna de geografia.
Simplifique formas
Prática recomendada: use as funções de simplificação e ajuste à grelha para armazenar uma versão simplificada do conjunto de dados original como uma vista materializada.
Muitas formas complexas com um grande número de pontos podem ser simplificadas sem grande perda de precisão. Use as funções do BigQuery
ST_SIMPLIFY
e
ST_SNAPTOGRID
separadamente ou em conjunto para reduzir o número de pontos em formas complexas.
Combine estas funções com as visualizações materializadas do BigQuery para armazenar uma versão simplificada do seu conjunto de dados original como uma visualização materializada que é atualizada automaticamente em relação à tabela base.
A simplificação de formas é mais útil para melhorar o custo e o desempenho de um conjunto de dados nos seguintes exemplos de utilização:
- Tem de manter um elevado grau de semelhança com a forma verdadeira.
- Tem de realizar operações de alta precisão.
- Quer acelerar as visualizações sem perda visível nos detalhes das formas.
O seguinte exemplo de código mostra como usar a função ST_SIMPLIFY
numa tabela base que tem uma coluna GEOGRAPHY
denominada geom
. O código simplifica as formas e remove pontos sem perturbar qualquer limite de uma forma em mais do que a tolerância dada de 1,0 metros.
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 seguinte exemplo de código mostra como usar a função ST_SNAPTOGRID
para alinhar os pontos numa grelha 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 expoente, o que significa que
10e-5 = 0,00001. Esta resolução é equivalente a cerca de 1 metro no pior caso, que ocorre no equador.
Depois de criar estas vistas, consulte a vista base_mv
usando a mesma semântica de consulta que usaria para consultar a tabela base. Pode usar esta técnica
para identificar rapidamente um conjunto de formas que precisam de ser analisadas mais detalhadamente
e, em seguida, pode fazer uma segunda análise mais detalhada na tabela base. Teste as suas consultas para ver que valores de limite funcionam melhor para os seus dados.
Para exemplos de utilização de medição, determine o nível de precisão que o seu exemplo de utilização requer. Quando usar a função ST_SIMPLIFY
, defina o parâmetro threshold_meters
para o nível de precisão necessário. Para medir distâncias à escala de uma cidade ou superior, defina um limite de 10 metros. Em escalas mais pequenas, por exemplo, quando mede a distância entre um edifício e a massa de água mais próxima, considere usar um limite mais pequeno de 1 metro ou menos. A utilização de valores de limite inferiores resulta na remoção de menos pontos da forma fornecida.
Quando publica camadas de mapas a partir de um serviço Web, pode pré-calcular vistas materializadas para diferentes níveis de zoom com o projeto bigquery-geotools, que é um controlador para o Geoserver que lhe permite publicar camadas espaciais a partir do BigQuery. Este controlador cria várias vistas materializadas com parâmetros de limite ST_SIMPLIFY
diferentes para que sejam apresentados menos detalhes em níveis de zoom mais elevados.
Use pontos e retângulos
Prática recomendada: reduza a forma a um ponto ou a um retângulo para representar a respetiva localização.
Pode melhorar o desempenho das consultas reduzindo a forma a um único ponto ou a um retângulo. Os métodos nesta secção não representam com precisão os detalhes e as proporções da forma, mas sim otimizam a representação da localização da forma.
Pode usar o ponto central geográfico de uma forma (o respetivo centroide) para representar a localização da forma completa. Use um retângulo que contenha a forma para criar a extensão da forma, que pode usar para representar a localização da forma e manter informações sobre o respetivo tamanho relativo.
A utilização de pontos e retângulos é mais útil para melhorar o custo e o desempenho de um conjunto de dados quando precisa de medir a distância entre dois pontos, como entre duas cidades.
Por exemplo, considere carregar uma base de dados de parcelas de terreno nos Estados Unidos para uma tabela do BigQuery e, em seguida, determinar a massa de água mais próxima.
Neste caso, a pré-computação dos centroides das parcelas através da função
ST_CENTROID
em combinação com o método descrito na secção
Simplificar formas deste documento pode reduzir o
número de comparações realizadas quando usa as funções
ST_DISTANCE
ou
ST_DWITHIN
. Quando usar a função ST_CENTROID
, o centroide da parcela tem de ser considerado no cálculo. O pré-cálculo dos centroides das parcelas desta forma também pode reduzir a variabilidade no desempenho, porque é provável que diferentes formas de parcelas contenham diferentes números de pontos.
Uma variante deste método é usar a função
ST_BOUNDINGBOX
em vez da função ST_CENTROID
para calcular um envelope retangular
em torno da forma de entrada. Embora não seja tão eficiente como usar um único ponto, pode reduzir a ocorrência de determinados casos extremos. Esta variante continua a oferecer um desempenho bom e consistente, uma vez que o resultado da função ST_BOUNDINGBOX
contém sempre apenas quatro pontos que têm de ser considerados. O resultado da caixa delimitadora é do tipo STRUCT
, o que significa que tem de calcular as distâncias manualmente ou usar o método de índice vetorial descrito mais adiante neste documento.
Use hulls
Prática recomendada: use um casco para otimizar a representação da localização de uma forma.
Se imaginar envolver uma forma em película aderente e calcular o limite da película aderente, esse limite é denominado casco. Num invólucro convexo, todos os ângulos da forma resultante são convexos. Tal como a extensão de uma forma, um invólucro convexo retém algumas informações sobre o tamanho e as proporções relativos da forma subjacente. No entanto, a utilização de um invólucro tem o custo de ter de armazenar e considerar mais pontos em análises subsequentes.
Pode usar a função ST_CONVEXHULL
para otimizar a representação da localização da forma. A utilização desta função melhora a precisão, mas tem como contrapartida a diminuição do desempenho. A função ST_CONVEXHULL
é semelhante à função ST_EXTENT
, exceto que a forma de saída contém mais pontos e varia no número de pontos com base na complexidade da forma de entrada. Embora a vantagem 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.
Use sistemas de grelha
Prática recomendada: use sistemas de grelhas geoespaciais para comparar áreas.
Se os seus exemplos de utilização envolverem a agregação de dados em áreas localizadas e a comparação de agregações estatísticas dessas áreas entre si, pode beneficiar da utilização de um sistema de grelha padronizado para comparar diferentes áreas.
Por exemplo, um retalhista pode querer analisar as alterações demográficas ao longo do tempo em áreas onde as suas lojas estão localizadas ou onde está a ponderar construir uma nova loja. Em alternativa, uma seguradora pode querer melhorar a sua compreensão dos riscos de propriedade analisando os riscos naturais predominantes numa área específica.
A utilização de sistemas de grelha padrão, como S2 e H3, pode acelerar essas agregações estatísticas e análises espaciais. A utilização destes sistemas de grelha também pode simplificar o desenvolvimento de estatísticas e melhorar a eficiência do desenvolvimento.
Por exemplo, as comparações que usam grupos de recenseamento nos Estados Unidos sofrem de inconsistência no tamanho, o que significa que é necessário aplicar fatores corretivos para fazer comparações semelhantes entre grupos de recenseamento. Além disso, os setores censitários e outros limites administrativos mudam ao longo do tempo e requerem esforço para corrigir estas alterações. A utilização de sistemas de grelhas para a análise espacial pode resolver estes desafios.
Use a pesquisa vetorial e os índices vetoriais
Prática recomendada: use a pesquisa vetorial e os índices vetoriais para consultas geoespaciais de vizinhos mais próximos.
As capacidades de pesquisa vetorial foram introduzidas no BigQuery para permitir exemplos de utilização de aprendizagem automática, como a pesquisa semântica, a deteção de semelhanças e a geração aumentada de obtenção. A chave para ativar estes exemplos de utilização é um método de indexação denominado pesquisa de vizinho mais próximo aproximada. Pode usar a pesquisa vetorial para acelerar e simplificar as consultas geoespaciais de vizinhos mais próximos comparando vetores que representam pontos no espaço.
Pode usar a pesquisa vetorial para pesquisar funcionalidades por raio. Primeiro, estabeleça um raio para a sua pesquisa. Pode descobrir o raio ideal no conjunto de resultados de uma pesquisa de vizinho mais próximo. Depois de estabelecer o raio, use a função
ST_DWITHIN
para identificar funcionalidades próximas.
Por exemplo, considere encontrar os dez edifícios mais próximos de um edifício de referência específico cuja localização já conhece. Pode armazenar os centroides de cada edifício como um vetor numa nova tabela, indexar a tabela e pesquisar através da pesquisa vetorial.
Para este exemplo, também pode usar os dados dos mapas Overture no BigQuery para criar uma tabela separada de formas de edifícios correspondentes a uma área de interesse e um vetor denominado 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 seguinte:
CREATE TABLE vector_search.norfolk_buildings
AS (
SELECT
*,
[
ST_X(ST_CENTROID(building.geometry)),
ST_Y(ST_CENTROID(building.geometry))] AS geom_vector
FROM `bigquery-public-data.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 seguinte mostra como criar um índice vetorial na tabela:
CREATE
vector index building_vector_index
ON
vector_search.norfolk_buildings(geom_vector)
OPTIONS (index_type = 'IVF')
Esta consulta identifica os 10 edifícios mais próximos de um edifício de referência específico:
SELECT base.*
FROM
VECTOR_SEARCH(
TABLE vector_search.norfolk_buildings,
'geom_vector',
(
SELECT
geom_vector
FROM
vector_search.norfolk_buildings
WHERE id = '56873794-9873-4fe1-871a-5987bb3a0efb'
),
top_k => 10,
distance_type => 'EUCLIDEAN',
options => '{"fraction_lists_to_search":0.1}')
No painel Resultados da consulta, clique no separador Visualização. O mapa mostra um conjunto de formas de edifícios mais próximos do edifício de referência:
Quando executar esta consulta na Google Cloud consola, clique em Informações da tarefa e
verifique se o Modo de utilização do índice vetorial está definido como FULLY_USED
. Isto indica que a consulta está a tirar partido do building_vector_index
índice de vetores, que criou anteriormente.
Divida 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 sequências de linhas longas em formas mais pequenas.
O que se segue?
- Saiba como usar sistemas de grelhas para a análise espacial.
- Saiba mais acerca das funções geográficas do BigQuery.
- Saiba como gerir índices vetoriais.
- Saiba mais sobre as práticas recomendadas para a indexação e o agrupamento espaciais no BigQuery.
- Para mais informações sobre a análise e a visualização de dados geoespaciais no BigQuery, consulte o artigo Comece a usar a análise geoespacial.