هندسة البيانات / الأساسي: العقود والدفعات القابلة للإعادة / الدرس 3
المخططات والأنواع والفراغ والزمن
احفظ المعنى بالنوع والوحدة والزمن الصريحين، وميز الغياب وnull والصفر والخطأ بدلاً من تحويلها لنجاح ظاهري.
في هذه الصفحة
أهداف الدرس
- تحديد المجالات وفشل التحويل المقبول.
- تمثيل المبلغ الدقيق واللحظة الواضحة.
يشمل المخطط معنى يتجاوز الأسماء
يصف عقد حقل الإنتاج نوعه ووحدته ومجاله وقبول null وطريقة تفسيره. قد تعني weight غرامات أو كيلوغرامات، وقد تشير updated_at إلى تعديل المصدر أو الاستقبال أو النشر. ليس النص الذي يشبه الصحيح معرفاً متحققاً تلقائياً. تجنب التحويل الضمني الذي يخلط false والصفر أو الغياب والنص الفارغ. حدد إصدار التغييرات الدلالية حتى عندما يبقى النوع الفيزيائي كما هو. يعتمد المستهلكون على هذه المعاني للربط والتجميع وتحديد ما إذا كان السجل حديثاً بما يكفي.
احفظ الغياب وnull كمدخلين منفصلين
يميز المصنف المحلي حقل الكمية الغائب، وقيمة null الصريحة، والصفر الفعلي. لا يدعي أن جميع التدفقات ملزمة بثلاث حالات؛ فمالك المجموعة يقرر أيها متكافئ. يجب أن تحتفظ دالة التحويل بما يكفي من الدليل لتنفيذ ذلك القرار. يدمج اختبار الحقيقة المختصر if not value قيماً عدة في Python، وقد يكون أوسع من المطلوب. اختبر النص الفارغ وfalse والقيم الخاطئة منفصلة، قبل استخدام تعبير مريح في مكتبة إدخال مشتركة.
def classify(row):
if 'qty' not in row:
return 'missing'
if row['qty'] is None:
return 'null'
return 'present'
assert classify({}) == 'missing'
assert classify({'qty': None}) == 'null'
assert classify({'qty': 0}) == 'present'
الصفر موجود، ولا تتحقق الدالة من صلاحية كل موجود ككمية.
اختر الدقة وسياسة الرفض صراحة
ليست العائمة الثنائية تمثيلاً عاماً للمال أو للأعداد العشرية الدقيقة. استخدم أعداداً صحيحة بوحدات صغرى معلنة، أو نوعاً عشرياً مناسباً بمقياس وسياسة تقريب صريحين. حدد نتيجة الفيض أو تجاوز المقياس أو النص العددي غير الصحيح؛ فقد يخفي القص أو الاستبدال الصامت أخطاء مالية. قبول المحلل قيمة لا يثبت انتماءها للمجال التجاري. احفظ تمثيل المصدر مع سجل رفض محدود عند الحاجة، مع تجنب الاحتفاظ بحمولات حساسة غير لازمة في سجلات التشغيل المعتادة.
طبع اللحظة دون فقد سياق المصدر
يبين المثال من المكتبة المعيارية طابعين بإزاحتين مختلفتين يشيران إلى لحظة UTC نفسها. يستخدم إزاحات صريحة بدلاً من تخمين منطقة لمدخل محلي بلا معلومات منطقة. لا يحتفظ التطبيع تلقائياً باسم المنطقة الأصلية أو قصد التوقيت المدني، فاحفظهما منفصلين عندما يطلبهما العقد. قد تختلف حدود اليوم عند الانتقال الصيفي؛ فتاريخ استقبال السجل وتاريخ الحدث المحلي خياران مختلفان للتقسيم. لا تسم كل الطوابع UTC بمجرد إلحاق حرف بسلسلة مثلت أصلاً ساعة غير معلومة.
from datetime import datetime, timezone
a = datetime.fromisoformat('2026-10-01T10:00:00+00:00')
b = datetime.fromisoformat('2026-10-01T12:00:00+02:00')
assert a == b
assert b.astimezone(timezone.utc).isoformat() == '2026-10-01T10:00:00+00:00'
تحددان اللحظة نفسها دون خدمة مناطق أو ساعة حدث حقيقية.
اختبر تغير المخطط مع القراء الفعليين
قد تؤثر إضافة حقل أو توسيع نوع أو تغيير قيمة افتراضية في القراء بصورة مختلفة بحسب التسلسل والتخزين. قواعد حل مخططي الكاتب والقارئ في Avro مثال محدد، وليست وعداً بأن كل الصيغ تتطور بالطريقة نفسها. حدد القراء القدامى والجدد والحقول المطلوبة وافتراضات التحويل قبل الإطلاق. لا يفيد وسم الإصدار إلا إذا احترم المنتج والمستهلك معناه. اختبر سجلات قديمة وجديدة وناقصة وخاطئة، وانشر المخطط المقبول مع إصدار البيانات بدلاً من اكتشاف التغيير عبر مجاميع غير صحيحة.
الأخطاء الشائعة وإصلاحها
يحول الغائب صفراً
- لماذا يحدث؟
- اختلط الوجود والكمية.
- كيف تصلحه؟
- مثل الحالات وطبق السياسة.
- كيف تتجنب تكراره؟
- اختبر الغياب وnull والصفر وfalse والفراغ.
يتغير الوقت بتغير منطقة العميل
- لماذا يحدث؟
- فسر المحلي دون منطقة متفق عليها.
- كيف تصلحه؟
- حدد الساعة والمنطقة وطبع الصحيح.
- كيف تتجنب تكراره؟
- ضمّن الإزاحة وحد الساعة الصيفية.
يثبت النوع ويتغير المجموع
- لماذا يحدث؟
- تغيرت الوحدة أو الافتراض بلا إصدار دلالي.
- كيف تصلحه؟
- حدد الإصدار وصالح المعنى.
- كيف تتجنب تكراره؟
- راجع الوحدة والمجال مع المخطط.
اختبر فهمك
1. يغير المصدر الوزن من كيلوغرام لغرام ويبقى صحيحاً. هل هو متوافق بلا أثر؟
اعرض الحل المشروح
لا. قد يبقى النوع الفيزيائي صالحاً بينما يتغير المعنى بمعامل ألف. راجع العقد وحدد المستهلكين المتأثرين، ثم حول البيانات أو حدد إصدارها بوعي. ينبغي أن تشمل الفحوص قيماً ووحدات ممثلة، لا مجرد نجاح التحليل وعدد القيم غير الفارغة.
2. ما المجهول بعد تحويل وقت ذي إزاحة إلىUTC؟
اعرض الحل المشروح
قد يبقى اسم المنطقة الأصلية ودقة ساعة المصدر وقاعدة التوقيت المدني المقصودة مجهولاً ما لم يسجل منفصلاً. يحدد التطبيع لحظة وفق الإزاحة المقدمة؛ ولا يثبت أن ساعة المنتج صحيحة، أو يعيد بناء اسم منطقة زمنية من الإزاحة وحدها.
أهم ما تعلمته
- يشكل النوع والوحدة والوجود والساعة عقداً.
- نجاح التحليل أضعف من صحة المعنى.