PLACES_COUNT
işlevi, belirtilen arama alanına ve arama filtrelerine göre yerlerin tek bir sayı değerini döndürür. PLACES_COUNT
işlevinde arama alanını belirtmeniz gerekir. İsteğe bağlı olarak yer türü, çalışma durumu, fiyat düzeyi gibi ek filtre parametreleri de belirtebilirsiniz.
PLACES_COUNT
işlevi tek bir değer döndürdüğünden, işlevi SELECT
ifadesiyle çağırın.
Giriş parametreleri:
Zorunlu: Arama alanını belirten
geography
filtre parametresi.geography
parametresi, noktaları, çizgi dizilerini ve poligonları destekleyen BigQueryGEOGRAPHY
veri türü tarafından tanımlanan bir değer alır.İsteğe bağlı: Aramanızı daraltmak için ek filtre parametreleri.
Şunu döndürür:
INT64
olarak tek bircount
değeri.
Örnek: Arama yarıçapındaki yerlerin sayısını hesaplama
En basit PLACES_COUNT
işlev çağrısı, coğrafi bölgedeki tüm yerlerin tek bir sayısını döndürür. Bu örnekte, Empire State binasının 1.000 metre yarıçapındaki tüm operasyonel yerlerin sayısını döndürüyorsunuz.
Bu örnekte, bir noktadan GEOGRAPHY
değeri döndürmek için BigQuery ST_GEOGPOINT
işlevi kullanılmaktadır.
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;
Yanıtta tek bir sayı var:
Daha tipik bir çağrı, arama alanına filtreler uygular. Sonraki örnekte, aramayı yalnızca aşağıdakilerin sayısını döndürecek şekilde sınırlamak için filtreler kullanılmaktadır:
- Minimum puanı 3 olan
restaurant
türündeki yerler - Ucuz veya orta fiyat seviyesi
- Şu anda çalışır durumda
- Köpek kabul ediliyor
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;
Filtrelenmiş yanıt:
Yer veri kümesi sorgularında minimum 5 öğe eşiğinin zorunlu olduğunu unutmayın. Yer sayısı işlevlerinin avantajlarından biri, 0 dahil olmak üzere herhangi bir sayıyı döndürebilmeleridir. Örneğin, aşağıdaki çağrı 1 sayısını döndürür:
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;
Örnek: Çokgen kullanarak restoran sayısını hesaplama
Arama alanını belirtmek için poligon kullanabilirsiniz. Çokgen kullanırken çokgenin noktaları kapalı bir döngü tanımlamalıdır. Bu döngüde çokgendeki ilk nokta son noktayla aynı olmalıdır.
Bu örnekte, bir poligondan GEOGRAPHY
değeri döndürmek için BigQuery
ST_GEOGFROMTEXT
işlevi kullanılmaktadır.
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;
Görüntü alanıyla ilgili yanıt:
Örnek: Bir çizgiyi kullanarak restoran sayısını hesaplama
Bir sonraki örnekte, arama alanını, çizginin etrafında 100 metre arama yarıçapına sahip, bağlı noktalardan oluşan 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 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;
Satırın yanıtı:
Örnek: Birden fazla çağrının sonuçlarını birleştirme
PLACES_COUNT
işlevine yapılan birden fazla çağrının sonuçlarını birleştirebilirsiniz.
Örneğin, belirli bir bölgedeki aşağıdaki fiyat seviyelerine sahip restoran sayısını gösteren tek bir sonuç istiyorsunuz:
PRICE_LEVEL_INEXPENSIVE
PRICE_LEVEL_MODERATE
PRICE_LEVEL_EXPENSIVE
PRICE_LEVEL_VERY_EXPENSIVE"
Bu örnekte, her fiyat düzeyi için PLACES_COUNT
işlevini çağırmak üzere bir döngü oluşturur ve her çağrının sonuçlarını geçici bir tabloya eklersiniz. Ardından, sonuçları görüntülemek için geçici tabloyu sorgularsınız:
-- 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;
Birleştirilmiş yanıt:
Başka bir seçenek de birden fazla SELECT
ifadesinin sonuçlarını birleştirmek için UNION ALL
komutunu kullanmaktır. Aşağıdaki örnekte, önceki örnekteki sonuçlar gösterilmektedir:
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