Функция PLACES_COUNT
возвращает количество мест на основе указанной области поиска и фильтров поиска. Необходимо указать область поиска для функции PLACES_COUNT
, а также можно указать дополнительные параметры фильтра, такие как тип места, статус работы, уровень цен и другие.
Поскольку функция PLACES_COUNT
возвращает одно значение, вызовите ее с помощью предложения SELECT
.
Входные параметры:
Обязательно : параметр фильтра
geography
, задающий область поиска. Параметрgeography
принимает значение, определяемое типом данных BigQueryGEOGRAPHY
, который поддерживает точки, линии и многоугольники.Необязательно : дополнительные параметры фильтра для уточнения поиска.
Возврат:
- Одно значение
count
в форматеINT64
.
- Одно значение
Пример: рассчитать количество мест в радиусе поиска
Простейший вызов функции PLACES_COUNT
возвращает единое количество всех мест в заданной географической области. В этом примере возвращается количество всех действующих мест в радиусе 1000 метров от Эмпайр-стейт-билдинг.
В этом примере функция 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;
Ответ содержит один отсчет:
Более типичный вызов применяет фильтры к области поиска. В следующем примере фильтры используются для ограничения поиска, чтобы возвращать только следующее количество:
- Места типа
restaurant
с минимальным рейтингом 3 - Уровень цен недорогой или средний
- В настоящее время действует
- Позволяет собакам
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 метров вокруг неё. Эта линия аналогична маршруту, рассчитанному с помощью 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