Untuk mengakses data Places Insights, Anda menulis kueri SQL di BigQuery yang menampilkan insight gabungan tentang tempat. Hasil ditampilkan dari set data untuk kriteria penelusuran yang ditentukan dalam kueri.
Dasar-dasar kueri
Gambar berikut menunjukkan format dasar kueri:
Setiap bagian kueri dijelaskan secara lebih mendetail di bawah.
Persyaratan kueri
Pernyataan SELECT
dalam kueri harus menyertakan WITH AGGREGATION_THRESHOLD
dan menentukan set data. Contoh:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us___sample.places_sample`
Dalam contoh ini, Anda menggunakan FROM
untuk menentukan set data
PROJECT_NAME.places_insights___us___sample.places_sample
untuk Amerika Serikat.
Tentukan nama project (opsional)
Anda dapat menyertakan nama project dalam kueri. Jika Anda tidak menentukan nama project, kueri Anda akan ditetapkan secara default ke project aktif.
Anda mungkin ingin menyertakan nama project jika telah menautkan set data dengan nama yang sama dalam project yang berbeda, atau jika Anda membuat kueri tabel di luar project aktif.
Misalnya, [project name].[dataset name].places_sample
.
Menentukan fungsi agregasi
Contoh di bawah menunjukkan fungsi agregasi BigQuery yang didukung. Kueri ini menggabungkan rating semua tempat yang berada dalam radius 1.000 meter dari Empire State Building di New York City untuk menghasilkan statistik rating:
SELECT WITH AGGREGATION_THRESHOLD COUNT(id) AS place_count, APPROX_COUNT_DISTINCT(rating) as distinct_ratings, COUNTIF(rating > 4.0) as good_rating_count, LOGICAL_AND(rating <= 5) as all_ratings_equal_or_below_five, LOGICAL_OR(rating = 5) as any_rating_exactly_five, AVG(rating) as avg_rating, SUM(user_rating_count) as rating_count, COVAR_POP(rating, user_rating_count) as rating_covar_pop, COVAR_SAMP(rating, user_rating_count) as rating_covar_samp, STDDEV_POP(rating) as rating_stddev_pop, STDDEV_SAMP(rating) as rating_stddev_samp, VAR_POP(rating) as rating_var_pop, VAR_SAMP(rating) as rating_var_samp, FROM `PROJECT_NAME.places_insights___us___sample.places_sample` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000) AND business_status = "OPERATIONAL"
Menentukan pembatasan lokasi
Jika Anda tidak menentukan batasan lokasi, agregasi data akan diterapkan ke seluruh set data. Biasanya Anda menentukan batasan lokasi untuk menelusuri area tertentu, seperti yang ditunjukkan di bawah:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us___sample.places_sample` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000)
Dalam contoh ini, kueri Anda menentukan batasan target yang berpusat di Empire State Building di New York City, dengan radius 1.000 meter.
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:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us___sample.places_sample` WHERE ST_CONTAINS(ST_GEOGFROMTEXT("""POLYGON((-73.985708 40.75773,-73.993324 40.750298, -73.9857 40.7484,-73.9785 40.7575, -73.985708 40.75773))"""), point)
Pada contoh berikutnya, Anda menentukan area penelusuran menggunakan garis yang menghubungkan titik-titik. Jalur ini mirip dengan rute perjalanan yang dihitung oleh Routes API. Rute dapat berupa rute untuk kendaraan, sepeda, atau pejalan kaki:
DECLARE route GEOGRAPHY; SET route = ST_GEOGFROMTEXT("""LINESTRING(-73.98903537033028 40.73655649223003, -73.93580216278471 40.80955538843361)"""); SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us___sample.places_sample` WHERE ST_DWITHIN(route, point, 100)
Dalam contoh ini, Anda menetapkan radius penelusuran ke 100 meter di sekitar garis.
Memfilter menurut kolom set data tempat
Persempit penelusuran Anda berdasarkan kolom yang ditentukan oleh skema set data. Memfilter hasil berdasarkan kolom set data seperti tempat regular_opening_hours
, price_level
, dan pelanggan rating
.
Merujuk kolom apa pun dalam set data yang ditentukan oleh skema set data untuk negara yang Anda minati. Skema set data untuk setiap negara terdiri dari dua bagian:
- Skema inti yang umum untuk set data semua negara.
- Skema khusus negara yang menentukan komponen skema khusus untuk negara tersebut.
Misalnya, kueri Anda dapat menyertakan klausa WHERE
yang menentukan kriteria
pemfilteran untuk kueri. Dalam contoh berikut, Anda menampilkan data agregasi
untuk tempat berjenis restaurant
dengan business_status
OPERATIONAL
, yang
memiliki rating
lebih besar dari atau sama dengan 4.0, dan dengan allows_dogs
ditetapkan ke
true
:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us___sample.places_sample` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000) AND 'restaurant' IN UNNEST(types) AND business_status = "OPERATIONAL" AND rating >= 4.0 AND allows_dogs = true
Kueri berikutnya menampilkan hasil untuk tempat yang memiliki setidaknya delapan SPKLU:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us___sample.places_sample` WHERE ev_charge_options.connector_count > 8;
Memfilter berdasarkan jenis utama tempat dan jenis tempat
Setiap tempat dalam set data dapat memiliki:
Satu jenis utama yang terkait dengannya dari jenis yang ditentukan oleh Jenis tempat. Misalnya, jenis utama dapat berupa
mexican_restaurant
atausteak_house
. Gunakanprimary_type
dalam kueri untuk memfilter hasil berdasarkan jenis utama suatu tempat.Beberapa nilai jenis yang terkait dengannya dari jenis yang ditentukan oleh Jenis tempat. Misalnya, restoran mungkin memiliki jenis berikut:
seafood_restaurant
,restaurant
,food
,point_of_interest
,establishment
. Gunakantypes
dalam kueri untuk memfilter hasil pada daftar jenis yang terkait dengan tempat.
Kueri berikut menampilkan hasil untuk semua tempat dengan jenis utama bar
tetapi juga berfungsi sebagai restaurant
:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us___sample.places_sample` WHERE 'restaurant' IN UNNEST(types) AND 'bar' = primary_type
Memfilter nilai data standar
Banyak kolom set data memiliki nilai yang telah ditentukan sebelumnya. Contoh:
Kolom
price_level
mendukung nilai standar berikut:PRICE_LEVEL_FREE
PRICE_LEVEL_INEXPENSIVE
PRICE_LEVEL_MODERATE
PRICE_LEVEL_EXPENSIVE
PRICE_LEVEL_VERY_EXPENSIVE
Kolom
business_status
mendukung nilai standar berikut:OPERATIONAL
CLOSED_TEMPORARILY
CLOSED_PERMANENTLY
Dalam contoh ini, kueri menampilkan jumlah semua restoran dengan
business_status
OPERATIONAL
dalam radius 1.000 meter dari Empire
State Building di New York City:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us___sample.places_sample` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000) AND business_status = "OPERATIONAL" AND 'restaurant' IN UNNEST(types)
Memfilter menurut jam operasional
Dalam contoh ini, tampilkan jumlah semua tempat di area geografis dengan happy hour pada hari Jumat:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us___sample.places_sample`, UNNEST(regular_opening_hours_happy_hour.friday) AS friday_hours WHERE '17:00:00' BETWEEN friday_hours.start_time AND friday_hours.end_time AND ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000);
Menampilkan grup hasil
Kueri yang ditampilkan sejauh ini menampilkan satu baris dalam hasil yang berisi jumlah agregasi untuk kueri. Anda juga dapat menggunakan operator GROUP BY
untuk menampilkan beberapa baris dalam respons berdasarkan kriteria pengelompokan.
Misalnya, kueri berikut menampilkan hasil yang dikelompokkan menurut jenis utama setiap tempat di area penelusuran:
SELECT WITH AGGREGATION_THRESHOLD primary_type, COUNT(*) AS count FROM `PROJECT_NAME.places_insights___us___sample.places_sample` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.99992071622756, 40.71818785986936), point, 1000) GROUP BY primary_type
Gambar berikut menunjukkan contoh output untuk kueri ini:
Dalam contoh ini, Anda menentukan tabel lokasi. Untuk setiap lokasi, Anda kemudian menghitung jumlah restoran terdekat, yaitu yang berada dalam jarak 1.000 meter:
WITH my_locations AS ( SELECT 'Location 1' AS name, ST_GEOGPOINT(-74.00776440888504, 40.70932825380786) AS location UNION ALL SELECT 'Location 2' AS name, ST_GEOGPOINT(-73.98257192833559, 40.750738934863215) AS location UNION ALL SELECT 'Location 3' AS name, ST_GEOGPOINT(-73.94701794263223, 40.80792954838445) AS location ) SELECT WITH AGGREGATION_THRESHOLD l.name, COUNT(*) as count FROM `PROJECT_NAME.places_insights___us___sample_sample` p JOIN my_locations l ON ST_DWITHIN(l.location, p.point, 1000) WHERE primary_type = "restaurant" AND business_status = "OPERATIONAL" GROUP BY l.name
Gambar berikut menunjukkan contoh output untuk kueri ini: