نظرة عامة
يعتمد هذا الدليل العملي على [دليل ClickHouse التعليمي]، لكنه يُجري جميع استعلاماته عبر pg_clickhouse. اختر كيفية تهيئةpg_clickhouse:
- من Console إذا كنت تستخدم ClickHouse Managed Postgres.
- من PSQL إذا كنت تثبّت وتُهيّئ الامتداد بنفسك.
ابدأ ClickHouse
أولًا، أنشئ قاعدة بيانات في ClickHouse إذا لم تكن لديك قاعدة بيانات بالفعل. ومن أسرع الطرق للبدء استخدام Docker image:إنشاء جدول
لنستفد من [دليل ClickHouse التعليمي] لإنشاء قاعدة بيانات بسيطة باستخدام مجموعة بيانات سيارات الأجرة في مدينة نيويورك:أضِف مجموعة البيانات
ثم استورد البيانات:من وحدة التحكم
إذا كنت تستخدم ClickHouse Managed Postgres، يمكنك تهيئةpg_clickhouse والاتصال بخدمة ClickHouse من خلال ClickHouse Cloud console.
افتح خدمة Managed Postgres، واختر الإعدادات، ثم ابحث عن قسم
ClickHouse integration. انقر على تمكين pg_clickhouse.
في نموذج الإعداد، أدخل اسمًا للخادم الخارجي. اختر خدمة ClickHouse
وقاعدة البيانات والمستخدم المراد استخدامهم للاتصال. أدخل كلمة مرور
ClickHouse، ثم اختر قاعدة بيانات Postgres ومخطط الوجهة الذي تريد
استيراد جداول ClickHouse إليه. انقر على اتصال لإنشاء الخادم الخارجي
واستيراد المخطط.
عند اكتمال الإعداد، تعرض وحدة التحكم رسالة تأكيد، ويظهر الخادم الخارجي
في قائمة الخوادم.
يمكنك الآن فتح SQL console في Postgres والاستعلام عن الجداول المستوردة:
taxi
واستوردها إلى مخطط الوجهة taxi.
من PSQL
تثبيت pg_clickhouse
أنشئ pg_clickhouse وثبّته من PGXN أو GitHub. أو شغّل حاوية Docker باستخدام [image pg_clickhouse]، التي تضيف ببساطة pg_clickhouse إلى [image Postgres في Docker]:ربط pg_clickhouse
الآن، اتصل بـ Postgres:إذا كنت تستخدم ClickHouse Cloud console لتشغيل SQL، فامنح مستخدم console الإداري حق الوصول إلى الخادم الخارجي:
password.
الآن، أضِف جدول سيارات الأجرة؛ فقط استورد جميع الجداول من قاعدة بيانات
ClickHouse البعيدة إلى مخطط Postgres:
\det+ لعرضه:
\d لإظهار جميع الأعمدة:
COUNT()، لذا يُنفَّذ على ClickHouse ولا
يُعيد إلى Postgres إلا صفًا واحدًا. استخدم EXPLAIN لمعاينة ذلك:
حلّل البيانات
شغّل بعض الاستعلامات لتحليل البيانات. اطّلع على الأمثلة التالية أو جرّب استعلام SQL خاصًا بك.-
احسب متوسط مبلغ الإكرامية:
-
احسب متوسط التكلفة بناءً على عدد الركاب:
-
احسب العدد اليومي لمرات الالتقاط في كل حي:
-
احسب مدة كل رحلة بالدقائق، ثم جمّع النتائج حسب
مدة الرحلة:
-
اعرض عدد مرات الالتقاط في كل حيّ، مقسّمًا حسب ساعات اليوم:
-
اضبط المنطقة الزمنية المعروضة على توقيت نيويورك، ثم استرجع الرحلات إلى مطاري LaGuardia أو JFK:
إنشاء قاموس
أنشئ قاموسًا مرتبطًا بجدول في خدمة ClickHouse الخاصة بك. يعتمد كلٌّ من الجدول والقاموس على ملف CSV يحتوي على صف لكل حيّ في مدينة نيويورك. تُطابَق الأحياء مع أسماء الأحياء الإدارية الخمسة في مدينة نيويورك (Bronx وBrooklyn وManhattan وQueens وStaten Island)، بالإضافة إلى مطار Newark (EWR). فيما يلي مقتطف من ملف CSV الذي تستخدمه بصيغة جدول. يربط العمودLocationID في الملف بالعمودين pickup_nyct2010_gid و
dropoff_nyct2010_gid في جدول الرحلات لديك:
-
بينما لا تزال في Postgres، استخدم الدالة
clickhouse_raw_queryلإنشاء [قاموس] في ClickHouse باسمtaxi_zone_dictionaryوملء القاموس من ملف CSV في S3:يؤدي تعيينLIFETIMEإلى 0 إلى تعطيل التحديثات التلقائية لتجنّب نقل بيانات غير ضروري إلى S3 bucket الخاص بنا. في حالات أخرى، قد تحتاج إلى تهيئته بشكل مختلف. لمزيد من التفاصيل، راجع تحديث بيانات القاموس باستخدام LIFETIME.- الآن استورده:
- تأكَّد من أنه يمكننا الاستعلام عنه:
- ممتاز. الآن استخدم الدالة
dictGetلاسترجاع اسم حي إداري في استعلام. يجمع هذا الاستعلام عدد رحلات سيارات الأجرة لكل حي إداري التي تنتهي في أحد مطاري LaGuardia أو JFK:
يحسب هذا الاستعلام إجمالي عدد رحلات سيارات الأجرة لكل حي إداري التي تنتهي في مطارَي LaGuardia أو JFK. لاحظ أن هناك عددًا كبيرًا من الرحلات التي لا يكون فيها الحي الذي انطلقت منه الرحلة معروفًا.
تنفيذ عملية join
اكتب بعض الاستعلامات التي تربطtaxi_zone_dictionary بجدول trips
لديك.
-
ابدأ بـ
JOINبسيط يعمل بطريقة مشابهة لاستعلام المطار السابق أعلاه:لاحظ أن ناتج استعلامJOINأعلاه مطابق لناتج استعلامdictGetأعلاه (باستثناء أن قيمUnknownغير متضمّنة). في الخلفية، يستدعي ClickHouse فعليًا الدالةdictGetمن أجل قاموسtaxi_zone_dictionary، لكن صياغةJOINأكثر ألفةً لمطوري SQL. -
يُرجع هذا الاستعلام صفوفًا لأعلى 1000 رحلة من حيث قيمة
الإكرامية، ثم يُجري INNER JOIN لكل صف مع قاموس:
بوجه عام، نتجنب استخدام
SELECT * في PostgreSQL وClickHouse. يجب
ألا تسترجع إلا الأعمدة التي تحتاج إليها فعليًا.