查询 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:包含地点数据分析函数(例如 places_insights___us)的 BigQuery 数据集的名称。
  • 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 表的原始 GEOGRAPHY 对象。
place_count INTEGER 与过滤条件匹配的地点总数。
sample_place_ids ARRAY<STRING> 一个最多包含 250 个符合条件的地点 ID 的数组。

运作方式

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

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

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

此示例使用美国人口普查局 数据 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_COUNT_V2PLACES_COUNTPLACES_COUNT_PER_GEO 相比,具有显著优势:

  • 批量处理 :通过在表中提供多个地理位置输入,在单个查询中高效分析数千个自定义地理位置。
  • 性能:利用 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')]
    )
  )
);