Skip to main content
يوفّر ClickHouse عدة أساليب للتعامل مع بيانات السلاسل الزمنية، ما يتيح لك تجميع نقاط البيانات وتحليلها عبر فترات زمنية مختلفة. يغطي هذا القسم العمليات الأساسية الشائعة عند العمل مع البيانات المستندة إلى الوقت. تشمل العمليات الشائعة تجميع البيانات حسب الفترات الزمنية، ومعالجة الفجوات في بيانات السلاسل الزمنية، وحساب التغيّرات بين الفترات الزمنية. يمكن تنفيذ هذه العمليات باستخدام بناء جملة SQL القياسي مع دوال الوقت المضمّنة في ClickHouse. سنستعرض إمكانات ClickHouse للاستعلام عن السلاسل الزمنية باستخدام مجموعة بيانات Wikistat (بيانات مشاهدات صفحات Wikipedia):
لنقم بملء هذا الجدول بمليار سجل:

التجميع حسب الفترات الزمنية

أكثر المتطلبات شيوعًا هو تجميع البيانات على أساس فترات زمنية، مثل الحصول على العدد الإجمالي للزيارات لكل يوم:
لقد استخدمنا هنا الدالة toDate()، التي تحوّل الوقت المحدد إلى النوع Date. وبدلًا من ذلك، يمكننا التجميع على أساس كل ساعة مع التصفية حسب التاريخ المحدد:
تُحوِّل الدالة toStartOfHour() المستخدمة هنا الوقت المحدد إلى بداية الساعة. يمكنك أيضًا التجميع حسب السنة أو الربع أو الشهر أو اليوم.

فترات التجميع المخصصة

يمكننا حتى التجميع حسب فترات زمنية اعتباطية، مثل 5 دقائق، باستخدام الدالة toStartOfInterval(). لنفترض أننا نريد التجميع حسب فترات مدتها 4 ساعات. يمكننا تحديد فترة التجميع باستخدام البند INTERVAL:
أو يمكن استخدام الدالة toIntervalHour()
في كلتا الحالتين، تكون النتائج كما يلي:

ملء المجموعات الفارغة

في كثير من الحالات، نتعامل مع بيانات متفرقة تتضمن بعض الفترات الزمنية المفقودة. وينتج عن ذلك مجموعات فارغة. لنأخذ المثال التالي حيث نُجمِّع البيانات ضمن فترات زمنية مدتها ساعة واحدة. سينتج عن ذلك الإحصاءات التالية، مع غياب القيم لبعض الساعات:
يوفّر ClickHouse المُعدِّل WITH FILL لمعالجة ذلك. سيملأ هذا جميع الساعات الفارغة بالأصفار، مما يتيح لنا فهم التوزيع عبر الزمن بصورة أفضل:

النوافذ الزمنية المتحركة

أحيانًا، لا نريد التعامل مع بدايات الفترات الزمنية (مثل بداية يوم أو ساعة)، بل مع نوافذ زمنية. لنفترض أننا نريد فهم إجمالي hits لنافذة زمنية، ليس على أساس الأيام بل على أساس فترة من 24 ساعة تبدأ من الساعة 6 مساءً. يمكننا استخدام الدالة date_diff() لحساب الفرق بين وقت مرجعي ووقت كل سجل. في هذه الحالة، سيمثل العمود day الفرق بالأيام (على سبيل المثال: قبل يوم واحد، قبل يومين، وهكذا):
آخر تعديل في ٢٩ يونيو ٢٠٢٦