Best practice per l'analisi spaziale
Questo documento descrive le best practice per ottimizzare le prestazioni delle query geospaziali. in BigQuery. Puoi utilizzare queste best practice per migliorare il rendimento e ridurre i costi e la latenza.
I set di dati possono contenere grandi insiemi di poligoni, forme multipoligonali e linee di linea per rappresentare elementi complessi, come strade, lotti di terreno zone di inondazione. Ogni forma può contenere migliaia di punti. Nella maggior parte delle operazioni spaziali in BigQuery (ad esempio, intersezioni e calcoli di distanza), l'algoritmo sottostante di solito visita la maggior parte dei punti di ogni forma per produrre un risultato. Per alcune operazioni, l'algoritmo visita tutti punti. Per le forme complesse, visitare un punto può aumentare il costo e la durata della le operazioni spaziali. Puoi usare le strategie e i metodi presentati in questa guida all'ottimizzazione di queste operazioni spaziali comuni per migliorare le prestazioni una riduzione dei costi.
Questo documento presuppone che le tabelle geospaziali di BigQuery siano raggruppate in base a una colonna geografica.
Semplificare le forme
Best practice: utilizza le funzioni di semplificazione e di posizionamento alla griglia per archiviare un'immagine del set di dati originale come vista materializzata.
Molte forme complesse con un numero elevato di punti possono essere semplificate senza molto
e una perdita di precisione. Utilizza le funzioni BigQuery
ST_SIMPLIFY
e
ST_SNAPTOGRID
separatamente o insieme per ridurre il numero di punti in forme complesse.
Combina queste funzioni con BigQuery
viste materializzate per archiviare una
una versione semplificata del set di dati originale come vista materializzata,
aggiornati automaticamente rispetto alla tabella di base.
La semplificazione delle forme è utile soprattutto per migliorare i costi e le prestazioni di un set di dati nei seguenti casi d'uso:
- È necessario mantenere un elevato grado di somiglianza con la forma reale.
- Devi eseguire operazioni ad alta precisione.
- Vuoi velocizzare le visualizzazioni senza una perdita visibile dei dettagli della forma.
Il seguente esempio di codice mostra come utilizzare la funzione ST_SIMPLIFY
su una base
tabella con una colonna GEOGRAPHY
denominata geom
. Il codice semplifica le forme e rimuove i punti senza modificare i bordi di una forma per più della tolleranza indicata di 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
)
Il seguente esempio di codice mostra come utilizzare la funzione ST_SNAPTOGRID
per agganciare
i punti su una griglia con una risoluzione di 0,00001 gradi:
CREATE MATERIALIZED VIEW project.dataset.base_mv
CLUSTER BY geom
AS (
SELECT
* EXCEPT (geom),
ST_SNAPTOGRID(geom, -5) AS geom
FROM base_table
)
L'argomento grid_size
in questa funzione funge da esponente, il che significa
10e-5 = 0,00001. Questa risoluzione equivale a circa 1 metro nella peggiore
, che si trova all'equatore.
Dopo aver creato queste viste, esegui una query sulla vista base_mv
utilizzando la stessa semantica di query che utilizzeresti per eseguire una query sulla tabella di base. Puoi utilizzare questa tecnica per identificare rapidamente una raccolta di forme che devono essere analizzate più a fondo, quindi puoi eseguire una seconda analisi più approfondita sulla tabella di base. Testa
per vedere quali valori di soglia funzionano meglio per i tuoi dati.
Per i casi d'uso di misurazione, determina il livello di accuratezza richiesto dal tuo caso d'uso. Quando utilizzi la funzione ST_SIMPLIFY
, imposta il parametro threshold_meters
sul livello di accuratezza richiesto. Per misurare le distanze su una scala corrispondente a una città o più grande, imposta una soglia di 10 metri. Su scala ridotta, ad esempio
Ad esempio, quando misuri la distanza tra un edificio e il corpo più vicino di
Acqua: valuta la possibilità di utilizzare una soglia più piccola, pari o inferiore a 1 metro. Utilizzo di più piccole
di soglia comporta la rimozione di meno punti dalla forma specificata.
Quando pubblichi i livelli della mappa da un servizio web, puoi precalcolare le visualizzazioni materializzate per diversi livelli di zoom con il progetto bigquery-geotools, un driver per Geoserver che ti consente di pubblicare livelli spaziali da BigQuery. Questo driver crea più viste materializzate
diversi parametri di soglia ST_SIMPLIFY
in modo che vengano pubblicati meno dettagli
livelli di zoom più elevati.
Usare punti e rettangoli
Best practice: riduci la forma a un punto o un rettangolo per rappresentare la sua posizione.
Puoi migliorare le prestazioni delle query riducendo la forma a un singolo punto oppure un rettangolo. I metodi in questa sezione non rappresentano con precisione i dettagli e le proporzioni della forma, ma sono ottimizzati per rappresentare la posizione della forma.
Puoi utilizzare il punto geografico centrale di una forma (il centroid) per rappresentano la posizione dell'intera forma. Usa un rettangolo contenente la forma per creare l'estensione della forma, che puoi utilizzare per rappresentare posizione geografica e le informazioni sulla sua dimensione relativa.
L'uso di punti e rettangoli è più utile per migliorare costi e prestazioni di un set di dati quando devi misurare la distanza tra due punti, ad esempio tra due città.
Ad esempio, considera la possibilità di caricare un database di lotti di terreno negli Stati Uniti in
una tabella BigQuery e quindi di determinare lo specchio d'acqua più vicino.
In questo caso, il precalcolo dei centroidi di un pacco utilizzando
ST_CENTROID
funzione in combinazione con il metodo descritto nel
Nella sezione Semplifica le forme di questo documento puoi ridurre
il numero di confronti eseguiti quando si utilizza il
ST_DISTANCE
oppure
ST_DWITHIN
funzioni. Quando utilizzi la funzione ST_CENTROID
, il centroide del lotto deve essere preso in considerazione nel calcolo. Precomputing dei centroidi del lotto in questo modo
può anche ridurre la variabilità delle prestazioni, perché le forme dei lotti diverse sono
probabilmente conterranno un numero diverso di punti.
Una variante di questo metodo consiste nell'utilizzare la funzione
ST_BOUNDINGBOX
instead of the function ST_CENTROID
per calcolare un'involucro rettangolare
intorno alla forma di input. Sebbene non sia molto efficiente come l'utilizzo di un singolo punto,
puoi ridurre la frequenza di determinati casi limite. Questa variante offre comunque un rendimento buono e coerente, poiché l'output della funzione ST_BOUNDINGBOX
contiene sempre solo quattro punti da considerare. Il risultato della delimitazione sarà di tipo STRUCT
, il che significa che dovrai calcolare le distanze manualmente o utilizzare il metodo dell'indice di vettore descritto più avanti in questo documento.
Utilizzare gli scafi
Best practice: utilizza una carena per ottimizzare la rappresentazione della posizione di una forma.
Se immaginiamo l'incarto di una forma e il calcolo del suo limite avvolgente, tale confine è chiamato scafo. In un involucro convesso, tutti gli angoli della forma risultante sono convessi. Come l'estensione di una forma, lo scafo convesso conserva alcune informazioni sulle dimensioni e sulle proporzioni relative della forma sottostante. Tuttavia, l'utilizzo di una carena comporta la necessità di memorizzare e prendere in considerazione più punti nelle analisi successive.
Puoi utilizzare la funzione ST_CONVEXHULL
per ottimizzare la rappresentazione del
posizione della forma. L'utilizzo di questa funzione migliora la precisione, ma comporta una diminuzione delle prestazioni. La funzione ST_CONVEXHULL
è simile alla funzione ST_EXTENT
, tranne per il fatto che la forma in uscita contiene più punti e il numero di punti varia in base alla complessità della forma in input. Sebbene il vantaggio in termini di prestazioni sia probabilmente trascurabile per i set di dati di piccole dimensioni con forme non complesse, per i set di dati di grandi dimensioni con forme grandi e complesse, la funzione ST_CONVEXHULL
offre un buon equilibrio tra costo, prestazioni e accuratezza.
Utilizzare i sistemi a griglia
Best practice: utilizza i sistemi di griglia geospaziali per confrontare le aree.
Se i tuoi casi d'uso prevedono l'aggregazione di dati all'interno di aree localizzate e Confrontando le aggregazioni statistiche di queste aree tra loro, puoi traggono vantaggio dall'utilizzo di un sistema a griglia standardizzato per confrontare diverse aree.
Ad esempio, un rivenditore potrebbe voler analizzare le variazioni demografiche nel tempo nelle aree in cui si trovano i suoi negozi o in cui sta pensando di aprire un nuovo negozio. In alternativa, una compagnia di assicurazioni potrebbe voler migliorare la propria comprensione dei rischi relativi alle proprietà analizzando i rischi di calamità naturali prevalenti in una determinata area.
Utilizzo sistemi a rete standard come S2 e H3 possono velocizzare le aggregazioni statistiche e le analisi spaziali. Uso della griglia sistemi può inoltre semplificare lo sviluppo dell'analisi e migliorare lo sviluppo efficienza operativa.
Ad esempio, i confronti utilizzando le sezioni censite negli Stati Uniti presentano incoerenze nelle dimensioni, il che significa che i fattori correttivi devono applicati per eseguire confronti omogenei tra le sezioni censite. Inoltre, le sezioni di censimento e altri confini amministrativi cambiano nel tempo e richiedono per correggere questi cambiamenti. L'utilizzo di sistemi di griglia per l'analisi spaziale può risolvere questi problemi.
Utilizzare la ricerca di vettori e gli indici di vettori
Best practice: utilizza la ricerca vettoriale e gli indici vettoriali per le query geospaziali con il metodo del vicino più vicino.
Le funzionalità di ricerca vettoriale disponibile in BigQuery abilitare casi d'uso di machine learning come la ricerca semantica, il rilevamento di somiglianze e il recupero accelerato. La chiave per abilitare questi casi d'uso è di indicizzazione con il nome ricerca al vicino più vicino. Puoi utilizzare la ricerca vettoriale per velocizzare e semplificare le query geospaziali del vicino più prossimo confrontando i vettori che rappresentano i punti nello spazio.
Puoi utilizzare la ricerca vettoriale per cercare elementi in base al raggio. Innanzitutto, stabilisci un
per la tua ricerca. Puoi scoprire il raggio ottimale nell'insieme di risultati
una ricerca al vicino più prossimo. Dopo aver stabilito il raggio, utilizza la funzione
ST_DWITHIN
per identificare gli elementi nelle vicinanze.
Ad esempio, valuta la possibilità di individuare i dieci edifici più vicini a un dell'ancoraggio di cui hai già la posizione. Puoi memorizzare i centroidi di ogni edificio come vettore in una nuova tabella, indicizzare la tabella e eseguire ricerche utilizzando la ricerca di vettori.
Per questo esempio, puoi anche utilizzare
i dati di Overture Maps in BigQuery
per creare una tabella separata delle forme degli edifici corrispondente a un'area di
interesse e un vettore denominato geom_vector
. L'area di interesse in questo esempio
è la città di Norfolk, in Virginia, Stati Uniti, rappresentata dal
codice FIPS
51710, come mostrato nel seguente esempio di codice:
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'
)
Il seguente esempio di codice mostra come creare un indice vettoriale nella tabella:
CREATE
vector index building_vector_index
ON
`geo-solution-demos.vector_search.norfolk_buildings`(geom_vector)
OPTIONS (index_type = 'IVF')
Questa query identifica i 10 edifici più vicini a un determinato edificio di riferimento, rappresentato come 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 visualizzi i dati geospaziali in Visualizzazione geografica BigQuery l'output è un gruppo di forme dell'edificio più vicine all'edificio di ancoraggio, visualizzato nell'immagine seguente:
Quando esegui questa query nella console Google Cloud, fai clic su Informazioni sul job e verifica che Modalità di utilizzo dell'indice di vettori sia impostata su FULLY_USED
. Ciò indica
la query sta sfruttando l'indice vettoriale building_vector_index
, che hai
creati in precedenza.
Dividere forme grandi
Best practice: dividi le forme di grandi dimensioni con la funzione ST_SUBDIVIDE
.
Usa la funzione ST_SUBDIVIDE
per
suddividere forme grandi o lunghe linee di linea in forme più piccole.
Passaggi successivi
- Scopri come utilizzare i sistemi a griglia per l'analisi spaziale.
- Scopri di più sulle funzioni geografiche di BigQuery.
- Scopri come gestire gli indici vettoriali.
- Scopri di più sulle best practice per l'indicizzazione e il clustering spaziali in BigQuery.
- Per ulteriori informazioni sull'analisi e sulla visualizzazione dei dati geospaziali in BigQuery, consulta Guida introduttiva all'analisi geospaziale.