Mengueri jumlah POI menurut jenis tempat

Fungsi PLACES_COUNT_PER_TYPE_V2 menampilkan tabel BigQuery yang berisi jumlah tempat dan ID Tempat sampel, yang dipecah menurut jenis tempat, untuk beberapa geografi input. Fungsi ini dirancang untuk batch processing yang efisien dengan menerima parameter tabel input geografi. Anda memberikan geografi melalui tabel input dan menentukan jenis tempat sebagai array.

Sintaksis

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

Parameter

  • PROJECT_NAME: Nama project Google Cloud Anda.
  • LINKED_DATASET_NAME: Nama set data BigQuery yang berisi fungsi Places Insights (misalnya, places_insights___us).
  • input_geographies: Tabel BigQuery yang berisi geografi yang akan dianalisis. Tabel ini harus menyertakan kolom berikut:
    • geo_id (STRING): ID unik untuk setiap geografi.
    • geo (GEOGRAPHY): Objek GEOGRAPHY BigQuery yang mewakili area. Objek ini dapat berupa titik, poligon, atau jenis geografi lainnya.
  • target_types (ARRAY<STRING>): Array string jenis tempat yang jumlahnya ingin Anda dapatkan. Tempat akan dihitung jika cocok dengan salah satu jenis yang tercantum dalam array types, bukan hanya primary_type.
  • filters (JSON): Objek JSON yang berisi pasangan nilai kunci untuk pemfilteran tambahan tempat. Lihat Parameter Filter.

Skema Tabel Output

Fungsi PLACES_COUNT_PER_TYPE_V2 menampilkan tabel dengan kolom berikut:

Nama Kolom Jenis Data Deskripsi
geo_id STRING ID unik untuk geografi input, dari tabel input_geographies.
input_geography GEOGRAPHY Objek GEOGRAPHY asli dari tabel input_geographies.
place_type STRING Jenis tempat dari array target_types yang diwakili oleh baris ini.
place_count INTEGER Jumlah tempat yang cocok dengan place_type dan filter lainnya di dalam atau di dekat geografi.
sample_place_ids ARRAY<STRING> Array hingga 250 ID Tempat yang cocok dengan kriteria untuk jenis dan geografi ini.

Output akan berisi baris untuk setiap kombinasi geo_id dan place_type yang ditentukan dalam array target_types, meskipun jumlahnya nol.

Cara kerjanya

Fungsi ini memproses setiap geografi yang disediakan dalam tabel input_geographies. Untuk setiap geografi, fungsi ini menghitung tempat yang cocok dengan salah satu jenis yang tercantum dalam array target_types dan juga memenuhi semua kondisi dalam objek JSON filters. Hasilnya diagregasi dan dipecah menurut setiap geo_id dan setiap jenis di target_types.

Contoh: Menghitung berbagai jenis tempat makan di Wilayah NYC

Contoh ini menghasilkan tabel jumlah untuk jenis "restoran", "kafe", dan "bar" di tiga wilayah New York City.

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

Hasilnya akan berupa tabel dengan 9 baris (3 wilayah * 3 jenis). Setiap baris akan menampilkan jumlah tempat "restoran", "kafe", atau "bar" di setiap wilayah. Anda juga dapat menyertakan ID Tempat sampel jika menambahkannya ke pernyataan SELECT.

Hasil untuk fungsi Places Count Per Type di wilayah New York.

Manfaat Menggunakan PLACES_COUNT_PER_TYPE_V2

PLACES_COUNT_PER_TYPE_V2 menawarkan beberapa keuntungan utama, terutama jika dibandingkan dengan fungsi PLACES_COUNT_PER_TYPE yang lebih lama:

  • Pemrosesan Batch Geografi: Tidak seperti PLACES_COUNT_PER_TYPE yang memproses satu geografi dalam satu waktu, PLACES_COUNT_PER_TYPE_V2 menerima TABLE geografi input. Hal ini memungkinkan Anda menganalisis dan mendapatkan jumlah khusus jenis di berbagai geografi (titik, poligon) dalam satu kueri, bukan melakukan beberapa panggilan fungsi.
  • Peningkatan Performa dan Skalabilitas: Dengan mengambil input tabel, PLACES_COUNT_PER_TYPE_V2 dapat memanfaatkan kemampuan pemrosesan paralel dan gabungan geospatial BigQuery yang dioptimalkan di semua geografi yang disediakan secara bersamaan. Hal ini menghasilkan peningkatan performa yang signifikan dan skalabilitas yang lebih baik saat menangani sejumlah besar geografi.
  • Jumlah Nol Disertakan: Menampilkan baris dengan jumlah 0 untuk jenis yang tidak ditemukan di area tertentu dalam batch, sehingga memastikan kumpulan hasil lengkap untuk semua kombinasi jenis-geografi.
  • Snapshot historis: Data jumlah tempat kueri dari bulan tertentu menggunakan filter snapshot_date opsional.

Contoh: Mengkueri jumlah POI historis menurut jenis dengan filter tertentu

Contoh ini menunjukkan cara menemukan jumlah untuk jenis tempat tertentu, seperti stasiun pengisian daya kendaraan listrik, menggunakan parameter snapshot_date untuk mengambil jumlah untuk bulan sebelumnya. Contoh ini menerapkan filter tambahan untuk regular_opening_hours guna mencari hanya tempat yang buka sepanjang hari pada hari libur, dan ketersediaan pengisian daya kendaraan listrik (minimal 10 konektor tersedia) yang ditentukan oleh 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')]
    )
  )
);