تحويل البيانات باستخدام الروابط وعوامل المجموعة

مكتمل

غالبا ما تتطلب سير العمل في هندسة البيانات دمج المعلومات من مجموعات بيانات متعددة. تقوم الروابط بدمج الجداول أفقيا عن طريق مطابقة الصفوف على الأعمدة المرتبطة، بينما تجمع عوامل المجموعات الجداول عموديا عن طريق إضافة أو تقاطع أو استبعاد الصفوف. فهم متى تستخدم كل نهج يساعدك على بناء خطوط تحويل فعالة.

في هذه الوحدة، تتعلم كيفية دمج الجداول بناء على العلاقات وتطبيق عوامل المجموعات لدمج مجموعات البيانات مع المخططات المتطابقة.

جداول الدمج مع الروابط

ينضم الصفوف من جدولين بناء على عمود ذي صلة. نوع الانضمام يحدد الصفوف التي تظهر في النتيجة وكيفية التعامل مع الصفوف غير المتطابقة.

مخطط يشرح دمج الجداول مع الوصلات.

فهم أنواع الانضمام

كل نوع من الانضمام يخدم غرضا محددا في تحويل البيانات:

مخطط يوضح أنواع الوصلات المختلفة.

نوع الانضمام Description حالة الاستخدام
INNER يعيد فقط صفوف مطابقة من كلا الجدولين ربط الطلبات مع العملاء الصحيحين
LEFT يعيد جميع صفوف الجدول اليسرى؛ تضيف قواعد NULL للجدول الأيمن عندما لا يوجد تطابق أدرج جميع العملاء، حتى بدون طلبات
RIGHT يرجع جميع صفوف الجدول اليمنى؛ تضيف NULLs للجدول الأيسر عندما لا يوجد تطابق يشمل جميع الأقسام، حتى بدون موظفين
FULL يعيد جميع الصفوف من كلا الجدولين؛ يضيف NULLs لغير المتطابقين دمج مجموعات البيانات لإيجاد الفجوات على كلا الجانبين
SEMI يرجع صفوف الجدول الأيسر التي تحتوي على تطابقات في الجدول الأيمن تصفية العملاء الذين وضعوا طلبات
ANTI يرجع صفوف الجدول الأيسر التي لا يوجد لها تطابق في الجدول الأيمن ابحث عن عملاء لم يقدموا طلبات من قبل
CROSS يعيد حاصل ضرب ديكارتي لجميع الصفوف توليد جميع التركيبات الممكنة

ربط الجداول باستخدام SQL

تجمع الجملة JOIN الجداول بناء على شرط محدد مع ON أو USING. فكر في جداول الموظفين والأقسام التي تريد فيها مطابقة الموظفين مع أقسامهم:

-- Inner join: only employees with matching departments
SELECT e.id, e.name, e.deptno, d.deptname
FROM employee e
INNER JOIN department d ON e.deptno = d.deptno;

الوصلة الداخلية تعيد فقط ثلاثة صفوف — أي موظفون توجد أرقام أقسامهم في جدول الأقسام. الموظفون في الأقسام 4 و5 و6 لا يظهرون لأن تلك الأقسام ليست في جدول الأقسام.

عندما تحتاج إلى تضمين جميع الموظفين بغض النظر عن مطابقات الأقسام، استخدم الربط الأيسر:

-- Left join: all employees, NULL for missing departments
SELECT e.id, e.name, e.deptno, d.deptname
FROM employee e
LEFT JOIN department d ON e.deptno = d.deptno;

هذا يعيد جميع الموظفين الستة. أما الذين لا يوجد أقسام مطابقة فيظهرون deptname NULL في العمود.

انضم إلى DataFrames مع PySpark

طريقة PySpark join() توفر نفس الوظيفة. يحدد المعامل how نوع الانضمام:

df_employee = spark.table("employee")
df_department = spark.table("department")

# Inner join
df_inner = df_employee.join(
    df_department,
    on=df_employee.deptno == df_department.deptno,
    how="inner"
)
display(df_inner)

بالنسبة للروابط الخارجية اليسرى أو اليمنى أو الكاملة، غير how المعامل:

# Left join: keep all employees
df_left = df_employee.join(
    df_department,
    on="deptno",
    how="left"
)

# Full outer join: keep all rows from both tables
df_full = df_employee.join(
    df_department,
    on="deptno",
    how="full"
)

عندما يحمل عمود الانضمام نفس الاسم في كلا الإطار البياني، قم بتمرير اسم العمود كسلسلة نصية. هذا النهج يتجنب الأعمدة المكررة في النتيجة.

تصفية البيانات باستخدام الوصلات شبه الدقيقة والمضادة

ال semi وanti joins قويان لتصفية البيانات بناء على وجودها في جدول آخر. الانضمام الجزئي يعيد صفوفا من الجدول الأيسر تحتوي على مطابقات، دون تضمين أعمدة من الجدول الأيمن:

-- Find employees who belong to listed departments
SELECT *
FROM employee
LEFT SEMI JOIN department ON employee.deptno = department.deptno;

الانضمام المضاد يعطي العكس — صفوف بدون مطابقات:

-- Find employees in departments not listed
SELECT *
FROM employee
LEFT ANTI JOIN department ON employee.deptno = department.deptno;

في PySpark، استخدم how="semi" أو how="anti":

# Employees with matching departments
df_semi = df_employee.join(df_department, on="deptno", how="semi")

# Employees without matching departments
df_anti = df_employee.join(df_department, on="deptno", how="anti")

دمج الصفوف مع عوامل المجموعات

تعمل عوامل المجموعات عموديا، حيث تجمع بين الصفوف من الاستعلامات ذات نفس هيكل الأعمود. على عكس الانضمامات، لا تتطابق عوامل المجموعات على شروط—بل تكدس أو تقارن مجموعات النتائج بالكامل.

مخطط يشرح كيفية دمج الصفوف مع عوامل المجموعة.

فهم مؤثرات المجموعات

يدعم Azure Databricks ثلاثة مشغلات مجموعة:

المشغل Description Behavior
UNION يجمع بين الصفوف من كلا الاستعلامات تزيل النسخ المكررة بشكل افتراضي؛ كان يحتفظ ALL بها
INTERSECT يرجع الصفوف الموجودة في كلا الاستعلامات تظهر فقط صفوف متطابقة
EXCEPT يرجع الصفوف من الاستعلام الأول غير موجود في الثاني إزالة التكرارات بشكل افتراضي

يجب أن يكون لكلا الاستعلامين نفس عدد الأعمدة ذات أنواع البيانات المتوافقة.

دمج مجموعات البيانات مع UNION

UNION يضيف صفوفا من استعلام إلى آخر. بشكل افتراضي، يزيل التكرارات:

-- Combine active and archived customers (no duplicates)
SELECT customer_id, name, email FROM active_customers
UNION
SELECT customer_id, name, email FROM archived_customers;

للحفاظ على جميع الصفوف بما في ذلك النسخ المكررة، استخدم UNION ALL:

-- Combine all rows, keeping duplicates
SELECT customer_id, name, email FROM active_customers
UNION ALL
SELECT customer_id, name, email FROM archived_customers;

استخدمها UNION ALL عندما تعلم أنه لا توجد نسخ مكررة أو عندما تكون النسخ ذات معنى. يؤدي ذلك بشكل أفضل لأنه يتجاوز خطوة إزالة التكرار.

في PySpark، يستخدم union() دمج DataFrames. لاحظ أن PySpark union() يتصرف كما UNION ALLلو — يحتفظ بالتكرارات:

df_active = spark.table("active_customers")
df_archived = spark.table("archived_customers")

# Combine both tables (keeps duplicates)
df_combined = df_active.union(df_archived)

# Remove duplicates if needed
df_distinct = df_active.union(df_archived).distinct()

ابحث عن الصفوف المشتركة مع INTERSECT

INTERSECT يعيد فقط الصفوف التي تظهر في كلا الاستعلامين. يساعد ذلك في تحديد البيانات المتداخلة:

-- Find customers in both active and archived tables
SELECT customer_id FROM active_customers
INTERSECT
SELECT customer_id FROM archived_customers;

يحدد هذا الاستعلام العملاء الذين يظهرون بطريقة ما في كلا الجدولين—وهو أمر مفيد لفحوصات جودة البيانات أو تحديد السجلات التي تحتاج إلى مطابقة.

استبعد الصفوف التي تحتوي على EXCEPT

EXCEPT يرجع الصفوف من الاستعلام الأول التي لا توجد في الثاني. يساعد ذلك في تحديد الثغرات أو السجلات الفريدة:

-- Find active customers not in the archived table
SELECT customer_id FROM active_customers
EXCEPT
SELECT customer_id FROM archived_customers;

يمكنك أيضا استخدامه MINUS كمرادف ل EXCEPT:

-- Same result using MINUS syntax
SELECT customer_id FROM active_customers
MINUS
SELECT customer_id FROM archived_customers;

مثل UNION، كلاهما INTERSECT وإزالة EXCEPT النسخ المكررة بشكل افتراضي. أضف ALL ذلك للحفاظ على النسخ عند الحاجة.

Tip

عند ربط عمليات المجموعة، تذكر أن لها INTERSECT أولوية أعلى من UNION و EXCEPT. استخدم الأقواس للتحكم في ترتيب التقييم.

اختر بين الروابط ومؤثرات المجموعات

يعتمد الاختيار بين الروابط والمؤثرات المجموعات على هدف التحويل الخاص بك. تجمع الروابط الأعمدة من الجداول ذات الصلة أفقيا، بينما تجمع عوامل المجموعات الصفوف عموديا.

استخدم الوصلات عندما تحتاج:

  • إثراء السجلات بإضافة أعمدة من جداول ذات صلة
  • سجلات المباريات بناء على العلاقات الرئيسية
  • تصفية البيانات بناء على وجود جدول آخر (شبه انضمام/مضاد)

استخدم عوامل التعيين عندما تحتاج:

  • إضافة سجلات من مصادر متعددة ذات مخططات متطابقة
  • ابحث عن السجلات الشائعة عبر مجموعات البيانات
  • تحديد السجلات الفريدة لمجموعة بيانات واحدة

كلا النهجين يشكلان أساس خطوط تحويل البيانات الفعالة. في الوحدة التالية، تستكشف كيفية تحميل البيانات المحولة إلى جداول الهدف ضمن كتالوج Unity.