場所のタイプ別にスポットの数をクエリする

PLACES_COUNT_PER_TYPE_V2 関数は、複数の入力地域について、場所の種類別に分類された場所の数とサンプルのプレイス ID を含む BigQuery テーブルを返します。この関数は、地域の入力テーブル パラメータを受け入れることで、効率的なバッチ処理を行うように設計されています。入力テーブルで地域を指定し、場所タイプを配列として指定します。

構文

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

パラメータ

  • PROJECT_NAME: Google Cloud Platform プロジェクトの名前です。
  • LINKED_DATASET_NAME: Places Insights 関数を含む BigQuery データセットの名前(例: places_insights___us)。
  • input_geographies: 分析する地域を含む BigQuery テーブル。このテーブルには、次の列を含める必要があります。
    • geo_id(STRING): 各地域の固有識別子。
    • geo(GEOGRAPHY): エリアを表す BigQuery GEOGRAPHY オブジェクト。これは、ポイント、ポリゴン、またはその他の地理タイプです。
  • target_types(ARRAY<STRING>): 件数を取得する場所タイプの文字列の配列。primary_type だけでなく、types 配列にリストされているタイプのいずれかに一致する場所がカウントされます。
  • filters(JSON): 場所の追加フィルタリング用の Key-Value ペアを含む JSON オブジェクト。フィルタ パラメータをご覧ください。

出力テーブル スキーマ

PLACES_COUNT_PER_TYPE_V2 関数は、次の列を含むテーブルを返します。

列名 データ型 説明
geo_id STRING 入力された地域の固有識別子(input_geographies テーブルから取得)。
input_geography GEOGRAPHY input_geographies テーブルの元の GEOGRAPHY オブジェクト。
place_type STRING この行が表す target_types 配列のプレイスタイプ。
place_count INTEGER 地域内または地域付近で place_type などのフィルタに一致する場所の数。
sample_place_ids ARRAY<STRING> このタイプと地域の条件に一致する最大 250 個のプレイス ID の配列。

出力には、target_types 配列で指定された geo_id と place_type の組み合わせごとに、カウントがゼロであっても行が含まれます。

仕組み

この関数は、input_geographies テーブルで指定された各地域を処理します。地域ごとに、target_types 配列にリストされているタイプのいずれかに一致し、filters JSON オブジェクトのすべての条件を満たす場所をカウントします。結果は、geo_id ごと、および target_types のタイプごとに集計され、分類されます。

例: ニューヨーク市の郡にあるさまざまな種類の飲食店の数をカウントする

この例では、ニューヨーク市の 3 つの郡における「レストラン」、「カフェ」、「バー」のタイプのカウントのテーブルを生成します。

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']
  )
);

結果は 9 行(3 つの郡 × 3 つのタイプ)のテーブルになります。各行には、各郡内の「レストラン」、「カフェ」、「バー」の数が表示されます。SELECT ステートメントに追加すれば、サンプルのプレイス ID を含めることもできます。

ニューヨーク州の郡におけるタイプ別のプレイス数の関数の結果。

PLACES_COUNT_PER_TYPE_V2 を使用するメリット

PLACES_COUNT_PER_TYPE_V2 には、特に古い PLACES_COUNT_PER_TYPE 関数と比較した場合に、いくつかの重要な利点があります。

  • 地域のバッチ処理: 一度に 1 つの地域を処理する PLACES_COUNT_PER_TYPE とは異なり、PLACES_COUNT_PER_TYPE_V2 は入力地域の TABLE を受け入れます。これにより、複数の関数呼び出しを行う代わりに、1 つのクエリで多数の地域(ポイント、ポリゴン)にわたるタイプ固有の数を分析して取得できます。
  • パフォーマンスとスケーラビリティの向上: テーブル入力を取得することで、PLACES_COUNT_PER_TYPE_V2 は BigQuery の最適化された地理空間結合と並列処理機能を、提供されたすべての地域で同時に利用できます。これにより、多数の地域を扱う場合のパフォーマンスが大幅に向上し、スケーラビリティが向上します。
  • ゼロカウントを含む: バッチ内の特定のエリアで見つからなかったタイプのカウントが 0 の行を返します。これにより、すべてのタイプと地域の組み合わせに対して完全な結果セットが返されます。
  • 過去のスナップショット: オプションの snapshot_date フィルタを使用して、特定の月の場所数データをクエリします。

例: 特定のフィルタを使用して、タイプ別に過去の POI 数をクエリする

この例では、snapshot_date パラメータを使用して過去 1 か月のカウントを取得し、EV 充電スタンドなどの特定の場所タイプのカウントを確認する方法を示します。regular_opening_hours に追加のフィルタを適用して、週末に終日営業している場所のみを検索し、min_ev_charge_connector_count で指定された EV 充電の利用可能性(少なくとも 10 個のコネクタが利用可能)を検索します。

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')]
    )
  )
);