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

نظرة عامة

يعتمد هذا الدليل التعليمي على [دليل ClickHouse التعليمي]، لكنه يُجري جميع استعلاماته عبر pg_clickhouse.

ابدأ ClickHouse

أولًا، أنشئ قاعدة بيانات في ClickHouse إذا لم تكن لديك قاعدة بيانات بالفعل. ومن أسرع الطرق للبدء استخدام Docker image:

إنشاء جدول

لنستفد من [دليل ClickHouse التعليمي] لإنشاء قاعدة بيانات بسيطة باستخدام مجموعة بيانات سيارات الأجرة في مدينة نيويورك:

أضِف مجموعة البيانات

ثم استورد البيانات:
تأكد من أنه يمكننا إجراء استعلام عليه، ثم الخروج من البرنامج العميل:

تثبيت pg_clickhouse

أنشئ pg_clickhouse وثبّته من PGXN أو GitHub. أو شغّل حاوية Docker باستخدام [image pg_clickhouse]، التي تضيف ببساطة pg_clickhouse إلى [image Postgres في Docker]:

ربط pg_clickhouse

الآن، اتصل بـ Postgres:
ثم أنشئ pg_clickhouse:
أنشئ خادمًا خارجيًا باستخدام اسم المضيف والمنفذ واسم قاعدة بيانات ClickHouse الخاصة بك.
هنا اخترنا استخدام برنامج التشغيل الثنائي، الذي يستخدم بروتوكول ClickHouse الثنائي. ويمكنك أيضًا استخدام برنامج التشغيل “http”، الذي يستخدم واجهة HTTP. بعد ذلك، اربط مستخدم PostgreSQL بمستخدم ClickHouse. وأبسط طريقة للقيام بذلك هي تعيين مستخدم PostgreSQL الحالي إلى مستخدم بعيد على الخادم الخارجي:
يمكنك أيضًا تحديد خيار password. الآن، أضِف جدول سيارات الأجرة؛ فقط استورد جميع الجداول من قاعدة بيانات ClickHouse البعيدة إلى مخطط Postgres:
والآن يُفترض أن يكون الجدول قد تم استيراده: في psql، استخدم \det+ لعرضه:
تم بنجاح! استخدم \d لإظهار جميع الأعمدة:
الآن نفّذ استعلامًا على الجدول:
لاحظ مدى سرعة تنفيذ الاستعلام. يقوم pg_clickhouse بتمرير الاستعلام بالكامل، بما في ذلك دالة التجميع COUNT()، لذا يُنفَّذ على ClickHouse ولا يُعيد إلى Postgres إلا صفًا واحدًا. استخدم EXPLAIN لمعاينة ذلك:
لاحظ أن “Foreign Scan” يظهر عند جذر الخطة، ما يعني أن الاستعلام بأكمله دُفع إلى ClickHouse.

حلّل البيانات

شغّل بعض الاستعلامات لتحليل البيانات. اطّلع على الأمثلة التالية أو جرّب استعلام SQL خاصًا بك.
  • احسب متوسط مبلغ الإكرامية:
  • احسب متوسط التكلفة بناءً على عدد الركاب:
  • احسب العدد اليومي لمرات الالتقاط في كل حي:
  • احسب مدة كل رحلة بالدقائق، ثم جمّع النتائج حسب مدة الرحلة:
  • اعرض عدد مرات الالتقاط في كل حيّ، مقسّمًا حسب ساعات اليوم:
  • اضبط المنطقة الزمنية المعروضة على توقيت نيويورك، ثم استرجع الرحلات إلى مطاري LaGuardia أو JFK:

إنشاء قاموس

أنشئ قاموسًا مرتبطًا بجدول في خدمة ClickHouse الخاصة بك. يعتمد كلٌّ من الجدول والقاموس على ملف CSV يحتوي على صف لكل حيّ في مدينة نيويورك. تُطابَق الأحياء مع أسماء الأحياء الإدارية الخمسة في مدينة نيويورك (Bronx وBrooklyn وManhattan وQueens وStaten Island)، بالإضافة إلى مطار Newark ‏(EWR). فيما يلي مقتطف من ملف CSV الذي تستخدمه بصيغة جدول. يربط العمود LocationID في الملف بالعمودين pickup_nyct2010_gid و dropoff_nyct2010_gid في جدول الرحلات لديك:
  1. بينما لا تزال في Postgres، استخدم الدالة clickhouse_raw_query لإنشاء [قاموس] في ClickHouse باسم taxi_zone_dictionary وملء القاموس من ملف CSV في S3:
يؤدي تعيين LIFETIME إلى 0 إلى تعطيل التحديثات التلقائية لتجنّب نقل بيانات غير ضروري إلى S3 bucket الخاص بنا. في حالات أخرى، قد تحتاج إلى تهيئته بشكل مختلف. لمزيد من التفاصيل، راجع تحديث بيانات القاموس باستخدام LIFETIME.
  1. الآن استورده:
  1. تأكَّد من أنه يمكننا الاستعلام عنه:
  1. ممتاز. الآن استخدم الدالة dictGet لاسترجاع اسم حي إداري في استعلام. يجمع هذا الاستعلام عدد رحلات سيارات الأجرة لكل حي إداري التي تنتهي في أحد مطاري LaGuardia أو JFK:
يحسب هذا الاستعلام إجمالي عدد رحلات سيارات الأجرة لكل حي إداري التي تنتهي في مطارَي LaGuardia أو JFK. لاحظ أن هناك عددًا كبيرًا من الرحلات التي لا يكون فيها الحي الذي انطلقت منه الرحلة معروفًا.

تنفيذ عملية join

اكتب بعض الاستعلامات التي تربط taxi_zone_dictionary بجدول trips لديك.
  1. ابدأ بـ JOIN بسيط يعمل بطريقة مشابهة لاستعلام المطار السابق أعلاه:
لاحظ أن ناتج استعلام JOIN أعلاه مطابق لناتج استعلام dictGet أعلاه (باستثناء أن قيم Unknown غير متضمّنة). في الخلفية، يستدعي ClickHouse فعليًا الدالة dictGet من أجل القاموس taxi_zone_dictionary، لكن صياغة JOIN أكثر ألفةً لمطوري SQL.
  1. يُرجع هذا الاستعلام صفوفًا لأعلى 1000 رحلة من حيث قيمة الإكرامية، ثم يُجري INNER JOIN لكل صف مع القاموس:
بوجه عام، نتجنب استخدام SELECT * في PostgreSQL وClickHouse. يجب ألا تسترجع إلا الأعمدة التي تحتاج إليها فعليًا.
آخر تعديل في ٢ يوليو ٢٠٢٦