PLACES_COUNT 함수

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

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

  • 입력 매개변수:

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

    • 선택 사항: 검색을 구체화하는 추가 필터 매개변수입니다.

  • 반환:

    • 단일 count 값을 INT64로 반환합니다.

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

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

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

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;

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

뉴욕시의 장소 수 함수 결과

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

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

필터링된 응답:

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

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

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;

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

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

이 예에서는 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 `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;

표시 영역의 응답:

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

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

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

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;

선의 응답:

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

예: 여러 호출의 결과 결합

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

결합된 응답:

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

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

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