PLACES_COUNT 함수

PLACES_COUNT 함수는 지정된 검색 영역과 검색 필터를 기반으로 장소의 단일 개수 값을 반환합니다. PLACES_COUNT 함수에 검색 영역을 지정해야 하며, 필요에 따라 장소 유형, 영업 상태, 가격대 등 추가 필터 매개변수를 지정할 수 있습니다.

PLACES_COUNT 함수는 단일 값을 반환하므로 SELECT 절을 사용하여 호출합니다.

  • 입력 매개변수:

    • 필수: 검색 영역을 지정하는 geography 필터 매개변수입니다. geography 매개변수는 점, 선, 다각형을 지원하는 BigQuery GEOGRAPHY 데이터 유형으로 정의된 값을 사용합니다.

    • 선택사항: 검색을 상세검색하기 위한 추가 필터 매개변수입니다.

  • 반환:

    • INT64으로 된 단일 count 값입니다.

예: 검색 반경 내 장소 수 계산

가장 간단한 PLACES_COUNT 함수 호출은 지리적 영역에 있는 모든 장소의 단일 개수를 반환합니다. 이 예에서는 엠파이어 스테이트 빌딩에서 1, 000미터 이내에 있는 모든 영업 중인 장소의 수를 반환합니다.

이 예에서는 BigQuery ST_GEOGPOINT 함수를 사용하여 점에서 GEOGRAPHY 값을 반환합니다.

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;

응답에는 단일 개수가 포함됩니다.

뉴욕시의 장소 수 함수 결과

더 일반적인 호출은 검색 영역에 필터를 적용합니다. 다음 예에서는 필터를 사용하여 검색을 제한하여 다음 개수만 반환합니다.

  • 최소 평점이 3인 restaurant 유형의 장소
  • 저렴 또는 중간 가격대
  • 현재 운영 중
  • 반려견 동반 가능
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;

필터링된 응답:

뉴욕시에서 음식점 장소 수 함수를 필터링한 결과

장소 데이터 세트 쿼리는 최소 개수 기준점 5를 적용합니다. 위치 개수 함수의 장점 중 하나는 0을 포함한 모든 개수를 반환할 수 있다는 것입니다. 예를 들어 다음 호출은 1을 반환합니다.

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;

예: 다각형을 사용하여 음식점 수 계산

다각형을 사용하여 검색 영역을 지정할 수 있습니다. 다각형을 사용하는 경우 다각형의 점은 다각형의 첫 번째 점이 마지막 점과 동일한 닫힌 루프를 정의해야 합니다.

이 예에서는 BigQuery ST_GEOGFROMTEXT 함수를 사용하여 다각형에서 GEOGRAPHY 값을 반환합니다.

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;

표시 영역의 응답은 다음과 같습니다.

뉴욕시의 뷰포트에서 레스토랑 장소 수 필터링 기능의 결과입니다.

예: 선을 사용하여 음식점 수 계산

다음 예에서는 연결된 점의 선을 사용하여 검색 영역을 정의하고 선 주변의 검색 반경을 100미터로 설정합니다. 이 선은 Routes API에서 계산한 이동 경로와 유사합니다. 경로는 차량, 자전거 또는 보행자용일 수 있습니다.

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;

다음과 같은 대답이 표시됩니다.

뉴욕시의 선을 따라 레스토랑 장소 수 함수를 필터링한 결과

예: 여러 호출의 결과 결합

PLACES_COUNT 함수에 대한 여러 호출 결과를 결합할 수 있습니다. 예를 들어 특정 지역 내에서 다음 가격대의 음식점 수를 보여주는 단일 결과를 원합니다.

  • PRICE_LEVEL_INEXPENSIVE
  • PRICE_LEVEL_MODERATE
  • PRICE_LEVEL_EXPENSIVE
  • PRICE_LEVEL_VERY_EXPENSIVE"

이 예에서는 각 가격 수준에 대해 PLACES_COUNT 함수를 호출하는 루프를 만들고 각 호출의 결과를 임시 테이블에 삽입합니다. 그런 다음 임시 테이블을 쿼리하여 결과를 표시합니다.

-- 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;

결합된 대답:

가격 수준별로 음식점을 필터링한 결합된 결과입니다.

또 다른 방법은 UNION ALL 명령어를 사용하여 여러 SELECT 문의 결과를 결합하는 것입니다. 다음 예시는 이전 예시와 동일한 결과를 보여줍니다.

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