یک عبارت Places Insights بنویسید

برای دسترسی به داده‌های Places Insights، پرس‌وجوهای SQL را در BigQuery می‌نویسید که اطلاعات بینش انبوهی درباره مکان‌ها را برمی‌گرداند. نتایج از مجموعه داده برای معیارهای جستجوی مشخص شده در پرس و جو برگردانده می شوند.

الزامات پرس و جو

عبارت SELECT در پرس و جو باید شامل WITH AGGREGATION_THRESHOLD باشد و مجموعه داده را مشخص کند. به عنوان مثال:

SELECT WITH AGGREGATION_THRESHOLD
COUNT(*) AS count
FROM `places_insights___us___sample.places_sample`

در این مثال، شما FROM برای تعیین مجموعه داده places_insights___us___sample.places_sample برای ایالات متحده استفاده می‌کنید.

یک محدودیت مکان را مشخص کنید

توجه داشته باشید که پرس و جو قبلی هیچ محدودیت مکانی را مشخص نمی کند، به این معنی که تجمیع داده ها در کل مجموعه داده اعمال می شود. معمولاً شما یک محدودیت مکان مانند شکل زیر را مشخص می کنید:

SELECT WITH AGGREGATION_THRESHOLD
COUNT(*) AS count
FROM `places_insights___us___sample.places_sample`
WHERE
ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000)

در این مثال، درخواست شما یک محدودیت هدف را مشخص می‌کند که در مرکز ساختمان امپایر استیت در شهر نیویورک قرار دارد، با شعاع 1000 متر.

می توانید از یک چند ضلعی برای تعیین ناحیه جستجو استفاده کنید. هنگام استفاده از یک چند ضلعی، نقاط چند ضلعی باید یک حلقه بسته را تعریف کنند که در آن اولین نقطه در چند ضلعی همان نقطه آخر باشد:

SELECT WITH AGGREGATION_THRESHOLD
COUNT(*) AS count
FROM `places_insights___us___sample.places_sample`
WHERE
ST_CONTAINS(ST_GEOGFROMTEXT("""POLYGON((-73.985708 40.75773,-73.993324 40.750298,
                                      -73.9857 40.7484,-73.9785 40.7575,
                                      -73.985708 40.75773))"""), point)

در مثال بعدی، منطقه جستجو را با استفاده از خطی از نقاط متصل تعریف می کنید. این خط شبیه به مسیر سفر محاسبه شده توسط Routes API است. مسیر ممکن است برای یک وسیله نقلیه، یک دوچرخه یا برای یک عابر پیاده باشد:

DECLARE route GEOGRAPHY;

SET route = ST_GEOGFROMTEXT("""LINESTRING(-73.98903537033028 40.73655649223003,
                                          -73.93580216278471 40.80955538843361)""");

SELECT WITH AGGREGATION_THRESHOLD
  COUNT(*) AS count
FROM `places_insights___us___sample.places_sample`
WHERE
  ST_DWITHIN(route, point, 100)

در این مثال، شعاع جستجو را روی 100 متر در اطراف خط قرار می دهید.

فیلدهای مجموعه داده مکان را فیلتر کنید

جستجوی خود را بر اساس فیلدهای تعریف شده توسط طرح مجموعه داده اصلاح کنید. نتایج را بر اساس فیلدهای مجموعه داده مانند مکان regular_opening_hours ، price_level و rating مشتری فیلتر کنید.

به فیلدهای موجود در مجموعه داده که توسط طرح مجموعه داده برای کشور مورد علاقه شما تعریف شده است، ارجاع دهید. طرح مجموعه داده برای هر کشور از دو بخش تشکیل شده است:

به عنوان مثال، پرس و جو شما می تواند شامل یک عبارت WHERE باشد که معیارهای فیلتر را برای پرس و جو تعریف می کند. در مثال زیر، داده‌های تجمعی را برای مکان‌هایی از نوع restaurant با business_status OPERATIONAL ، که دارای rating بیشتر یا مساوی 4.0 هستند، و با allows_dogs تنظیم شده روی true برمی‌گردانید:

SELECT WITH AGGREGATION_THRESHOLD
COUNT(*) AS count
FROM `places_insights___us___sample.places_sample`
WHERE
ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000)
AND 'restaurant' IN UNNEST(types)
AND business_status = "OPERATIONAL"
AND rating >= 4.0
AND allows_dogs = true

پرس و جو بعدی نتایج را برای مکان هایی که حداقل 8 ایستگاه شارژ EV دارند برمی گرداند:

SELECT WITH AGGREGATION_THRESHOLD
  COUNT(*) AS count
FROM
  `places_insights___us___sample.places_sample`
WHERE
  ev_charge_options.connector_count > 8;

فیلتر در محل نوع اولیه و نوع مکان

هر مکان در مجموعه داده می تواند موارد زیر را داشته باشد:

  • یک نوع اولیه منفرد مرتبط با آن از انواع تعریف شده توسط جدول A. به عنوان مثال، نوع اولیه ممکن است mexican_restaurant یا steak_house باشد. برای فیلتر کردن نتایج در نوع اصلی مکان، از primary_type در یک جستجو استفاده کنید.

  • مقادیر نوع چندگانه مرتبط با آن از انواع تعریف شده توسط جدول A. به عنوان مثال یک رستوران ممکن است انواع زیر را داشته باشد: seafood_restaurant ، restaurant ، food ، point_of_interest ، establishment . types در پرس و جو برای فیلتر کردن نتایج در لیست انواع مرتبط با مکان استفاده کنید.

پرس و جوی زیر نتایج را برای همه مکان‌هایی که نوع bar اصلی دارند اما به‌عنوان restaurant نیز عمل می‌کنند، برمی‌گرداند:

SELECT WITH AGGREGATION_THRESHOLD
  COUNT(*) AS count
FROM
  `places_insights___us___sample.places_sample`
WHERE
  'restaurant' IN UNNEST(types)
  AND 'bar' = primary_type

بر روی مقادیر داده از پیش تعریف شده فیلتر کنید

بسیاری از فیلدهای مجموعه داده دارای مقادیر از پیش تعریف شده هستند. به عنوان مثال

  • فیلد price_level از مقادیر از پیش تعریف شده زیر پشتیبانی می کند:

    • PRICE_LEVEL_FREE
    • PRICE_LEVEL_INEXPENSIVE
    • PRICE_LEVEL_MODERATE
    • PRICE_LEVEL_EXPENSIVE
    • PRICE_LEVEL_VERY_EXPENSIVE
  • فیلد business_status از مقادیر از پیش تعریف شده زیر پشتیبانی می کند:

    • OPERATIONAL
    • CLOSED_TEMPORARILY
    • CLOSED_PERMANENTLY

در این مثال، پرس و جو تعداد تمام رستوران‌های دارای OPERATIONAL business_status در شعاع 1000 متری ساختمان امپایر استیت در شهر نیویورک برمی‌گرداند:

SELECT WITH AGGREGATION_THRESHOLD
COUNT(*) AS count
FROM `places_insights___us___sample.places_sample`
WHERE
ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000)
AND business_status = "OPERATIONAL"
AND 'restaurant' IN UNNEST(types)

فیلتر بر اساس ساعت کار

در این مثال، تعداد مکان‌های موجود در یک منطقه جغرافیایی را با ساعات شاد جمعه برگردانید:

SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count
FROM `places_insights___us___sample.places_sample`,
UNNEST(regular_opening_hours_happy_hour.friday) AS friday_hours
WHERE '17:00:00' BETWEEN friday_hours.start_time AND friday_hours.end_time
AND ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000);

از یک تابع تجمع استفاده کنید

مثال زیر توابع تجمع پشتیبانی شده BigQuery را نشان می دهد. این جستار رتبه‌بندی همه مکان‌های واقع در شعاع 1000 متری ساختمان امپایر استیت در شهر نیویورک را برای تولید آمار رتبه‌بندی جمع‌آوری می‌کند:

SELECT WITH AGGREGATION_THRESHOLD
  COUNT(id) AS place_count,
  APPROX_COUNT_DISTINCT(rating) as distinct_ratings,
  COUNTIF(rating > 4.0) as good_rating_count,
  LOGICAL_AND(rating <= 5) as all_ratings_equal_or_below_five,
  LOGICAL_OR(rating = 5) as any_rating_exactly_five,
  AVG(rating) as avg_rating,
  SUM(user_rating_count) as rating_count,
  COVAR_POP(rating, user_rating_count) as rating_covar_pop,
  COVAR_SAMP(rating, user_rating_count) as rating_covar_samp,
  STDDEV_POP(rating) as rating_stddev_pop,
  STDDEV_SAMP(rating) as rating_stddev_samp,
  VAR_POP(rating) as rating_var_pop,
  VAR_SAMP(rating) as rating_var_samp,
FROM
  `places_insights___us___sample.places_sample`
WHERE
  ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000)
  AND business_status = "OPERATIONAL"

گروه های نتیجه را برگردانید

جستارهایی که تا کنون نشان داده شده اند، یک سطر را در نتیجه برمی گرداند که حاوی تعداد تجمع برای پرس و جو است. همچنین می توانید از عملگر GROUP BY برای برگرداندن چندین ردیف در پاسخ بر اساس معیارهای گروه بندی استفاده کنید.

به عنوان مثال، پرس و جو زیر نتایج گروه بندی شده بر اساس نوع اصلی هر مکان در ناحیه جستجو را برمی گرداند:

SELECT WITH AGGREGATION_THRESHOLD
  primary_type,
  COUNT(*) AS count
FROM
  `places_insights___us___sample.places_sample`
WHERE
  ST_DWITHIN(ST_GEOGPOINT(-73.99992071622756, 40.71818785986936), point, 1000)
GROUP BY primary_type

تصویر زیر نمونه ای از خروجی این پرس و جو را نشان می دهد:

نتایج پرس و جو برای گروه بندی نتایج بر اساس نوع اولیه.

در این مثال شما جدولی از مکان ها را تعریف می کنید. برای هر مکان، تعداد رستوران‌های اطراف را محاسبه می‌کنید، یعنی رستوران‌هایی که در فاصله 1000 متری قرار دارند:

WITH my_locations AS (
  SELECT 'Location 1' AS name, ST_GEOGPOINT(-74.00776440888504, 40.70932825380786) AS location
  UNION ALL
  SELECT 'Location 2' AS name, ST_GEOGPOINT(-73.98257192833559, 40.750738934863215) AS location
  UNION ALL
  SELECT 'Location 3' AS name, ST_GEOGPOINT(-73.94701794263223, 40.80792954838445)  AS location
)
SELECT WITH AGGREGATION_THRESHOLD
  l.name,
  COUNT(*) as count
FROM
  `places_insights___us___sample.places_sample` p
JOIN
   my_locations l
ON
  ST_DWITHIN(l.location, p.point, 1000)
WHERE
  primary_type = "restaurant"
  AND business_status = "OPERATIONAL"
GROUP BY
  l.name

تصویر زیر نمونه ای از خروجی این پرس و جو را نشان می دهد:

نتایج جستجو برای گروه بندی نتایج بر اساس مکان.