هندسة البيانات / دليل حلول تحريري
تشخيص فشل المخطط والربط والجودة
افحص المجتمع والقيم قبل تغيير حد الجودة، وافصل التحليل والنوع والمستوى العلاقي وقبول النشر.
قاعدة معرفة للقراءة فقط · بلا تعليقات عامة
تعرّف على الأعراض
قد يرتفع مبلغ التقرير بعد إضافة جدول، أو تنخفض أعداد المقبول بعد تغيير مخطط، أو ينجح المسار في فحوص الجودة بينما يبلغ المستهلكون عن سجلات مفقودة. قد تخفي المجاميع المعقولة والأعداد المتساوية هويات مسقطة أو تضاعف ربط أو تحويل أنواع غير متوافق. حدد إصدار المجموعة والعقد المتأثرين بدقة.
افهم الأسباب المحتملة
- تشمل الأسباب تفسير CSV أو JSON خاطئاً، وتغير الوحدة أو افتراض null، وقبول قيم منطقية كأعداد صحيحة، وشرط ربط أو مستأجر مفقوداً، وربط فرعين مستقلين، أو فحوصاً تقتصر على المعطى دون مجتمع المصدر الموعود. لا تثبت قراءة الملف أو SQL الصحيحة نحوياً معنى تجارياً صحيحاً.
ثبت الإصدار الفاشل ومستوى الصف المتوقع
سجل هويتي المصدر والخرج وإصداري المخطط والتحويل والفترة ومجتمع المفاتيح المتوقع وقواعد القبول. احتفظ بمثال مضاد اصطناعي صغير، لا بنسخ صفوف إنتاج خاصة إلى تذكرة. افصل أخطاء الفك والتحليل وتحويل النوع عن أخطاء العلاقات اللاحقة. قارن SQL الفعلية وأنواع معاملاتها المربوطة، لا تقريباً مكتوباً باليد. لا توسع حد قبول أو تحذف قيد تفرد لجعل المهمة ناجحة؛ حدد أولاً القاعدة أو المجتمع الذي يخالفه الخرج.
ارفض القيمة غير المتوافقة دون فقد هويتها
تسمح العينة المحلية بكميات int غير سالبة فقط وتستبعد bool عمداً، لأنها فرع من int في Python. يرفض النص "3" أيضاً وفق هذه السياسة. قد يسمح مصدر آخر بتحويل صريح مراجع، لكن القاعدة تعلن ولا تورث من اختصارات الحقيقة أو التحويل المريح. احفظ هوية المرفوض وسبباً محدوداً وفق سياسة الاحتفاظ؛ ولا تحول مبالغ مشوهة صفراً بصمت.
rows = [{'id': 'e1', 'qty': 3}, {'id': 'e2', 'qty': True}, {'id': 'e3', 'qty': '3'}]
def valid(row):
return type(row['qty']) is int and row['qty'] >= 0
print('accepted=' + str([r['id'] for r in rows if valid(r)]))
print('rejected=' + str([r['id'] for r in rows if not valid(r)]))
accepted=['e1']
rejected=['e2', 'e3']
تجتاز e1 فقط الفحص، وتبقى هويتا e2 وe3 مدخلين مرفوضين. هذه قاعدة محلية لا متحقق مخطط شامل.
افحص التعددية قبل تصحيح المجموع
يربط برنامج SQLite في الذاكرة بندين وثلاث دفعات لأصل واحد، فينتج ستة تراكيب ومجموعين مضخمين. يوضح الفشل، لا استعلاماً موصى به. جمع المقياسين مستقلين بمستوى الأصل قبل الجمع بينهما. لا تصلح DISTINCT على المبلغ؛ فقد تتساوى أحداث منفصلة مشروعة. اختبر الأصول الاختيارية وموضع شرط الفرع والمدخل الخالي أيضاً؛ فقد تخفي عينة فرع واحد مريحة العيب. لا يفتح البرنامج قرصاً أو قاعدة معدة.
import sqlite3
db = sqlite3.connect(':memory:')
db.executescript('CREATE TABLE line(parent INTEGER,amount INTEGER); CREATE TABLE payment(parent INTEGER,amount INTEGER); INSERT INTO line VALUES(1,10),(1,15); INSERT INTO payment VALUES(1,5),(1,8),(1,12);')
result = db.execute('SELECT SUM(l.amount),SUM(p.amount),COUNT(*) FROM line l JOIN payment p ON p.parent=l.parent').fetchone()
assert result == (75, 50, 6)
print(f'line_total={result[0]} payment_total={result[1]} rows={result[2]}')
db.close()
line_total=75 payment_total=50 rows=6
الصحيح المستقل25 و25، بينما يعطي الربط المباشر75 و50. يتوقع هذا الخرج للعينة المعطاة فقط.
صالح المجتمع الموعود قبل النشر
طبق تصحيح التحليل أو النوع أو العلاقة المراجع على مرشح معزول، وقارن المفاتيح والقيم المتوقعة الدقيقة. يتحقق حساب المقبول والمرفوض من المدخل المعطى فقط؛ افحص الملفات والفترات ووصف المصدر المتوقع منفصلاً. اربط نتائج الجودة بإصداري المدخل والتحويل للمرشح. إذا غير الإصلاح نتيجة منشورة، فنسق الاستبدال أو الفرق مع المستهلكين واحفظ دليل الرجوع. لا يعدل الدليل إنتاجاً أو حداً أو يستعلم مصدراً أو يعيد بيانات مشتركة.
تحقق من نجاح الإصلاح
اختبر حالات اصطناعية معتمدة للغائب وnull والصفر وfalse، والمفتاح المكرر، والأصل غير المطابق، والفروع المتعددة، والأخطاء المتعاكسة. تحقق من حفظ المرشح المصحح مجتمع المصدر والمجاميع المعنوية بمستواه المعلن. أعد اختبار رؤية المستهلك المنشورة، لا دالة التحويل أو درجة الجودة فقط.
امنع تكرار المشكلة
- حدد إصدارات الوحدات ومعاني المخطط، واحفظ المرفوض المحدود ووثق مستوى كل ربط وتجميع. استخدم فحوص المفتاح والعلاقة إلى جانب العدد، وراجع توافق الكاتب والقارئ الفعليين، وأظهر قواعد القبول الحرجة منفردة بدلاً من إخفائها بالمتوسط.