PLACES_COUNT işlevi

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 BigQuery GEOGRAPHY 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 bir count 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:

New York City'deki yer sayısı işlevinin sonuçları.

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:

İstanbul'daki restoranların yer sayısı işlevini filtreleme sonuçları.

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:

New York City'nin bir görüntü alanında restoran yer sayısı işlevini filtreleme sonuçları.

Ö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ı:

New York'ta bir hat boyunca restoran yer sayısı işlevini filtreleme sonuçları.

Ö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:

Restoranları fiyat düzeyine göre filtrelemek için birleştirilmiş sonuçlar.

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