Places Insights verilerine erişmek için BigQuery'de SQL sorguları yazarsınız. Bu sorgular, yerlerle ilgili toplu analizler döndürür. Sonuçlar, sorguda belirtilen arama ölçütleri için veri kümesinden döndürülür.
Sorgu şartları
Sorgudaki SELECT
ifadesi WITH AGGREGATION_THRESHOLD
içermeli ve veri kümesini belirtmelidir. Örneğin:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample`
Bu örnekte, ABD için FROM
veri kümesini belirtmek üzere places_insights___us___sample.places_sample
kullanıyorsunuz.
Konum kısıtlaması belirtme
Önceki sorguda herhangi bir konum kısıtlaması belirtilmediğini unutmayın. Bu nedenle, veri toplama işlemi tüm veri kümesine uygulanır. Genellikle aşağıda gösterildiği gibi bir konum kısıtlaması belirtirsiniz:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000)
Bu örnekte sorgunuz, New York'taki Empire State Binası'nı merkez alan ve 1.000 metre yarıçaplı bir hedef kısıtlama belirtiyor.
Arama alanını belirtmek için poligon kullanabilirsiniz. Çokgen kullanırken çokgenin noktaları, çokgendeki ilk noktanın son noktayla aynı olduğu kapalı bir döngü tanımlamalıdır:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `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)
Bir sonraki örnekte, arama alanını bağlı noktalarla oluşturulan bir çizgi kullanarak tanımlıyorsunuz. Çizgi, Routes API tarafından hesaplanan bir seyahat rotasına benzer. Rota bir araç, bisiklet veya yaya için olabilir:
DECLARE route GEOGRAPHY; SET route = ST_GEOGFROMTEXT("""LINESTRING(-73.98903537033028 40.73655649223003, -73.93580216278471 40.80955538843361)"""); SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample` WHERE ST_DWITHIN(route, point, 100)
Bu örnekte, arama yarıçapını çizginin etrafında 100 metre olarak ayarlarsınız.
Yer veri kümesi alanlarına göre filtreleme
Aramanızı veri kümesi şeması tarafından tanımlanan alanlara göre hassaslaştırın. Sonuçları yer regular_opening_hours
, price_level
ve müşteri rating
gibi veri kümesi alanlarına göre filtreleyin.
İlgilendiğiniz ülke için veri kümesi şeması tarafından tanımlanan veri kümesindeki tüm alanlara referans verin. Her ülkenin veri kümesi şeması iki bölümden oluşur:
- Tüm ülkelerdeki veri kümeleri için ortak olan çekirdek şema.
- İlgili ülkeye özgü şema bileşenlerini tanımlayan bir ülkeye özgü şema.
Örneğin, sorgunuzda sorgu için filtreleme ölçütlerini tanımlayan bir WHERE
koşulu olabilir. Aşağıdaki örnekte, restaurant
türündeki yerler için toplama verileri döndürüyorsunuz. Bu yerlerin OPERATIONAL
değeri business_status
, rating
değeri 4, 0'a eşit veya daha büyük ve allows_dogs
değeri true
olarak ayarlanmış.
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `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
Aşağıdaki sorgu, en az sekiz elektrikli araç şarj istasyonu olan yerlerle ilgili sonuçlar döndürür:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample` WHERE ev_charge_options.connector_count > 8;
Yer birincil türüne ve yer türüne göre filtreleme
Veri kümesindeki her yer şunlara sahip olabilir:
Tablo A'da tanımlanan türlerden biriyle ilişkili tek bir birincil tür. Örneğin, birincil tür
mexican_restaurant
veyasteak_house
olabilir. Bir sorgudaprimary_type
kullanarak sonuçları bir yerin birincil türüne göre filtreleyin.Tablo A tarafından tanımlanan türlerden birden fazla tür değeri ile ilişkilendirilmiş. Örneğin, bir restoranın şu türleri olabilir:
seafood_restaurant
,restaurant
,food
,point_of_interest
,establishment
. Bir sorgudatypes
kullanarak yerle ilişkili türler listesindeki sonuçları filtreleyin.
Aşağıdaki sorgu, birincil türü bar
olan ancak restaurant
olarak da işlev gören tüm yerlerle ilgili sonuçlar döndürür:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample` WHERE 'restaurant' IN UNNEST(types) AND 'bar' = primary_type
Önceden tanımlanmış veri değerlerine göre filtreleme
Birçok veri kümesi alanında önceden tanımlanmış değerler bulunur. Örneğin:
price_level
alanı aşağıdaki önceden tanımlanmış değerleri destekler:PRICE_LEVEL_FREE
PRICE_LEVEL_INEXPENSIVE
PRICE_LEVEL_MODERATE
PRICE_LEVEL_EXPENSIVE
PRICE_LEVEL_VERY_EXPENSIVE
business_status
alanı aşağıdaki önceden tanımlanmış değerleri destekler:OPERATIONAL
CLOSED_TEMPORARILY
CLOSED_PERMANENTLY
Bu örnekte sorgu, New York City'deki Empire State Binası'nın 1.000 metre yarıçapında business_status
değeri OPERATIONAL
olan tüm restoranların sayısını döndürür:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `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)
Çalışma saatlerine göre filtreleme
Bu örnekte, bir coğrafi bölgedeki cuma günleri happy hour'ı olan tüm yerlerin sayısını döndürün:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `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);
Toplama işlevi kullanma
Aşağıdaki örnekte, desteklenen BigQuery toplama işlevleri gösterilmektedir. Bu sorgu, New York City'deki Empire State Binası'nın 1.000 metre yarıçapındaki tüm yerlerin puanlarını toplayarak puan istatistikleri oluşturur:
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 `places_insights___us___sample.places_sample` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000) AND business_status = "OPERATIONAL"
Sonuç gruplarını döndürme
Şu ana kadar gösterilen sorgular, sonuçta sorgunun toplama sayısını içeren tek bir satır döndürür. Gruplandırma ölçütlerine göre yanıtta birden fazla satır döndürmek için GROUP BY
operatörünü de kullanabilirsiniz.
Örneğin, aşağıdaki sorgu, arama alanındaki her yerin birincil türüne göre gruplandırılmış sonuçlar döndürür:
SELECT WITH AGGREGATION_THRESHOLD primary_type, COUNT(*) AS count FROM `places_insights___us___sample.places_sample` WHERE ST_DWITHIN(ST_GEOGPOINT(-73.99992071622756, 40.71818785986936), point, 1000) GROUP BY primary_type
Aşağıdaki resimde bu sorguya ilişkin örnek bir çıkış gösterilmektedir:
Bu örnekte, konumların bulunduğu bir tablo tanımlıyorsunuz. Ardından, her konum için yakındaki restoranların sayısını (1.000 metre içindeki restoranlar) hesaplarsınız:
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 `places_insights___us___sample.places_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
Aşağıdaki resimde bu sorguya ilişkin örnek bir çıkış gösterilmektedir: