عملية ETL - إرجاع المفتاح الأساسي
-
22-09-2019 - |
سؤال
أنا أستخدم Talend لملء مستودع البيانات. وظيفتي هي كتابة بيانات العميل إلى جدول الأبعاد وبيانات المعاملات إلى جدول الحقائق. مفتاح البديل (p_key) على جدول الحقائق هو التلقائي التلقائي. عندما أقوم بإدخال عميل جديد ، أحتاج إلى جدول الحقائق الخاص بي لتعكس معرف العميل ذي الصلة.
كما ذكرت أن p_key الخاص بي هو Auto Auto_incrementing ، لذا لا يمكنني فقط إدراج قيمة تعسفية لـ P_Key.
أي فكرة عن كيفية إدراج صف في جدول الأبعاد الخاص بي ولا يزال يسترجع المفتاح الأساسي للإشارة في سجل الحقائق الخاص بي؟
مزيد من المعلومات:
ماذا لو لم يتم تطبيع البيانات الواردة؟ على سبيل المثال لدي CSV مع البيانات التالية:
order # date total customer# first_name last_name
111 1/2/2010 500 101 John Smith
222 1/3/2010 600 101 John Smith
من الواضح ، أريد أن تظهر معلومات العميل في جدول الأبعاد ، وبيانات المعاملة في جدول الحقائق:
dimension
101 john smith
fact
111 1/3/2010
222 1/3/2010
كما ذكرت ، سيكون مفتاح جدول الأبعاد زيادة تلقائية. يحتاج جدول الحقائق إلى الرجوع إلى هذا المفتاح. كيف يمكنك تصميم وظيفة ETL بحيث يتم إرجاع مفتاح البديل بعد إدراج؟
أيضًا ، إذا تم إلغاء بيانات العميل (على النحو الوارد أعلاه) ، فكيف تتعامل مع المفاتيح؟
المحلول
ربما أسيء فهمك لمشكلة ، ولكن:
قد يكون لدى جدول الحقائق أو لا يحتوي على PK المتمثل في التلقائي ، وعادة ما يكون PK في جدول الحقائق هو مركب من عدة جداول أبعاد مرجعية FKS.
يجب أن يحتوي جدول الأبعاد على PK.
يجب على العميل الجديد "الهبوط" في جدول أبعاد العميل قبل أن تصل حقيقة المعاملة إلى DW (أو على الأقل جدول الحقائق).
يجب أن يحتوي جدول الأبعاد على BusinessKey الذي يحدد بشكل فريد عميل - مثل البريد الإلكتروني أو الاسم الكامل + PIN أو ما شابه.
يجب أن يكون صف المعاملات الواردة حقل عمل العميل أيضًا - هكذا نحدد العميل.
استخدم BusinessKey للبحث عن Customer PrimaryKey من جدول أبعاد العميل قبل إدخال المعاملة في جدول الحقائق.
تعديل
إذا تم تجميع بيانات العميل الجديدة مع المعاملة ، فابحث عن طريقة لاستخراج بيانات العميل وتوجيهها إلى DW قبل المعاملة.
تحديث:
تحميل DimCustomer أولاً ، اتخاذ قرار بشأن BusinessKey - لذلك يبدو البعد:
CustomerKey = 12345 (auto-incremented)
CustomerBusinessKey = john_smith_101 (must uniquely identify the John Smith)
CustomerFirstName = John
CustomerLastName = Smith
أثناء عملية تحميل الأبعاد ، يجب عليك فصل الصفوف الواردة int اثنين من الدفقين ، العملاء الحاليين والجدد. تحديث الصفوف من دفق "العميل الحالي" الجدول DIM (النوع 1 SCD) ، بينما يتم إدراج صفوف من دفق "العميل الجديد". لا ينبغي أن يكون هناك تكرارات في تيار الصفوف التي يتم إدخالها ؛ يمكنك تحقيق ذلك عن طريق إدخالها في طاولة التدريج وإزالة التكرارات هناك ، قبل الإدراج النهائي مباشرة في جدول الأبعاد. يمكنك أيضًا استخراج التكرارات وتوجيهها مرة أخرى إلى عملية التحميل لتحديث سجلات العملاء ؛ قد تحتوي على بيانات أحدث - مثل أرقام الهواتف المحدثة أو ما شابه.
بمجرد دخول العميل ، تحميل الحقائق.
يجب أن تبدو جدول الحقائق شيئًا مثل:
DateKey (PK)
CustomerKey
OrderNumber (PK)
Total
لقد استخدمت المفتاح الأساسي المركب لـ DateKey و Ordernumber ، مما يسمح بإعادة ضبط تسلسل رقم الطلب من وقت لآخر.
أثناء عملية التحميل ، قم بتعديل سجل الحقيقة لتبدو شيئًا مثل:
DateKey CustomerBusinessKey OrderNumber Total
20100201 john_smith_101 111 500
20100301 john_smith_101 222 600
في هذه المرحلة ، نحتاج إلى استبدال CustomerBusinessKey مع CustomerKey من جدول الأبعاد باستخدام البحث. لذلك ، بعد البحث ، سيبدو الدفق:
DateKey CustomerKey OrderNumber Total
20100201 12345 111 500
20100301 12345 222 600
يمكن الآن إدراج هذا في جدول الحقائق.
لقد خدعت أيضًا قليلاً - لم أبحث عن مفتاح تاريخ من Dimdate ، ولم أكن أبحث عن الصفوف الموجودة في جدول الحقائق. عند تحميل جدول الحقائق ، يمكنك البحث عن مجموعة موجودة (DateKey ، OrderNumer) قبل التحميل ، أو يمكنك تركه حتى المفتاح الأساسي لحماية التكرارات مرة أخرى - اختيارك. في أي حال ، تأكد من فشل محاولة إعادة تحميل نفس البيانات في جدول الحقائق.