Fungsi PLACES_COUNT
menampilkan satu nilai jumlah tempat berdasarkan area penelusuran dan filter penelusuran yang ditentukan. Anda harus menentukan area penelusuran ke fungsi PLACES_COUNT
dan secara opsional dapat menentukan parameter filter tambahan, seperti jenis tempat, status operasional, tingkat harga, dan lainnya.
Karena fungsi PLACES_COUNT
menampilkan satu nilai, panggil menggunakan
klausa SELECT
.
Parameter input:
Wajib: Parameter filter
geography
yang menentukan area penelusuran. Parametergeography
mengambil nilai yang ditentukan oleh jenis dataGEOGRAPHY
BigQuery, yang mendukung titik, linestring, dan poligon.Opsional: Parameter filter tambahan untuk menyaring penelusuran Anda.
Retur:
- Nilai
count
tunggal sebagaiINT64
.
- Nilai
Contoh: Menghitung jumlah tempat dalam radius penelusuran
Panggilan fungsi PLACES_COUNT
yang paling sederhana menampilkan satu jumlah semua tempat di area geografis. Dalam contoh ini, Anda menampilkan jumlah semua tempat operasional dalam radius 1.000 meter dari Empire State Building.
Contoh ini menggunakan fungsi
ST_GEOGPOINT
BigQuery untuk menampilkan nilai GEOGRAPHY
dari suatu titik.
SELECT `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`( JSON_OBJECT( 'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building 'geography_radius', 1000 -- Radius in meters ) ) as count;
Respons berisi satu jumlah:
Panggilan yang lebih umum menerapkan filter ke area penelusuran. Contoh berikutnya menggunakan filter untuk membatasi penelusuran agar hanya menampilkan jumlah:
- Tempat jenis
restaurant
dengan rating minimum 3 - Tingkat harga murah atau sedang
- Saat ini beroperasi
- Anjing boleh dibawa masuk
SELECT `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`( JSON_OBJECT( 'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building 'geography_radius', 1000, -- Radius in meters 'types', ["restaurant"], 'min_rating', 3, 'price_level', ['PRICE_LEVEL_INEXPENSIVE', 'PRICE_LEVEL_MODERATE'], 'business_status', ['OPERATIONAL'], 'allows_dogs', TRUE ) ) as count;
Respons yang difilter:
Ingatlah bahwa kueri set data tempat menerapkan nilai minimum 5. Salah satu keunggulan fungsi jumlah tempat adalah bahwa fungsi tersebut dapat menampilkan jumlah apa pun, termasuk 0. Misalnya, panggilan berikut menampilkan hitungan 1:
SELECT `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`( JSON_OBJECT( 'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building 'geography_radius', 500, -- Radius in meters 'types', ["restaurant"], 'min_rating', 4.0, 'free_parking_lot', TRUE, 'good_for_watching_sports', TRUE ) ) as count;
Contoh: Menghitung jumlah restoran menggunakan poligon
Anda dapat menggunakan poligon untuk menentukan area penelusuran. Saat menggunakan poligon, titik-titik poligon harus menentukan loop tertutup di mana titik pertama dalam poligon sama dengan titik terakhir.
Contoh ini menggunakan fungsi
ST_GEOGFROMTEXT
BigQuery untuk menampilkan nilai GEOGRAPHY
dari poligon.
DECLARE geo GEOGRAPHY; SET geo = ST_GEOGFROMTEXT('''POLYGON((-73.985708 40.75773,-73.993324 40.750298, -73.9857 40.7484,-73.9785 40.7575, -73.985708 40.75773))'''); -- NYC viewport SELECT `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`( JSON_OBJECT( 'geography',geo, -- viewport 'types', ["restaurant"], 'min_rating', 1.0, 'max_rating', 4.5, 'min_user_rating_count', 1, 'max_user_rating_count', 10000, 'price_level', ['PRICE_LEVEL_INEXPENSIVE', 'PRICE_LEVEL_MODERATE'], 'business_status', ['OPERATIONAL'], 'allows_dogs', TRUE ) ) as count;
Respons untuk area pandang:
Contoh: Menghitung jumlah restoran menggunakan garis
Pada contoh berikutnya, Anda menentukan area penelusuran menggunakan garis titik yang terhubung dengan radius penelusuran 100 meter di sekitar garis. Jalur ini mirip dengan rute perjalanan yang dihitung oleh Routes API. Rute dapat berupa rute untuk kendaraan, sepeda, atau pejalan kaki:
DECLARE geo GEOGRAPHY; SET geo = ST_GEOGFROMTEXT('LINESTRING(-73.98903537033028 40.73655649223003,-73.93580216278471 40.80955538843361)'); -- NYC line SELECT `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`( JSON_OBJECT( 'geography',geo, -- line 'geography_radius', 100, -- Radius around line 'types', ["restaurant"], 'min_rating', 1.0, 'max_rating', 4.5, 'min_user_rating_count', 1, 'max_user_rating_count', 10000, 'price_level', ['PRICE_LEVEL_INEXPENSIVE', 'PRICE_LEVEL_MODERATE'], 'business_status', ['OPERATIONAL'], 'allows_dogs', TRUE ) ) as count;
Respons untuk baris:
Contoh: Menggabungkan hasil beberapa panggilan
Anda dapat menggabungkan hasil beberapa panggilan ke fungsi PLACES_COUNT
.
Misalnya, Anda menginginkan satu hasil yang menunjukkan jumlah restoran untuk tingkat harga berikut dalam area tertentu:
PRICE_LEVEL_INEXPENSIVE
PRICE_LEVEL_MODERATE
PRICE_LEVEL_EXPENSIVE
PRICE_LEVEL_VERY_EXPENSIVE"
Dalam contoh ini, Anda membuat loop untuk memanggil fungsi PLACES_COUNT
untuk setiap tingkat harga, dan memasukkan hasil setiap panggilan ke tabel sementara. Kemudian, Anda
mengirimkan kueri ke tabel sementara untuk menampilkan hasilnya:
-- Create a temp table to hold the results. CREATE TEMP TABLE results (type STRING, count INT64); -- Create a loop that calls PLACES_COUNT for each price level. FOR types IN (SELECT type FROM UNNEST(["PRICE_LEVEL_INEXPENSIVE", "PRICE_LEVEL_MODERATE", "PRICE_LEVEL_EXPENSIVE", "PRICE_LEVEL_VERY_EXPENSIVE"]) as type) DO INSERT INTO results VALUES (types.type, `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`( JSON_OBJECT( 'types', ["restaurant"], 'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building 'geography_radius', 1000, -- Radius in meters 'business_status', ['OPERATIONAL'], 'price_level', [types.type] ))); END FOR; -- Query the table of results. SELECT * FROM results;
Respons gabungan:
Opsi lainnya adalah menggunakan perintah UNION ALL
untuk menggabungkan hasil dari beberapa pernyataan SELECT
. Contoh berikut menunjukkan hasil yang sama seperti
dari contoh sebelumnya:
SELECT "PRICE_LEVEL_INEXPENSIVE" as price_level, `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`( JSON_OBJECT( 'types', ["restaurant"], 'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building 'geography_radius', 1000, -- Radius in meters 'business_status', ['OPERATIONAL'], 'price_level', ['PRICE_LEVEL_INEXPENSIVE'] ) ) as count UNION ALL SELECT "PRICE_LEVEL_MODERATE" as price_level, `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`( JSON_OBJECT( 'types', ["restaurant"], 'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building 'geography_radius', 1000, -- Radius in meters 'business_status', ['OPERATIONAL'], 'price_level', ['PRICE_LEVEL_MODERATE'] ) ) as count UNION ALL SELECT "PRICE_LEVEL_EXPENSIVE" as price_level, `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`( JSON_OBJECT( 'types', ["restaurant"], 'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building 'geography_radius', 1000, -- Radius in meters 'business_status', ['OPERATIONAL'], 'price_level', ['PRICE_LEVEL_EXPENSIVE'] ) ) as count UNION ALL SELECT "PRICE_LEVEL_VERY_EXPENSIVE" as price_level, `maps-platform-analytics-hub.sample_places_insights_us.PLACES_COUNT`( JSON_OBJECT( 'types', ["restaurant"], 'geography', ST_GEOGPOINT(-73.9857, 40.7484), -- Empire State Building 'geography_radius', 1000, -- Radius in meters 'business_status', ['OPERATIONAL'], 'price_level', ['PRICE_LEVEL_VERY_EXPENSIVE'] ) ) as count