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 表。此表必须包含以下列: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_id、input_geography、place_count 和 sample_place_ids。

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