Skip to main content
في هذا الدليل، ستُدرِج 28 مليون صف من بيانات Hacker News في جدول ClickHouse باستخدام تنسيقي CSV وParquet، ثم تُشغِّل بعض الاستعلامات البسيطة لاستكشاف البيانات.

CSV

1

تنزيل CSV

يمكن تنزيل نسخة CSV من مجموعة البيانات من حاوية S3 العامة الخاصة بنا، أو بتشغيل هذا الأمر:
بحجم 4.6GB و28 مليون صف، من المفترض أن يستغرق تنزيل هذا الملف المضغوط من 5 إلى 10 دقائق.
2

أخذ عينة من البيانات

يتيح لك clickhouse-local إجراء معالجة سريعة للملفات المحلية دون الحاجة إلى نشر خادم ClickHouse وتهيئته.قبل تخزين أي بيانات في ClickHouse، لنأخذ عينة من الملف باستخدام clickhouse-local. من الطرفية شغّل:
بعد ذلك، نفّذ الأمر التالي لاستكشاف البيانات:
Query
Response
يوفر هذا الأمر الكثير من الإمكانات الدقيقة. يتيح لك العامل file قراءة الملف من قرص محلي، مع تحديد التنسيق CSVWithNames فقط. والأهم من ذلك، تُستنتج البنية تلقائيًا من محتويات الملف. لاحظ أيضًا أن clickhouse-local يستطيع قراءة الملف المضغوط، إذ يستنتج تنسيق gzip من امتداد الملف. يُستخدم التنسيق Vertical لتسهيل عرض البيانات لكل عمود.
3

حمّل البيانات باستخدام استدلال المخطط

أبسط أداة لتحميل البيانات وأكثرها قوة هي clickhouse-client: عميل سطر أوامر أصلي غني بالميزات. ولتحميل البيانات، يمكنك مرة أخرى الاستفادة من استدلال المخطط، مع الاعتماد على ClickHouse لتحديد أنواع الأعمدة.شغّل الأمر التالي لإنشاء جدول وإدراج البيانات مباشرةً من ملف CSV بعيد، مع الوصول إلى المحتوى عبر الدالة url. ويُستدل على المخطط تلقائيًا:
يؤدي هذا إلى إنشاء جدول فارغ باستخدام المخطط المُستنتَج من البيانات. يتيح لنا الأمر DESCRIBE TABLE فهم الأنواع التي جرى تعيينها.
Query
Response
لإدخال البيانات إلى هذا الجدول، استخدم الأمر INSERT INTO, SELECT. وباستخدام الدالة url، ستُبث البيانات مباشرةً من عنوان URL:
لقد نجحت في إدراج 28 مليون صف في ClickHouse باستخدام أمر واحد!
4

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

احصل على عيّنة من قصص Hacker News وبعض الأعمدة المحددة بتشغيل الاستعلام التالي:
Query
Response
في حين أن استنتاج المخطط أداة ممتازة للاستكشاف الأولي للبيانات، فإنه يعمل وفق مبدأ «أفضل جهد ممكن»، ولا يُعد بديلاً طويل الأمد عن تحديد مخطط أمثل لبياناتك.
5

عرّف مخططًا

من التحسينات الواضحة والمباشرة تحديد نوع لكل حقل. بالإضافة إلى تعريف حقل الوقت بالنوع DateTime، نحدّد نوعًا مناسبًا لكل حقل من الحقول أدناه بعد حذف مجموعة البيانات الحالية. في ClickHouse، يُحدَّد المفتاح الأساسي للبيانات عبر عبارة ORDER BY.يساعد اختيار الأنواع المناسبة وتحديد الأعمدة التي ينبغي تضمينها في عبارة ORDER BY على تحسين سرعة الاستعلام والضغط.شغّل الاستعلام أدناه لحذف المخطط القديم وإنشاء المخطط المُحسَّن:
Query
بعد تحسين المخطّط، يمكنك الآن إدراج البيانات من نظام الملفات المحلي. وباستخدام clickhouse-client مرة أخرى، أدرِج الملف عبر عبارة INFILE مع تعليمة INSERT INTO صريحة.
Query
6

تشغيل استعلامات نموذجية

فيما يلي بعض نماذج الاستعلامات لتستلهم منها أفكاراً لكتابة استعلاماتك الخاصة.

ما مدى شيوع موضوع “ClickHouse” في Hacker News؟

يوفر حقل score مقياسًا لشعبية القصص، في حين يمكن استخدام حقل id ومعامل الدمج || لإنشاء رابط للمنشور الأصلي.
Query
Response
هل يُنتج ClickHouse ضوضاءً أكثر بمرور الوقت؟ يتضح هنا الفائدة من تعريف الحقل time بوصفه DateTime، إذ يتيح استخدام نوع البيانات المناسب توظيف الدالة toYYYYMM():
Query
Response
يبدو أن شعبية “ClickHouse” في تزايد مستمر مع مرور الوقت.

من هم أكثر المعلّقين نشاطاً على المقالات المتعلقة بـ ClickHouse؟

Query
Response

ما التعليقات التي تُثير أكبر قدر من الاهتمام؟

Query
Response

Parquet

من نقاط قوة ClickHouse قدرته على التعامل مع طيف واسع من التنسيقات. ويمثّل CSV حالة استخدام شبه مثالية، لكنه ليس الخيار الأكثر كفاءة لتبادل البيانات. بعد ذلك، ستحمّل البيانات من ملف Parquet، وهو تنسيق عمودي فعّال. يوفّر Parquet مجموعة محدودة من الأنواع، ويجب على ClickHouse الالتزام بها، كما أن معلومات الأنواع هذه تكون مُرمَّزة في التنسيق نفسه. وسيؤدي الاستدلال على الأنواع في ملف Parquet حتمًا إلى مخطط يختلف قليلًا عن المخطط الخاص بملف CSV.
1

أدرِج البيانات

شغّل query التالية لقراءة البيانات نفسها بتنسيق Parquet، باستخدام دالة url مرة أخرى لقراءة البيانات عن بُعد:
مفاتيح NULL في Parquetيستنتج النظام مخططًا يجعل الأعمدة من النوع Nullable، لذا يلزم allow_nullable_key رغم أن مجموعة البيانات هذه لا تحتوي على أي معرّفات NULL.
شغّل الأمر التالي لعرض المخطط المستنتج:
Query
Response
تستخدم الخطوات المتبقية أسماء أعمدة أوضح، مثل author وcomment، لذا تابع باستخدام مخطط مُحدَّد يدويًا. احذف أولًا الجدول المُستنتَج، ثم أنشئ الجدول وأدرج البيانات مباشرةً من حاوية S3 العامة:
2

أضِف فهرسًا نصيًا لتسريع البحث

لمعرفة عدد التعليقات التي تشير إلى “ClickHouse”، نفِّذ الاستعلام التالي:
Query
Response
بعد ذلك، أنشئ فهرسًا نصيًا للعمود comment لتسريع هذا الاستعلام. يستخدم الفهرس النصي فهرسًا معكوسًا يربط الرموز المميزة بالصفوف التي تحتوي عليها. يقسّم محلّل الرموز splitByNonAlpha النص عند المحارف غير الأبجدية الرقمية. يستخدم الفهرس والاستعلامات lower(comment) مع مصطلحات بحث بأحرف صغيرة، بحيث لا تتأثر المطابقة بحالة الأحرف. يجب أن يتطابق تعبير الاستعلام مع التعبير المفهرس.شغّل الأوامر التالية لإنشاء الفهرس:
تقوم عملية المادية بإنشاء الفهرس للبيانات الموجودة. ينتظر الإعداد mutations_sync حتى تكتمل عملية المادية. يمكنك التحقق من تعريف الفهرس في جدول system.data_skipping_indices.شغّل الاستعلام نفسه مرة أخرى بعد اكتمال مادية الفهرس:
Query
Response
تظل النتيجة نفسها لأن الفهرس يغيّر طريقة عثور ClickHouse على الصفوف المطابقة، وليس الصفوف التي تُعدّ مطابقة. يعالج الاستعلام المفهرس بيانات أقل بكثير ويكتمل أسرع بكثير. استخدم EXPLAIN للتأكد من أن ClickHouse يخطط لاستخدام الفهرس:
Query
Response
يوضح الإدخال comment_idx أن ClickHouse يخطط لاستخدام فهرس النص. في هذا المثال، تختار الخطة 547 من أصل 3527 وحدة حبيبية، ما يقلل بدرجة كبيرة كمية البيانات التي يجري فحصها.يمكنك أيضًا البحث عن أي رمز مميز أو جميع الرموز المميزة المتعددة. تطابق هذه الدوال الرموز المميزة الكاملة التي ينتجها محلل الرموز المميزة الخاص بالفهرس. استخدم hasAnyTokens عندما يلزم تطابق رمز مميز واحد على الأقل:
Query
Response
استخدم hasAllTokens عندما يلزم تطابق جميع الوحدات النصية، بأي ترتيب:
Query
Response
آخر تعديل في ٢٦ أغسطس ٢٠٢٦