الانتقال إلى المحتوى الرئيسي

مجموعة البيانات

مجموعة البيانات هذه من Foursquare متاحة للتنزيل وللاستخدام المجاني بموجب ترخيص Apache 2.0. وتتضمن أكثر من 100 مليون سجل لنقاط الاهتمام التجارية (POI)، مثل المتاجر والمطاعم والمتنزهات وملاعب الأطفال والمعالم الأثرية. كما تشمل بيانات وصفية إضافية عن هذه الأماكن، مثل الفئات ومعلومات وسائل التواصل الاجتماعي.

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

لاستكشاف البيانات، سنستخدم clickhouse-local، وهي أداة صغيرة تعمل من سطر الأوامر وتوفّر محرك ClickHouse الكامل، مع أنه يمكنك أيضًا استخدام ClickHouse Cloud أو clickhouse-client أو حتى chDB. شغّل الاستعلام التالي لاختيار البيانات من حاوية S3 حيث تُخزَّن البيانات:
Query
Response
نرى أن عددًا لا بأس به من الحقول يحتوي على ᴺᵁᴸᴸ، لذا يمكننا إضافة بعض الشروط الإضافية إلى الاستعلام للحصول على بيانات أكثر فائدة:
Query
نفّذ الاستعلام التالي لعرض المخطّط المُستنتَج تلقائيًا للبيانات باستخدام DESCRIBE:
Query
Response

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

إذا كنت تريد الاحتفاظ بالبيانات على القرص، فيمكنك استخدام clickhouse-server أو ClickHouse Cloud. لإنشاء الجدول، شغّل الأمر التالي:
Query
لاحظ استخدام نوع البيانات LowCardinality في عدة أعمدة، إذ يغيّر التمثيل الداخلي للبيانات بحيث تصبح أنواع البيانات مرمَّزةً باستخدام القاموس. ويسهم التعامل مع البيانات المرمَّزة بالقاموس في تحسين أداء استعلامات SELECT بشكل كبير في كثير من التطبيقات. بالإضافة إلى ذلك، يُنشأ عمودان UInt32 من نوع MATERIALIZED، هما mercator_x وmercator_y، لربط إحداثيات خط العرض/خط الطول بإسقاط Web Mercator لتسهيل تقسيم الخريطة إلى مربعات:
دعونا نفصّل ما يحدث أعلاه لكل عمود. 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 قيم هذه الأعمدة عند INSERT البيانات، من دون الحاجة إلى تحديد هذه الأعمدة (التي لا تُعدّ جزءًا من مخطط البيانات الأصلي) في تعليمة `INSERT. يُرتَّب الجدول بحسب mortonEncode(mercator_x, mercator_y)، الذي يُنتج منحنى Z-order لملء الفراغ لـ mercator_x وmercator_y من أجل تحسين أداء الاستعلامات الجغرافية المكانية بشكل كبير. ويضمن هذا الترتيب وفق منحنى Z-order أن تكون البيانات منظَّمة فعليًا بحسب التقارب المكاني:
كما يُنشأ مؤشرا minmax لتسريع البحث:
كما ترى، يوفّر ClickHouse كل ما تحتاجه بالفعل لتطبيقات الخرائط في الزمن الحقيقي! نفّذ الاستعلام التالي لتحميل البيانات:

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

للتعرّف على ما يمكن فعله باستخدام مجموعة البيانات هذه، ألقِ نظرة على adsb.exposed. صُمّم adsb.exposed في الأصل على يد الشريك المؤسس والمدير التقني Alexey Milovidov لعرض بيانات رحلات ADS-B ‏(البث التلقائي للمراقبة التابعة) بصريًا، والتي يزيد حجمها بمقدار 1000 مرة. وخلال هاكاثون أُقيم داخل الشركة، أضاف Alexey بيانات Foursquare إلى الأداة. فيما يلي بعض تصوّراتنا المفضلة لتستمتع بها.
آخر تعديل في ٢٥ يونيو ٢٠٢٦