Skip to main content
يُعدّ توفر مجموعة شاملة من أنواع التاريخ والوقت أمرًا ضروريًا لإدارة بيانات السلاسل الزمنية بفعالية، وهذا ما يوفّره ClickHouse تمامًا. من تمثيلات التاريخ المضغوطة إلى الطوابع الزمنية عالية الدقة بدقة النانوثانية، صُممت هذه الأنواع لتحقيق توازن بين كفاءة التخزين والمتطلبات العملية لمختلف تطبيقات السلاسل الزمنية. سواء كنت تعمل مع بيانات مالية تاريخية، أو قراءات مستشعرات إنترنت الأشياء، أو أحداث مؤرخة في المستقبل، فإن أنواع التاريخ والوقت في ClickHouse توفّر المرونة اللازمة للتعامل مع مختلف سيناريوهات البيانات الزمنية. ويتيح تنوع الأنواع المدعومة تحسين كلٍّ من مساحة التخزين وأداء الاستعلام مع الحفاظ على مستوى الدقة الذي تتطلبه حالة الاستخدام لديك.
  • ينبغي أن يكون النوع Date كافيًا في معظم الحالات. ويتطلب هذا النوع 2 بايت لتخزين تاريخ، ويقتصر نطاقه على [1970-01-01, 2149-06-06].
  • يغطّي Date32 نطاقًا أوسع من التواريخ. ويتطلب 4 بايت لتخزين تاريخ، ويقتصر نطاقه على [1900-01-01, 2299-12-31]
  • يخزّن DateTime قيم التاريخ والوقت بدقة الثواني، ضمن نطاق [1970-01-01 00:00:00, 2106-02-07 06:28:15]. ويتطلب 4 بايت لكل قيمة.
  • في الحالات التي تتطلب دقة أعلى، يمكن استخدام DateTime64. ويتيح ذلك تخزين الوقت بدقة تصل إلى النانوثانية، ضمن نطاق [1900-01-01 00:00:00, 2299-12-31 23:59:59.99999999]. ويتطلب 8 بايت لكل قيمة.
لننشئ جدولًا يخزّن أنواعًا مختلفة من التاريخ:
يمكننا استخدام الدالة now() لإرجاع الوقت الحالي، واستخدام now64() للحصول عليه بدقة يحددها الوسيط الأول.
سيؤدي هذا إلى تعبئة الأعمدة بقيم الوقت وفقًا لنوع العمود:

النوعان Time وTime64

في الحالات التي تحتاج فيها إلى تخزين قيم الوقت ضمن اليوم من دون مكوّنات التاريخ، يوفّر ClickHouse النوعين Time وTime64، وقد أُضيفا في الإصدار 25.6. وهما مفيدان لتمثيل الجداول الزمنية المتكررة والأنماط اليومية، أو في الحالات التي يكون فيها فصل مكوّنات التاريخ والوقت منطقيًا.
يتطلب استخدام Time وTime64 تفعيل الإعداد: SET enable_time_time64_type = 1;أُضيف هذان النوعان في الإصدار 25.6
يخزّن النوع Time الساعات والدقائق والثواني بدقة الثواني. ويُخزَّن داخليًا على هيئة عدد صحيح موقّع من 32 بت، ويدعم نطاقًا مقداره [-999:59:59, 999:59:59]، مما يتيح قيَمًا تتجاوز 24 ساعة. وقد يكون هذا مفيدًا عند تتبّع الوقت المنقضي أو إجراء عمليات حسابية تنتج عنها قيَم خارج حدود يوم واحد. أما بالنسبة إلى الدقة دون الثانية، فيخزّن Time64 الوقت مع كسور الثواني القابلة للضبط كقيمة Decimal64 موقّعة. ويقبل معامل دقة (0-9) لتحديد عدد الخانات الكسرية. ومن قيم الدقة الشائعة 3 (مللي ثانية)، و6 (ميكروثانية)، و9 (نانوثانية). لا يدعم Time ولا Time64 المناطق الزمنية، إذ يمثلان قيَم وقت يوم خالصة من دون سياق إقليمي. لننشئ جدولًا يحتوي على أعمدة وقت:
يمكن إدراج قيم الوقت باستخدام سلاسل حرفية أو قيم رقمية. بالنسبة إلى Time، تُفسَّر القيم الرقمية على أنها ثوانٍ منذ 00:00:00. أما بالنسبة إلى Time64، فتُفسَّر القيم الرقمية على أنها ثوانٍ منذ 00:00:00، ويُفسَّر الجزء الكسري وفقًا لدقة العمود:
يمكن تصفية القيم الزمنية بسهولة:

المناطق الزمنية

تتطلب العديد من حالات الاستخدام تخزين المناطق الزمنية أيضًا. يمكن تعيين المنطقة الزمنية كوسيطة أخيرة للنوعين DateTime وDateTime64:
بعد تعريف المنطقة الزمنية في عبارة DDL الخاصة بنا، يمكننا الآن إدراج الأوقات باستخدام مناطق زمنية مختلفة:
والآن لنلقِ نظرة على ما في جدولنا:
في الصف الأول، أدخلنا جميع القيم باستخدام المنطقة الزمنية America/New_York.
  • يُحوَّل dt_1 و dt64_1 تلقائيًا إلى Europe/Berlin وقت تنفيذ الاستعلام.
  • لم تُحدَّد منطقة زمنية لـ dt_2 و dt64_2، لذا يستخدمان المنطقة الزمنية المحلية للخادم، وهي في هذه الحالة Europe/London.
في الصف الثاني، أدخلنا جميع القيم من دون منطقة زمنية، لذا استُخدمت المنطقة الزمنية المحلية للخادم. وكما في الصف الأول، يُحوَّل dt_1 و dt64_1 إلى Europe/Berlin، بينما يستخدم dt_2 و dt64_2 المنطقة الزمنية المحلية للخادم.

دوال التاريخ والوقت

يوفّر ClickHouse أيضًا مجموعة من الدوال التي تتيح التحويل بين أنواع البيانات المختلفة. على سبيل المثال، يمكننا استخدام toDate لتحويل قيمة DateTime إلى النوع Date:
يمكن استخدام toDateTime64 لتحويل DateTime إلى DateTime64:
ويمكننا استخدام toDateTime للتحويل من Date أو DateTime64 مرة أخرى إلى DateTime:
آخر تعديل في ٣ يوليو ٢٠٢٦