Anzahl der POIs nach Ortstyp abfragen

Die Funktion PLACES_COUNT_PER_TYPE_V2 gibt eine BigQuery-Tabelle mit der Anzahl der Orte und Beispiel-Orts-IDs zurück, aufgeschlüsselt nach Ortstyp, für mehrere Eingabegeografien. Diese Funktion ist für die effiziente Batchverarbeitung konzipiert und akzeptiert einen Eingabetabellenparameter mit geografischen Einheiten. Sie geben die geografischen Einheiten über eine Eingabetabelle an und legen die Ortstypen als Array fest.

Syntax

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

Parameter

  • PROJECT_NAME ist der Name Ihres Google Cloud-Projekts.
  • LINKED_DATASET_NAME: Der Name des BigQuery-Datasets, das die Places Insights-Funktionen enthält (z.B. places_insights___us).
  • input_geographies: Eine BigQuery-Tabelle mit den zu analysierenden geografischen Einheiten. Diese Tabelle muss die folgenden Spalten enthalten:
    • geo_id (STRING): Eine eindeutige Kennung für jede geografische Einheit.
    • geo (GEOGRAPHY): Das BigQuery-GEOGRAPHY-Objekt, das das Gebiet darstellt. Dies kann ein Punkt, ein Polygon oder ein anderer Geografietyp sein.
  • target_types (ARRAY<STRING>): Ein Array von Strings für Ortstypen, für die Sie die Anzahl abrufen möchten. Orte werden gezählt, wenn sie mit einem der im Array types aufgeführten Typen übereinstimmen, nicht nur mit dem primary_type.
  • filters (JSON): Ein JSON-Objekt mit Schlüssel/Wert-Paaren für die zusätzliche Filterung der Orte. Siehe Filterparameter.

Schema der Ausgabetabelle

Die Funktion PLACES_COUNT_PER_TYPE_V2 gibt eine Tabelle mit den folgenden Spalten zurück:

Spaltenname Datentyp Beschreibung
geo_id STRING Die eindeutige Kennung für die Eingabegeografie aus der Tabelle input_geographies.
input_geography GEOGRAPHY Das ursprüngliche GEOGRAPHY-Objekt aus der Tabelle input_geographies.
place_type STRING Der Ortstyp aus dem target_types-Array, den diese Zeile darstellt.
place_count INTEGER Die Anzahl der Orte, die mit dem place_type und anderen Filtern innerhalb oder in der Nähe des geografischen Gebiets übereinstimmen.
sample_place_ids ARRAY<STRING> Ein Array mit bis zu 250 Orts-IDs, die den Kriterien für diesen Typ und diese Region entsprechen.

Die Ausgabe enthält eine Zeile für jede Kombination aus geo_id und place_type, die im Array target_types angegeben ist, auch wenn die Anzahl null ist.

Funktionsweise

Die Funktion verarbeitet jede geografische Einheit, die in der Tabelle input_geographies angegeben ist. Für jede Region werden Orte gezählt, die einem der im Array target_types aufgeführten Typen entsprechen und alle Bedingungen im JSON-Objekt filters erfüllen. Die Ergebnisse werden aggregiert und nach jedem geo_id und jedem Typ in target_types aufgeschlüsselt.

Beispiel: Verschiedene Arten von Restaurants in den Bezirken von New York City zählen

In diesem Beispiel wird eine Tabelle mit der Anzahl der Typen „restaurant“, „cafe“ und „bar“ für drei Bezirke in New York City generiert.

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

Das Ergebnis ist eine Tabelle mit 9 Zeilen (3 Bezirke * 3 Typen). In jeder Zeile wird die Anzahl der „Restaurants“, „Cafés“ oder „Bars“ in jedem Bezirk angezeigt. Sie können auch Beispiel-Orts-IDs angeben, wenn Sie sie Ihrer SELECT-Anweisung hinzufügen.

Ergebnisse für die Funktion „Places Count Per Type“ in New Yorker Bezirken.

Vorteile von PLACES_COUNT_PER_TYPE_V2

PLACES_COUNT_PER_TYPE_V2 bietet mehrere wichtige Vorteile, insbesondere im Vergleich zur älteren PLACES_COUNT_PER_TYPE-Funktion:

  • Batchverarbeitung von Regionen:Im Gegensatz zu PLACES_COUNT_PER_TYPE, wo jeweils eine Region verarbeitet wird, akzeptiert PLACES_COUNT_PER_TYPE_V2 eine TABLE von Eingaberegionen. So können Sie typspezifische Zählungen für zahlreiche Regionen (Punkte, Polygone) in einer einzigen Abfrage analysieren und abrufen, anstatt mehrere Funktionsaufrufe auszuführen.
  • Verbesserte Leistung und Skalierbarkeit: Durch die Verwendung einer Tabelle als Eingabe kann PLACES_COUNT_PER_TYPE_V2 die optimierten räumlichen Joins und die parallelen Verarbeitungsfunktionen von BigQuery für alle bereitgestellten Geografien gleichzeitig nutzen. Das führt zu erheblichen Leistungsverbesserungen und einer besseren Skalierbarkeit bei einer großen Anzahl von Regionen.
  • Nullwerte enthalten: Gibt Zeilen mit 0 Werten für Typen zurück, die in einem bestimmten Bereich innerhalb des Batches nicht gefunden wurden. So wird ein vollständiger Ergebnissatz für alle Typ-Geografie-Kombinationen sichergestellt.
  • Verlaufs-Snapshots:Mit dem optionalen Filter snapshot_date können Sie Daten zur Anzahl der Orte aus einem bestimmten Monat abfragen.

Beispiel: Historische POI-Anzahl nach Typ mit bestimmten Filtern abfragen

In diesem Beispiel wird gezeigt, wie Sie mit dem Parameter snapshot_date die Anzahl bestimmter Ortstypen wie Ladestationen für Elektrofahrzeuge für einen vergangenen Monat abrufen. Es werden zusätzliche Filter für regular_opening_hours angewendet, um nur Orte zu finden, die am Wochenende den ganzen Tag geöffnet sind, und die Verfügbarkeit von Ladestationen für Elektrofahrzeuge (mindestens 10 Anschlüsse verfügbar), die durch min_ev_charge_connector_count angegeben werden.

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