PLACES_COUNT
함수는 지정된 검색 영역과 검색 필터를 기반으로 장소의 단일 개수 값을 반환합니다. PLACES_COUNT
함수에 검색 영역을 지정해야 하며, 필요에 따라 장소 유형, 영업 상태, 가격대 등 추가 필터 매개변수를 지정할 수 있습니다.
PLACES_COUNT
함수는 단일 값을 반환하므로 SELECT
절을 사용하여 호출합니다.
입력 매개변수:
반환:
INT64
으로 된 단일count
값입니다.
예: 검색 반경 내 장소 수 계산
가장 간단한 PLACES_COUNT
함수 호출은 지리적 영역에 있는 모든 장소의 단일 개수를 반환합니다. 이 예에서는 엠파이어 스테이트 빌딩에서 1, 000미터 이내에 있는 모든 영업 중인 장소의 수를 반환합니다.
이 예에서는 BigQuery ST_GEOGPOINT
함수를 사용하여 점에서 GEOGRAPHY
값을 반환합니다.
SELECT `places_insights___us___sample.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 `places_insights___us___sample.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 `places_insights___us___sample.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 `places_insights___us___sample.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 `places_insights___us___sample.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, `places_insights___us___sample.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, `places_insights___us___sample.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, `places_insights___us___sample.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, `places_insights___us___sample.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, `places_insights___us___sample.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