Praktik terbaik untuk analisis spasial
Saat Anda menganalisis fitur geospasial yang kompleks di BigQuery, set data dapat berisi banyak koleksi poligon, bentuk multipoligon, dan linestring untuk merepresentasikan fitur yang kompleks—misalnya, jalan, bidang tanah, dan zona banjir. Setiap bentuk dapat berisi ribuan titik. Dalam sebagian besar operasi spasial di BigQuery (misalnya, persimpangan dan penghitungan jarak), algoritma yang mendasarinya biasanya mengunjungi sebagian besar titik di setiap bentuk untuk menghasilkan hasil. Untuk beberapa operasi, algoritma akan mengunjungi semua titik.
Memproses bentuk dengan ribuan titik dapat meningkatkan biaya dan durasi kueri Anda secara drastis. Untuk mengoptimalkan performa kueri geospasial dan mengurangi latensi, Anda dapat menerapkan praktik terbaik analisis spasial tertentu ke set data Anda.
Dokumen ini mengasumsikan bahwa tabel geospasial BigQuery Anda dikelompokkan pada kolom geografi.
Menyederhanakan bentuk
Praktik terbaik: Gunakan fungsi simplify dan snap-to-grid untuk menyimpan versi sederhana dari set data asli Anda sebagai tampilan terwujud.
Banyak bentuk kompleks dengan jumlah titik yang besar dapat disederhanakan tanpa banyak
kehilangan presisi. Gunakan fungsi ST_SIMPLIFY dan ST_SNAPTOGRID BigQuery secara terpisah atau bersama-sama untuk mengurangi jumlah titik dalam bentuk yang kompleks.
Gabungkan fungsi ini dengan tampilan terwujud BigQuery untuk menyimpan versi sederhana set data asli Anda sebagai tampilan terwujud yang otomatis diperbarui terhadap tabel dasar.
Menyederhanakan bentuk sangat berguna untuk meningkatkan biaya dan performa set data dalam kasus penggunaan berikut:
- Anda harus mempertahankan tingkat kemiripan yang tinggi dengan bentuk aslinya.
- Anda harus melakukan operasi dengan presisi dan akurasi tinggi.
- Anda ingin mempercepat visualisasi tanpa kehilangan detail bentuk yang terlihat.
Contoh kode berikut menunjukkan cara menggunakan fungsi ST_SIMPLIFY pada tabel dasar yang memiliki kolom GEOGRAPHY bernama geom. Kode ini menyederhanakan bentuk
dan menghapus titik tanpa mengganggu tepi bentuk apa pun lebih dari
toleransi yang diberikan sebesar 1,0 meter.
CREATE MATERIALIZED VIEW project.dataset.base_mv
CLUSTER BY geom
AS (
SELECT
* EXCEPT (geom),
ST_SIMPLIFY(geom, 1.0) AS geom
FROM base_table
)
Contoh kode berikut menunjukkan cara menggunakan fungsi ST_SNAPTOGRID untuk menyelaraskan titik ke petak dengan resolusi 0,00001 derajat:
CREATE MATERIALIZED VIEW project.dataset.base_mv
CLUSTER BY geom
AS (
SELECT
* EXCEPT (geom),
ST_SNAPTOGRID(geom, -5) AS geom
FROM base_table
)
Argumen grid_size dalam fungsi ini berfungsi sebagai eksponen, yang berarti
10e-5 = 0,00001. Resolusi ini setara dengan sekitar 1 meter dalam kasus terburuk, yang terjadi di khatulistiwa.
Setelah membuat tampilan ini, buat kueri tampilan base_mv menggunakan semantik kueri yang sama dengan yang Anda gunakan untuk membuat kueri tabel dasar. Anda dapat menggunakan teknik ini
untuk mengidentifikasi kumpulan bentuk yang perlu dianalisis lebih mendalam dengan cepat,
lalu Anda dapat melakukan analisis kedua yang lebih mendalam pada tabel dasar. Uji kueri Anda untuk melihat nilai minimum yang paling sesuai untuk data Anda.
Untuk kasus penggunaan pengukuran, tentukan tingkat akurasi yang diperlukan kasus penggunaan Anda. Saat menggunakan fungsi ST_SIMPLIFY, tetapkan parameter threshold_meters ke tingkat akurasi yang diperlukan. Untuk mengukur jarak pada skala kota atau lebih besar, tetapkan nilai minimum 10 meter. Pada skala yang lebih kecil—misalnya, saat mengukur jarak antara bangunan dan perairan terdekat—pertimbangkan untuk menggunakan nilai minimum yang lebih kecil, yaitu 1 meter atau kurang. Menggunakan nilai minimum yang lebih kecil akan menghasilkan penghapusan lebih sedikit titik dari bentuk yang diberikan.
Saat menyajikan lapisan peta dari layanan web, Anda dapat melakukan pra-penghitungan tampilan terwujud untuk berbagai tingkat zoom dengan project bigquery-geotools, yang merupakan driver untuk Geoserver yang memungkinkan Anda menyajikan lapisan spasial dari BigQuery. Driver ini membuat beberapa tampilan terwujud dengan parameter nilai minimum ST_SIMPLIFY yang berbeda sehingga lebih sedikit detail yang ditampilkan pada tingkat zoom yang lebih tinggi.
Menggunakan titik dan persegi panjang
Praktik terbaik: Kurangi bentuk menjadi titik atau persegi panjang untuk merepresentasikan lokasinya.
Anda dapat meningkatkan performa kueri dengan mengurangi bentuk menjadi satu titik atau persegi panjang. Metode di bagian ini tidak secara akurat merepresentasikan detail dan proporsi bentuk, tetapi mengoptimalkan representasi lokasi bentuk.
Anda dapat menggunakan titik pusat geografis suatu bentuk (centroid-nya) untuk mewakili lokasi seluruh bentuk. Gunakan persegi panjang yang berisi bentuk untuk membuat luas bentuk, yang dapat Anda gunakan untuk merepresentasikan lokasi bentuk dan mempertahankan informasi tentang ukuran relatifnya.
Penggunaan titik dan persegi panjang sangat berguna untuk meningkatkan biaya dan performa set data saat Anda perlu mengukur jarak antara dua titik, seperti antara dua kota.
Misalnya, pertimbangkan untuk memuat database bidang tanah di Amerika Serikat ke dalam tabel BigQuery, lalu menentukan badan air terdekat.
Dalam hal ini, melakukan pra-komputasi centroid paket menggunakan fungsi ST_CENTROID yang dikombinasikan dengan metode yang dijelaskan di bagian Menyederhanakan bentuk dalam dokumen ini dapat mengurangi jumlah perbandingan yang dilakukan saat menggunakan fungsi ST_DISTANCE atau ST_DWITHIN. Saat menggunakan fungsi ST_CENTROID, sentroid persil perlu
dipertimbangkan dalam penghitungan. Melakukan pra-komputasi centroid persil dengan cara ini
juga dapat mengurangi variabilitas performa, karena bentuk persil yang berbeda
kemungkinan akan berisi jumlah titik yang berbeda.
Varian dari metode ini adalah menggunakan fungsi
ST_BOUNDINGBOX,
bukan fungsi ST_CENTROID untuk menghitung amplop persegi panjang
di sekitar bentuk input. Meskipun tidak seefisien menggunakan satu titik,
hal ini dapat mengurangi terjadinya kasus ekstrem tertentu. Varian ini masih menawarkan
performa yang baik dan konsisten, karena output fungsi ST_BOUNDINGBOX
selalu hanya berisi empat titik yang perlu dipertimbangkan. Hasil kotak pembatas akan berjenis STRUCT, yang berarti Anda harus menghitung jarak secara manual atau menggunakan metode indeks vektor yang dijelaskan nanti dalam dokumen ini.
Menggunakan lambung kapal
Praktik terbaik: Gunakan hull untuk mengoptimalkan representasi lokasi bentuk.
Jika Anda membayangkan membungkus bentuk dengan plastik dan menghitung batas bungkus plastik tersebut, batas tersebut disebut hull. Dalam convex hull, semua sudut bentuk yang dihasilkan adalah cembung. Seperti luas bentuk, convex hull mempertahankan beberapa informasi tentang ukuran dan proporsi relatif bentuk yang mendasarinya. Namun, penggunaan lambung kapal memerlukan penyimpanan dan pertimbangan lebih banyak titik dalam analisis berikutnya.
Anda dapat menggunakan fungsi ST_CONVEXHULL untuk mengoptimalkan representasi lokasi bentuk. Penggunaan fungsi ini meningkatkan akurasi, tetapi hal ini mengorbankan penurunan performa. Fungsi ST_CONVEXHULL mirip dengan fungsi ST_EXTENT, tetapi bentuk outputnya berisi lebih banyak titik dan bervariasi dalam jumlah titik berdasarkan kompleksitas bentuk input. Meskipun manfaat performa
mungkin dapat diabaikan untuk set data kecil dengan bentuk yang tidak kompleks, untuk set data
yang sangat besar dengan bentuk yang besar dan kompleks, fungsi ST_CONVEXHULL menawarkan
keseimbangan yang baik antara biaya, performa, dan akurasi.
Menggunakan sistem petak
Praktik terbaik: Gunakan sistem petak geospasial untuk membandingkan area.
Jika kasus penggunaan Anda melibatkan penggabungan data dalam area yang dilokalkan dan membandingkan agregasi statistik area tersebut satu sama lain, Anda dapat memanfaatkan penggunaan sistem petak standar untuk membandingkan area yang berbeda.
Misalnya, retailer mungkin ingin menganalisis perubahan demografis dari waktu ke waktu di area tempat toko mereka berada atau tempat mereka mempertimbangkan untuk membangun toko baru. Atau, perusahaan asuransi mungkin ingin meningkatkan pemahaman mereka tentang risiko properti dengan menganalisis risiko bencana alam yang ada di area tertentu.
Penggunaan sistem petak standar seperti S2 dan H3 dapat mempercepat agregasi statistik dan analisis spasial tersebut. Penggunaan sistem petak ini juga dapat menyederhanakan pengembangan analisis dan meningkatkan efisiensi pengembangan.
Misalnya, perbandingan menggunakan wilayah sensus di Amerika Serikat mengalami inkonsistensi dalam ukuran, yang berarti faktor korektif perlu diterapkan untuk melakukan perbandingan yang setara antara wilayah sensus. Selain itu, wilayah sensus dan batas administratif lainnya berubah seiring waktu dan memerlukan upaya untuk memperbaiki perubahan ini. Penggunaan sistem petak untuk analisis spasial dapat mengatasi tantangan tersebut.
Menggunakan penelusuran vektor dan indeks vektor
Praktik terbaik: Gunakan penelusuran vektor dan indeks vektor untuk kueri geospasial tetangga terdekat.
Kemampuan penelusuran vektor diperkenalkan di BigQuery untuk memungkinkan kasus penggunaan machine learning seperti penelusuran semantik, deteksi kesamaan, dan retrieval-augmented generation. Kunci untuk mengaktifkan kasus penggunaan ini adalah metode pengindeksan yang disebut penelusuran perkiraan tetangga terdekat. Anda dapat menggunakan penelusuran vektor untuk mempercepat dan menyederhanakan kueri geospasial tetangga terdekat dengan membandingkan vektor yang merepresentasikan titik dalam ruang.
Anda dapat menggunakan penelusuran vektor untuk menelusuri fitur berdasarkan radius. Pertama, tentukan
radius untuk penelusuran Anda. Anda dapat menemukan radius optimal dalam kumpulan hasil penelusuran tetangga terdekat. Setelah Anda menetapkan radius, gunakan fungsi
ST_DWITHIN
untuk mengidentifikasi fitur di sekitar.
Misalnya, pertimbangkan untuk menemukan sepuluh bangunan terdekat dengan bangunan anchor tertentu yang lokasinya sudah Anda miliki. Anda dapat menyimpan centroid setiap bangunan sebagai vektor dalam tabel baru, mengindeks tabel, dan menelusuri menggunakan penelusuran vektor.
Untuk contoh ini, Anda juga dapat menggunakan
data Overture Maps di BigQuery
untuk membuat tabel terpisah yang berisi bentuk bangunan yang sesuai dengan area
minat dan vektor yang disebut geom_vector. Area minat dalam contoh ini
adalah kota Norfolk, VA, Amerika Serikat, yang diwakili oleh
kode FIPS
51710, seperti yang ditunjukkan dalam contoh kode berikut:
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'
)
Contoh kode berikut menunjukkan cara membuat indeks vektor pada tabel:
CREATE
vector index building_vector_index
ON
vector_search.norfolk_buildings(geom_vector)
OPTIONS (index_type = 'IVF')
Kueri ini mengidentifikasi 10 bangunan yang paling dekat dengan bangunan anchor tertentu:
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}')
Di panel Query results, klik tab Visualization. Peta menampilkan cluster bentuk bangunan yang paling dekat dengan bangunan anchor:
Saat Anda menjalankan kueri ini di konsol Cloud de Confiance , klik Job Information dan
pastikan Vector Index Usage Mode ditetapkan ke FULLY_USED. Hal ini menunjukkan
bahwa kueri memanfaatkan indeks vektor building_vector_index, yang Anda
buat sebelumnya.
Membagi bentuk besar
Praktik terbaik: Bagi bentuk besar dengan fungsi ST_SUBDIVIDE.
Gunakan fungsi ST_SUBDIVIDE untuk
memecah bentuk besar atau string garis panjang menjadi bentuk yang lebih kecil.
Langkah berikutnya
- Pelajari cara menggunakan sistem petak untuk analisis spasial.
- Pelajari lebih lanjut fungsi geografi BigQuery.
- Pelajari cara mengelola indeks vektor.
- Pelajari lebih lanjut praktik terbaik untuk pengindeksan dan pengelompokan spasial di BigQuery.
- Untuk mengetahui informasi selengkapnya tentang cara menganalisis dan memvisualisasikan data geospasial di BigQuery, lihat Memulai analisis geospasial.