查询 POI 数量

PLACES_COUNT_V2 函数会返回一个 BigQuery 表,其中包含基于指定过滤条件的多个输入地理位置的地点数量和示例地点 ID。此函数旨在通过接受地理位置的输入表参数来高效地进行批量处理,从而让您能够通过输入表提供地理位置,在单个查询中分析多个感兴趣的区域。

语法

SELECT * FROM `PROJECT_NAME.LINKED_DATASET_NAME.PLACES_COUNT_V2`(
  TABLE input_geographies,
  filters
)

参数

  • PROJECT_NAME:您的 Google Cloud 项目的名称。
  • LINKED_DATASET_NAME:包含地点数据分析函数的 BigQuery 数据集的名称(例如 places_insights___us)。
  • input_geographies:包含要分析的地理位置的 BigQuery 表。此表必须包含以下列:
    • geo_id (STRING):每个地理位置的唯一标识符。
    • geo (GEOGRAPHY):表示相应区域的 BigQuery GEOGRAPHY 对象。可以是点、多边形或其他地理位置类型。
  • filters (JSON):一个 JSON 对象,包含用于过滤地点的键值对。请参阅过滤参数

输出表架构

PLACES_COUNT_V2 函数会返回包含以下列的表:

列名称 数据类型 说明
geo_id STRING 输入地理位置的唯一标识符,来自 input_geographies 表。
input_geography GEOGRAPHY input_geographies 表中的原始地理位置对象。
place_count INTEGER 与过滤条件匹配的地点总数。
sample_place_ids ARRAY<STRING> 一个数组,其中包含最多 250 个符合条件的地点 ID。

运作方式

该函数会处理 input_geographies 表格中的每一行。对于每个 geo 对象,它会统计位于地理位置内(或位于 geo 内,如果 geo 是点且半径在 filters 中指定)的地点数量。该统计结果仅包含符合 filters JSON 对象中定义的所有条件的地点。geography_radius

示例:计算纽约市三个县的餐厅数量

此示例生成了一个表格,其中包含纽约市三个县的营业餐厅数量。

此示例使用 United States Census Bureau Data BigQuery 公开数据集来获取纽约市三个县的边界:“皇后区”“国王区”和“纽约区”。每个县的边界都包含在 county_geom 列中。

我们首先创建一个临时表 new_york_counties,用于保存每个县的 geo_id 和简化的 GEOGRAPHY

SELECT *
FROM `PROJECT_NAME.places_insights___us.PLACES_COUNT_V2`(
  (
    SELECT
      county_name AS geo_id,
      ST_SIMPLIFY(county_geom, 100) AS geo
    FROM
      `bigquery-public-data.geo_us_boundaries.counties`
    WHERE
      state_fips_code = "36"  -- New York State
      AND county_name IN ("Queens", "Kings", "New York")
  ),
  JSON_OBJECT(
      'types', ["restaurant"],
      'business_status', ['OPERATIONAL']
  )
);

响应表将包含三行,每个县一行,显示营业餐厅的 geo_idinput_geographyplace_countsample_place_ids

纽约各县的 Places Count 函数结果。

使用 PLACES_COUNT_V2 的好处

PLACES_COUNTPLACES_COUNT_PER_GEO 相比,PLACES_COUNT_V2 具有显著优势:

  • 批量处理:通过在表格中提供多个地理位置输入,在单个查询中高效分析数千个自定义地理位置。
  • 性能:利用 BigQuery 优化的地理空间联接,可显著提高大型数据集的处理速度。
  • 可伸缩性:旨在处理大量输入地理位置,不受单个 JSON 参数大小的限制。
  • 包含零计数PLACES_COUNT_V2 会为输入表中提供的每个 geo_id 返回一行。如果没有任何地点符合给定地理位置的条件,则 place_count 将为 0。这样可确保每个输入区域都有结果,以便您了解哪些地点没有结果。
  • 历史快照:使用可选的 snapshot_date 过滤条件查询特定月份的地点数量数据。

示例:查询上个月的 POI 数量

此示例演示了如何使用 snapshot_date 参数查询特定位置的历史 POI 数量。它会过滤结果,以查找具有 max_ev_max_charge_rate_kw 指定的电动车辆充电设施以及特定 regular_opening_hours 的地点。

SELECT *
FROM `PROJECT_NAME.places_insights___us.PLACES_COUNT_V2`(
   (
    SELECT
      county_name AS geo_id,
      ST_SIMPLIFY(county_geom, 100) AS geo
    FROM
      `bigquery-public-data.geo_us_boundaries.counties`
    WHERE
      state_fips_code = "36"  -- New York State
      AND county_name IN ("Queens", "Kings", "New York")
  ),
  JSON_OBJECT(
    'geography_radius', 5000,
    'snapshot_date', '2026-01', -- Target snapshot month (YYYY-MM)
    'max_ev_max_charge_rate_kw', 30.0, -- Filter by EV charge rate in kW
    'regular_opening_hours', JSON_OBJECT(
      'monday', [JSON_OBJECT('start_time', '09:00', 'end_time', '12:00')]
    )
  )
);