Zapytanie o liczbę punktów POI według typu miejsca

Funkcja PLACES_COUNT_PER_TYPE_V2 zwraca tabelę BigQuery zawierającą liczbę miejsc i przykładowe identyfikatory miejsc, podzielone według typu miejsca, dla wielu danych wejściowych dotyczących lokalizacji geograficznych. Ta funkcja została zaprojektowana z myślą o wydajnym przetwarzaniu wsadowym, ponieważ akceptuje parametr tabeli wejściowej z obszarami geograficznymi. Regiony geograficzne podajesz w tabeli wejściowej, a typy miejsc określasz jako tablicę.

Składnia

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

Parametry

  • PROJECT_NAME: nazwa Twojego projektu Google Cloud.
  • LINKED_DATASET_NAME: nazwa zbioru danych BigQuery zawierającego funkcje Statystyk miejsc (np. places_insights___us).
  • input_geographies: tabela BigQuery zawierająca regiony do przeanalizowania. Tabela musi zawierać te kolumny:
    • geo_id (STRING): unikalny identyfikator każdego regionu geograficznego.
    • geo (GEOGRAPHY): obiekt BigQuery GEOGRAPHY reprezentujący obszar. Może to być punkt, wielokąt lub inny typ geograficzny.
  • target_types (ARRAY<STRING>): tablica ciągów znaków typów miejsc, dla których chcesz uzyskać liczbę. Miejsca będą liczone, jeśli pasują do dowolnego typu wymienionego w tablicy types, a nie tylko do primary_type.
  • filters (JSON): obiekt JSON zawierający pary klucz-wartość do dodatkowego filtrowania miejsc. Zobacz Parametry filtra.

Schemat tabeli wyjściowej

Funkcja PLACES_COUNT_PER_TYPE_V2 zwraca tabelę z tymi kolumnami:

Nazwa kolumny Typ danych Opis
geo_id STRING Unikalny identyfikator danych wejściowych dotyczących regionu geograficznego z tabeli input_geographies.
input_geography GEOGRAPHY Pierwotny obiekt GEOGRAPHY z tabeli input_geographies.
place_type STRING Typ miejsca z tablicy target_types, który reprezentuje ten wiersz.
place_count INTEGER Liczba miejsc pasujących do place_type i innych filtrów w obrębie danego obszaru geograficznego lub w jego pobliżu.
sample_place_ids ARRAY<STRING> Tablica zawierająca maksymalnie 250 identyfikatorów miejsc, które spełniają kryteria dla tego typu i obszaru geograficznego.

Dane wyjściowe będą zawierać wiersz dla każdej kombinacji geo_id i place_type określonej w tablicy target_types, nawet jeśli liczba wynosi 0.

Jak to działa

Funkcja przetwarza każdy region podany w tabeli input_geographies. W przypadku każdego obszaru geograficznego zlicza miejsca, które pasują do dowolnego typu wymienionego w tablicy target_types i spełniają wszystkie warunki w obiekcie JSON filters. Wyniki są agregowane i dzielone według każdego elementu geo_id i każdego typu w: target_types.

Przykład: zliczanie różnych typów lokali gastronomicznych w hrabstwach Nowego Jorku

Ten przykład generuje tabelę z liczbą miejsc typu „restauracja”, „kawiarnia” i „bar” w 3 hrabstwach Nowego Jorku.

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

W efekcie powstanie tabela z 9 wierszami (3 hrabstwa * 3 typy). Każdy wiersz będzie zawierać liczbę restauracji, kawiarni lub barów w każdym hrabstwie. Możesz też uwzględnić przykładowe identyfikatory miejsc, jeśli dodasz je do instrukcji SELECT.

Wyniki funkcji Liczba miejsc według typu w hrabstwach Nowego Jorku.

Korzyści z używania PLACES_COUNT_PER_TYPE_V2

Funkcja PLACES_COUNT_PER_TYPE_V2 ma kilka kluczowych zalet, zwłaszcza w porównaniu ze starszą funkcją PLACES_COUNT_PER_TYPE:

  • Przetwarzanie wsadowe obszarów geograficznych: w odróżnieniu od PLACES_COUNT_PER_TYPE, który przetwarza po jednym obszarze geograficznym, PLACES_COUNT_PER_TYPE_V2 akceptuje TABLE wejściowych obszarów geograficznych. Dzięki temu możesz analizować i uzyskiwać liczby dotyczące konkretnych typów w wielu lokalizacjach geograficznych (punkty, wielokąty) w ramach jednego zapytania, zamiast wykonywać wiele wywołań funkcji.
  • Zwiększona wydajność i skalowalność: dzięki tabeli wejściowej PLACES_COUNT_PER_TYPE_V2 może korzystać ze zoptymalizowanych połączeń geoprzestrzennych BigQuery i możliwości przetwarzania równoległego we wszystkich podanych lokalizacjach geograficznych jednocześnie. Zapewnia to znaczny wzrost wydajności i lepszą skalowalność w przypadku dużej liczby lokalizacji geograficznych.
  • Uwzględnij zerowe liczby: zwraca wiersze z zerowymi liczbami dla typów, które nie zostały znalezione w określonym obszarze w ramach zbioru, co zapewnia pełny zestaw wyników dla wszystkich kombinacji typów i lokalizacji geograficznych.
  • Migawki historyczne: zapytanie o liczbę miejsc z konkretnego miesiąca przy użyciu opcjonalnego filtra snapshot_date.

Przykład: zapytanie o historyczną liczbę ważnych miejsc według typu z określonymi filtrami

Ten przykład pokazuje, jak znaleźć liczbę miejsc określonego typu, np. stacji ładowania EV, za pomocą parametru snapshot_date, aby uzyskać liczbę miejsc z poprzedniego miesiąca. Stosuje dodatkowe filtry dla regular_opening_hours, aby wyszukiwać tylko miejsca otwarte przez cały dzień w weekend i dostępność ładowania EV (co najmniej 10 dostępnych złączy) określone przez min_ev_charge_connector_count.

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