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
geographyfiltre parametresi.geographyparametresi, noktaları, çizgi dizilerini ve poligonları destekleyen BigQueryGEOGRAPHYveri 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:
INT64olarak tek bircountdeğ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 `PROJECT_NAME.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
restauranttüründeki yerler - Ucuz veya orta fiyat seviyesi
- Şu anda çalışır durumda
- Köpek kabul ediliyor
SELECT `PROJECT_NAME.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 `PROJECT_NAME.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 `PROJECT_NAME.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 `PROJECT_NAME.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_INEXPENSIVEPRICE_LEVEL_MODERATEPRICE_LEVEL_EXPENSIVEPRICE_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, `PROJECT_NAME.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, `PROJECT_NAME.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, `PROJECT_NAME.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, `PROJECT_NAME.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, `PROJECT_NAME.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