Skip to main content
يحتوي Foursquare OS Places على أكثر من 100 مليون موقع تجاري مهم (POI)، بما في ذلك المتاجر والمطاعم والحدائق ومناطق اللعب والمعالم. في هذا الدليل، صِل ClickHouse بكتالوج Iceberg التابع لـ Foursquare، واستكشف مجموعة البيانات، وحمّلها إلى جدول مُحسَّن للاستعلامات الجغرافية المكانية. تتوفر مجموعة البيانات عبر بوابة Foursquare Places ويمكن استخدامها مجانًا بموجب ترخيص Apache 2.0.
غيّرت Foursquare طريقة الوصول إلى OS Places. كانت الإصدارات السابقة من هذا الدليل تستعلم عن ملفات مثبّتة بتاريخ في حاوية S3 عامة؛ أما الآن، فيتم الوصول عبر Places Portal وكتالوج Iceberg موثَّق. راجع وثائق Foursquare للوصول إلى OS Places لمزيد من التفاصيل.

قبل البدء

قبل تشغيل الاستعلامات الواردة في هذا الدليل، ستحتاج إلى:
  • حساب على بوابة Foursquare Places
  • رمز وصول مُنشأ من علامة التبويب Access Data ضمن مجموعة البيانات OS Places

الاتصال بكتالوج Foursquare

حافظ على سرية رمز الوصول الخاص بك. شغّل عميل ClickHouse، ثم استبدل <YOUR_ACCESS_TOKEN> برمزك في الاستعلام التالي:
Query
قاعدة بيانات الكتالوج للقراءة فقط. يعكس جدول places_os الإصدار المنشور الحالي من Foursquare بدلًا من إصدار Parquet المثبّت بتاريخ، لذا قد تتغير صفوفه ومخططه بمرور الوقت. لذلك، قد تعيد الاستعلامات التي لا تتضمن عبارة ORDER BY صفوف عيّنة مختلفة عن النتائج المعروضة في هذا الدليل.

تحقّق من الاتصال

نفِّذ استعلامًا لاسترداد صف واحد من جدول Iceberg places_os:
Query
Response

استكشاف البيانات

يحتوي الصف النموذجي على عدة حقول فارغة. أضف عوامل تصفية لإرجاع صف أكثر اكتمالًا:
Query
Response
استخدم DESCRIBE لفحص مخطط الجدول:
Query
Response

حمّل البيانات إلى ClickHouse

لتخزين البيانات بشكل دائم، أنشئ جدولًا على clickhouse-server أو ClickHouse Cloud. أنشئ جدول MergeTree بأعمدة مُشفَّرة بالقاموس وإحداثيات Web Mercator مُخزَّنة فعليًا:
Query
تستخدم عدة أعمدة نوع البيانات LowCardinality، الذي يخزّن القيم المتكررة بترميز القاموس. ويمكن لهذا التمثيل تحسين أداء استعلامات SELECT بشكل ملحوظ. يحوّل العمودان UInt32 ذوا السمة MATERIALIZED، mercator_x وmercator_y، خط العرض وخط الطول إلى إسقاط ويب مركاتور، مما يسهّل تقسيم الخريطة إلى بطاقات:
تحسب التعبيرات القيم التالية. mercator_x يحوّل هذا العمود قيمة خط الطول إلى إحداثي X في إسقاط مركاتور:
  • تُزيح longitude + 180 نطاق خط الطول من [-180, 180] إلى [0, 360].
  • تؤدي القسمة على 360 إلى تطبيع القيمة لتصبح ضمن نطاق من 0 إلى 1.
  • يؤدي الضرب في 0xFFFFFFFF، وهو أكبر عدد صحيح غير موقّع من 32 بت، إلى تحجيم القيمة المُطبَّعة لتغطي النطاق الكامل لعدد صحيح من 32 بت.
mercator_y يحوّل هذا العمود قيمة خط العرض إلى إحداثي Y في إسقاط مركاتور:
  • تُزيح latitude + 90 نطاق خط العرض من [-90, 90] إلى [0, 180].
  • تؤدي القسمة على 360 والضرب في pi إلى تحويل القيمة إلى راديان لاستخدامها في الدوال المثلثية.
  • تطبّق log(tan(...)) صيغة إسقاط مركاتور الأساسية.
  • يؤدي الضرب في 0xFFFFFFFF إلى تحجيم النتيجة لتغطي النطاق الكامل لعدد صحيح من 32 بت.
يؤدي تحديد MATERIALIZED إلى جعل ClickHouse يحسب هذه القيم عند إدراج البيانات، من دون اشتراط احتواء البيانات المصدر على الأعمدة. يُرتَّب الجدول حسب mortonEncode(mercator_x, mercator_y)، مما ينشئ منحنى Z يملأ المساحة وينظّم البيانات حسب تقاربها المكاني:
يُسرِّع فهرسا minmax إضافيان التصفية المكانية أكثر:
حمّل إصدار OS Places الحالي إلى الجدول:
يقرأ هذا الاستعلام أكثر من 100 مليون صف ويخزّنها. وقد يستغرق وقتًا طويلًا، ويستهلك مساحة تخزين، ويترتب عليه تكاليف استخدام في ClickHouse Cloud. يؤدي تشغيله مجددًا إلى إلحاق البيانات نفسها، لذا تأكد من أن foursquare_mercator فارغ قبل إعادة محاولة الاستيراد.
Query
تمنع قوائم الأعمدة الصريحة للمصدر والوجهة تغييرات ترتيب أعمدة الكتالوج من التسبب في عدم تطابق القيم المستوردة. يستثني الاستعلام unresolved_flags لأنه غير مطلوب في الجدول المحلي، ويستبعد الصفوف التي لا تحتوي على إحداثيات لأنه لا يمكن وضعها على الخريطة. وتظل قيم المصدر الأخرى القابلة للقيم الفارغة فارغة في الجدول المحلي.

استعرض البيانات بصريًا

تغيّر نموذج الوصول في Foursquare منذ إنشاء هذه التصوّرات. يسبق عرض Places التفاعلي الأصلي نموذج الوصول الحالي، وقد أُدرج رابطه للرجوع إليه تاريخيًا، لكنه قد لا يعرض بيانات Places بعد الآن. احتُفظ بالصور أدناه كأمثلة تاريخية.
خلال هاكاثون أُقيم داخل الشركة، استخدم الشريك المؤسس والمدير التقني في ClickHouse، Alexey Milovidov، ClickHouse لإنشاء التصوّرات التالية من مجموعة بيانات Foursquare.
آخر تعديل في ١٤ أغسطس ٢٠٢٦