Truy vấn số lượng địa điểm yêu thích theo loại địa điểm

Hàm PLACES_COUNT_PER_TYPE_V2 trả về một bảng BigQuery chứa số lượng địa điểm và mã địa điểm mẫu, được phân tích theo loại địa điểm, cho nhiều vị trí địa lý đầu vào. Hàm này được thiết kế để xử lý hàng loạt một cách hiệu quả bằng cách chấp nhận một tham số bảng đầu vào về địa lý. Bạn cung cấp các vị trí địa lý thông qua một bảng đầu vào và chỉ định các loại địa điểm dưới dạng một mảng.

Cú pháp

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

Thông số

  • PROJECT_NAME: Tên dự án trên đám mây của bạn trên Google Cloud.
  • LINKED_DATASET_NAME: Tên của tập dữ liệu BigQuery chứa các hàm Thông tin chi tiết về địa điểm (ví dụ: places_insights___us).
  • input_geographies: Bảng BigQuery chứa các khu vực địa lý cần phân tích. Bảng này phải có các cột sau:
    • geo_id (STRING): Giá trị nhận dạng duy nhất cho từng khu vực địa lý.
    • geo (GEOGRAPHY): Đối tượng GEOGRAPHY của BigQuery đại diện cho khu vực. Đây có thể là một điểm, đa giác hoặc loại địa lý khác.
  • target_types (ARRAY<STRING>): Một mảng gồm các chuỗi loại địa điểm mà bạn muốn nhận số lượng. Địa điểm sẽ được tính nếu địa điểm đó khớp với bất kỳ loại nào được liệt kê trong mảng types của địa điểm đó, chứ không chỉ primary_type.
  • filters (JSON): Một đối tượng JSON chứa các cặp khoá-giá trị để lọc thêm các địa điểm. Xem Tham số bộ lọc.

Giản đồ bảng đầu ra

Hàm PLACES_COUNT_PER_TYPE_V2 trả về một bảng có các cột sau:

Tên cột Loại dữ liệu Mô tả
geo_id STRING Giá trị nhận dạng duy nhất của địa lý đầu vào, từ bảng input_geographies.
input_geography GEOGRAPHY Đối tượng GEOGRAPHY ban đầu trong bảng input_geographies.
place_type STRING Loại địa điểm mà hàng này đại diện trong mảng target_types.
place_count INTEGER Số lượng địa điểm phù hợp với place_type và các bộ lọc khác trong hoặc gần khu vực địa lý.
sample_place_ids ARRAY<STRING> Một mảng gồm tối đa 250 mã địa điểm phù hợp với tiêu chí cho loại và vị trí địa lý này.

Đầu ra sẽ chứa một hàng cho mỗi tổ hợp geo_idplace_type được chỉ định trong mảng target_types, ngay cả khi số lượng bằng 0.

Cách hoạt động

Hàm này xử lý từng địa điểm được cung cấp trong bảng input_geographies. Đối với mỗi khu vực địa lý, phương thức này sẽ đếm những địa điểm khớp với bất kỳ loại nào được liệt kê trong mảng target_types và cũng đáp ứng tất cả các điều kiện trong đối tượng JSON filters. Kết quả được tổng hợp và phân tích theo từng geo_id và từng loại trong target_types.

Ví dụ: Đếm số lượng các loại quán ăn ở các quận của Thành phố New York

Ví dụ này tạo một bảng số lượng cho các loại "nhà hàng", "quán cà phê" và "quán bar" trên 3 quận của Thành phố New York.

SELECT geo_id, input_geography, place_type, place_count
FROM `PROJECT_NAME.places_insights___us.PLACES_COUNT_PER_TYPE_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")
  ),
  ['restaurant', 'cafe', 'bar'],  -- target_types
  JSON_OBJECT(
      'business_status', ['OPERATIONAL']
  )
);

Kết quả sẽ là một bảng có 9 hàng (3 quận * 3 loại). Mỗi hàng sẽ cho biết số lượng cơ sở "nhà hàng", "quán cà phê" hoặc "quán bar" trong mỗi quận. Bạn cũng có thể thêm mã địa điểm mẫu nếu thêm mã này vào câu lệnh SELECT.

Kết quả cho hàm Đếm số địa điểm theo loại ở các quận của New York.

Lợi ích của việc sử dụng PLACES_COUNT_PER_TYPE_V2

PLACES_COUNT_PER_TYPE_V2 mang lại một số lợi ích chính, đặc biệt là khi so sánh với hàm PLACES_COUNT_PER_TYPE cũ:

  • Xử lý hàng loạt các khu vực địa lý: Không giống như PLACES_COUNT_PER_TYPE (chỉ xử lý một khu vực địa lý tại một thời điểm), PLACES_COUNT_PER_TYPE_V2 chấp nhận một TABLE các khu vực địa lý đầu vào. Điều này cho phép bạn phân tích và nhận số lượng theo từng loại trên nhiều khu vực địa lý (điểm, đa giác) trong một truy vấn duy nhất, thay vì thực hiện nhiều lệnh gọi hàm.
  • Nâng cao hiệu suất và khả năng mở rộng: Bằng cách lấy dữ liệu đầu vào là bảng, PLACES_COUNT_PER_TYPE_V2 có thể tận dụng các phép kết hợp không gian địa lý được tối ưu hoá của BigQuery và khả năng xử lý song song trên tất cả các khu vực địa lý được cung cấp cùng một lúc. Điều này giúp cải thiện đáng kể hiệu suất và khả năng mở rộng khi xử lý một số lượng lớn các vị trí địa lý.
  • Bao gồm số lượng bằng 0: Trả về các hàng có số lượng bằng 0 cho những loại không có trong một khu vực cụ thể trong lô, đảm bảo một tập hợp kết quả đầy đủ cho tất cả các tổ hợp loại-địa lý.
  • Thông tin tổng quan nhanh về dữ liệu trước đây: Truy vấn dữ liệu về số lượng địa điểm của một tháng cụ thể bằng cách sử dụng bộ lọc snapshot_date (không bắt buộc).

Ví dụ: Truy vấn số lượng POI trong quá khứ theo loại bằng các bộ lọc cụ thể

Ví dụ này minh hoạ cách tìm số lượng cho các loại địa điểm cụ thể, chẳng hạn như trạm sạc xe điện, bằng cách sử dụng tham số snapshot_date để truy xuất số lượng của một tháng trước. Bộ lọc này áp dụng các bộ lọc bổ sung cho regular_opening_hours để chỉ tra cứu những địa điểm mở cửa cả ngày vào các ngày cuối tuần và khả năng sạc xe điện (có ít nhất 10 giắc cắm) do min_ev_charge_connector_count chỉ định.

SELECT *
FROM `PROJECT_NAME.places_insights___us.PLACES_COUNT_PER_TYPE_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")
  ),
  ['electric_vehicle_charging_station'], -- target_types array
  JSON_OBJECT(
    'geography_radius', 10000,
    'snapshot_date', '2026-01', -- Target snapshot month (YYYY-MM)
    'min_ev_charge_connector_count', 10, -- Look for a min amount of chargers
    'regular_opening_hours', JSON_OBJECT(
      'saturday', [JSON_OBJECT('start_time', '00:00', 'end_time', '23:59')], 'sunday', [JSON_OBJECT('start_time', '00:00', 'end_time', '23:59')]
    )
  )
);