كتابة طلب بحث في "إحصاءات الأماكن"

للوصول إلى بيانات Places Insights، عليك كتابة طلبات بحث SQL في BigQuery تعرض إحصاءات مجمّعة حول الأماكن. يتم عرض النتائج من مجموعة البيانات لمعايير البحث المحدّدة في طلب البحث.

أساسيات طلب البحث

تعرض الصورة التالية التنسيق الأساسي للاستعلام:

تمثّل هذه السمة التنسيق الأساسي لطلب البحث.

في ما يلي وصف مفصّل لكل جزء من طلب البحث.

متطلبات طلب البحث

يجب أن يتضمّن بيان SELECT في الاستعلام WITH AGGREGATION_THRESHOLD وأن يحدّد مجموعة البيانات. على سبيل المثال:

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

في هذا المثال، يمكنك استخدام FROM لتحديد مجموعة بيانات PROJECT_NAME.places_insights___us___sample.places_sample الخاصة بالولايات المتحدة.

تحديد اسم مشروع (اختياري)

يمكنك اختياريًا تضمين اسم مشروعك في طلب البحث. إذا لم تحدّد اسم مشروع، سيتم تلقائيًا استخدام المشروع النشط في طلب البحث.

قد تحتاج إلى تضمين اسم مشروعك إذا ربطت مجموعات بيانات تحمل الاسم نفسه في مشاريع مختلفة، أو إذا كنت تستعلم عن جدول خارج المشروع النشط.

مثلاً: [project name].[dataset name].places_sample

تحديد دالة تجميع

يعرض المثال أدناه دوال التجميع المتوافقة مع 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
  `PROJECT_NAME.places_insights___us___sample.places_sample`
WHERE
  ST_DWITHIN(ST_GEOGPOINT(-73.9857, 40.7484), point, 1000)
  AND business_status = "OPERATIONAL"

تحديد قيود الموقع الجغرافي

في حال عدم تحديد قيود على الموقع الجغرافي، يتم تطبيق تجميع البيانات على مجموعة البيانات بأكملها. عادةً ما تحدّد قيودًا على الموقع الجغرافي للبحث في منطقة معيّنة، كما هو موضّح أدناه:

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

في هذا المثال، يحدّد طلب البحث قيودًا مستهدَفة تركّز على مبنى &quot;إمباير ستيت&quot; في مدينة نيويورك، ويبلغ نصف قطرها 1,000 متر.

يمكنك استخدام مضلّع لتحديد مساحة البحث. عند استخدام مضلّع، يجب أن تحدّد نقاط المضلّع حلقة مغلقة يكون فيها موضع النقطة الأولى في المضلّع هو نفسه موضع النقطة الأخيرة:

SELECT WITH AGGREGATION_THRESHOLD
COUNT(*) AS count
FROM `PROJECT_NAME.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 `PROJECT_NAME.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 `PROJECT_NAME.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
  `PROJECT_NAME.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
  `PROJECT_NAME.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 `PROJECT_NAME.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 `PROJECT_NAME.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);

إرجاع مجموعات النتائج

تعرض طلبات البحث التي تم عرضها حتى الآن صفًا واحدًا في النتيجة يحتوي على عدد التجميع لطلب البحث. يمكنك أيضًا استخدام عامل التشغيل GROUP BY لعرض صفوف متعددة في الرد استنادًا إلى معايير التجميع.

على سبيل المثال، يعرض طلب البحث التالي نتائج مجمّعة حسب النوع الأساسي لكل مكان في منطقة البحث:

SELECT WITH AGGREGATION_THRESHOLD
  primary_type,
  COUNT(*) AS count
FROM
  `PROJECT_NAME.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
  `PROJECT_NAME.places_insights___us___sample_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

تعرض الصورة التالية مثالاً على الناتج الذي يظهر استجابةً لطلب البحث هذا:

نتائج طلب البحث لتجميع النتائج حسب الموقع الجغرافي