Функция PLACES_COUNT

Функция PLACES_COUNT возвращает количество мест на основе указанной области поиска и фильтров поиска. Необходимо указать область поиска для функции PLACES_COUNT , а также можно указать дополнительные параметры фильтра, такие как тип места, статус работы, уровень цен и другие.

Поскольку функция PLACES_COUNT возвращает одно значение, вызовите ее с помощью предложения SELECT .

  • Входные параметры:

    • Обязательно : параметр фильтра geography , задающий область поиска. Параметр geography принимает значение, определяемое типом данных BigQuery GEOGRAPHY , который поддерживает точки, линии и многоугольники.

    • Необязательно : дополнительные параметры фильтра для уточнения поиска.

  • Возврат:

    • Одно значение 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;

Отфильтрованный ответ:

Результаты фильтрации функции Place 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;

Ответ для области просмотра:

Результаты фильтрации функции количества ресторанов Place 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;

Ответ на строку:

Результаты фильтрации функции количества ресторанов Place 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