برای دسترسی به دادههای 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
تصویر زیر نمونه ای از خروجی این پرس و جو را نشان می دهد: