للوصول إلى بيانات 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)
في هذا المثال، يحدّد طلب البحث قيودًا على الاستهداف تركّز على مبنى "إمباير ستيت" في مدينة نيويورك، ويبلغ نصف قطرها 1,000 متر.
يمكنك استخدام مضلّع لتحديد مساحة البحث. عند استخدام مضلّع، يجب أن تحدّد نقاط المضلّع حلقة مغلقة يكون فيها موضع النقطة الأولى في المضلّع هو نفسه موضع النقطة الأخيرة:
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
يعرض طلب البحث التالي نتائج عن الأماكن التي تتضمّن ثماني محطات شحن للمركبات الكهربائية على الأقل:
SELECT WITH AGGREGATION_THRESHOLD COUNT(*) AS count FROM `places_insights___us___sample.places_sample` WHERE ev_charge_options.connector_count > 8;
الفلترة حسب النوع الأساسي للمكان ونوع المكان
يمكن أن يتضمّن كل مكان في مجموعة البيانات ما يلي:
نوع أساسي واحد مرتبط به من الأنواع المحدّدة في الجدول أ على سبيل المثال، قد يكون النوع الأساسي
mexican_restaurant
أوsteak_house
. استخدِمprimary_type
في طلب بحث لفلترة النتائج حسب النوع الأساسي للمكان.قيم أنواع متعددة مرتبطة بها من الأنواع المحدّدة في الجدول أ على سبيل المثال، قد يتضمّن مطعم الأنواع التالية:
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
في هذا المثال، يعرض الاستعلام عدد جميع المطاعم التي تتضمّن business_status
بقيمة OPERATIONAL
ضمن دائرة نصف قطرها 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. يجمع هذا الاستعلام تقييمات جميع الأماكن الواقعة ضمن دائرة نصف قطرها 1,000 متر من "مبنى إمباير ستيت" في مدينة نيويورك لإنشاء إحصاءات التقييمات:
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
تعرض الصورة التالية مثالاً على الناتج الذي يظهر عند إدخال طلب البحث هذا: