تبسيط التحويل في رسم خرائط تدفق البيانات

ينطبق على: Azure Data Factory Azure Synapse Analytics

تتوفر تدفقات البيانات في خطوط أنابيب Azure Data Factory وخطوط أنابيب Azure Synapse Analytics. تنطبق هذه المقالة على تعيين تدفقات البيانات. إذا كنت جديدا في مجال التحويلات، فراجع المقالة التمهيدية تحويل البيانات باستخدام تعيين تدفقات البيانات.

تلميح

للحصول على التحويل المكافئ (عمود التوسيع) في Dataflow Gen2، راجع دليل Dataflow Gen2 لمستخدمي خريطة تدفق البيانات.

قم باستخدام التحويل المبسط لأخذ قيم الصفيف داخل الهياكل الهرمية مثل JSON وافتحها في صفوف فردية. تُعرف هذه العملية بإلغاء البيانات المكررة.

التكوين

يحتوي التحويل المبسط على إعدادات التكوين التالية.

لقطة شاشة تعرض إعدادات التسطيح.

Unroll من قِبل

تحديد صفيف لإلغاء التسجيل. تحتوي بيانات الإخراج على صف واحد لكل عنصر في كل مصفوفة. إذا كان الفك حسب المصفوفة في صف الإدخال فارغا أو فارغا، فهناك صف إخراج واحد بقيم غير ملفوفة كصفر. يمكنك فتح أكثر من مصفوفة واحدة في كل تحويل مسطح. اختر زر الجمع (+) لتضمين عدة مصفوفات في تحويل واحد من Flatten. يمكنك استخدام دالات تعريف تدفق بيانات ADF هنا بما في ذلك nametype واستخدام مطابقة النمط إلى صفائف unroll التي تطابق تلك المعايير. عند تضمين عدة مصفوفات في تحويل مسطح واحد، تكون نتائجك حاصل ضرب ديكارتي لجميع قيم المصفوفة الممكنة.

لقطة شاشة تعرض النتائج المبسطة.

جذر Unroll

بشكل افتراضي، تحويل تبسيط صفيف unrolls إلى أعلى التسلسل الهرمي موجود في. يمكنك اختياريًا تحديد مصفوفة كجذر unroll الخاص بك. يلزم أن يكون جذر unroll صفيفة من الكائنات المعقدة التي إما يكون أو يحتوي على unroll من قِبل الصفيف. إذا تم اختيار جذر فك الرمية، تحتوي بيانات الإخراج على صف واحد على الأقل لكل عنصر في جذر الفك. إذا لم يكن لدى صف الإدخال أي عناصر في جذر الفتح، يتم إسقاطه من بيانات الإخراج. اختيار جذر unroll دائما ينتج عددا أقل أو مساويا من الصفوف مقارنة بالسلوك الافتراضي.

رسم المخططات بالتبسيط

على غرار التحويل المحدد، قم باختيار إسقاط البنية الجديدة من الحقول الواردة ونشر تكرار الصفيف. إذا تم تعيين مصفوفة غير طبيعية، فإن عمود الإخراج يكون من نفس نوع البيانات مثل المصفوفة. إذا كانت الفك حسب المصفوفة عبارة عن مصفوفة من الكائنات المعقدة التي تحتوي على مصفوفات فرعية، فإن تعيين عنصر من تلك الفرعية يخرج مصفوفة (subarry).

ارجع إلى علامة التبويب لفحص ومعاينة البيانات للتحقق من إخراج التعيين.

التعيين المسند للقواعد

يدعم تحويل التسوية التعيين القائم على القواعد، مما يسمح لك بإنشاء تحويلات ديناميكية ومرنة تسطيح المصفوفات بناء على القواعد وتسطيح الهياكل بناء على مستويات التسلسل الهرمي.

نمط التبسيط

شرط المطابقة

قم بإدخال شرط مطابقة النمط للعمود أو الأعمدة التي ترغب في تبسيطها باستخدام المطابقة أو الأنماط. مثال: like(name,'cust%')

تجاوز العمود العميق

إعداد اختياري يخبر الخدمة بالتعامل مع جميع الأعمدة الفرعية لعنصر فردي معقد بدلاً من معالجة الكائن المعقد كعمود كامل.

مستوى التسلسل الهرمي {0}

اختر مستوى التسلسل الهرمي الذي ترغب في توسيعه.

مطابقة الاسم (تعبير عادي)

اختياريا اختيار التعبير عن مطابقة اسمك كتعبير منتظم في هذا المربع، بدلا من استخدام شرط المطابقة.

الأمثلة

ارجع لعنصر JSON التالي للحصول على الأمثلة التالية للتحويل المبسط

{
  "name":"MSFT","location":"Redmond", "satellites": ["Bay Area", "Shanghai"],
  "goods": {
    "trade":true, "customers":["government", "distributer", "retail"],
    "orders":[
        {"orderId":1,"orderTotal":123.34,"shipped":{"orderItems":[{"itemName":"Laptop","itemQty":20},{"itemName":"Charger","itemQty":2}]}},
        {"orderId":2,"orderTotal":323.34,"shipped":{"orderItems":[{"itemName":"Mice","itemQty":2},{"itemName":"Keyboard","itemQty":1}]}}
    ]}}
{"name":"Company1","location":"Seattle", "satellites": ["New York"],
  "goods":{"trade":false, "customers":["store1", "store2"],
  "orders":[
      {"orderId":4,"orderTotal":123.34,"shipped":{"orderItems":[{"itemName":"Laptop","itemQty":20},{"itemName":"Charger","itemQty":3}]}},
      {"orderId":5,"orderTotal":343.24,"shipped":{"orderItems":[{"itemName":"Chair","itemQty":4},{"itemName":"Lamp","itemQty":2}]}}
    ]}}
{"name": "Company2", "location": "Bellevue",
  "goods": {"trade": true, "customers":["Bank"], "orders": [{"orderId": 4, "orderTotal": 123.34}]}}
{"name": "Company3", "location": "Kirkland"}

لا يوجد جذر unroll مع صفيف سلسلة

Unroll من قِبل جذر Unroll إسقاط
البضائع. العملاء بلا اسم
العميل = البضائع. العميل

المخرجات

{ 'MSFT', 'government'}
{ 'MSFT', 'distributer'}
{ 'MSFT', 'retail'}
{ 'Company1', 'store'}
{ 'Company1', 'store2'}
{ 'Company2', 'Bank'}
{ 'Company3', null}

لا يوجد جذر unroll مع صفيف معقد

Unroll من قِبل جذر Unroll إسقاط
goods.orders.shipped.orderItems بلا اسم
orderId = goods.orders.orderId
itemName = goods.orders.shipped.orderItems.itemName
itemQty = goods.orders.shipped.orderItems.itemQty
الموقع= الموقع

المخرجات

{ 'MSFT', 1, 'Laptop', 20, 'Redmond'}
{ 'MSFT', 1, 'Charger', 2, 'Redmond'}
{ 'MSFT', 2, 'Mice', 2, 'Redmond'}
{ 'MSFT', 2, 'Keyboard', 1, 'Redmond'}
{ 'Company1', 4, 'Laptop', 20, 'Seattle'}
{ 'Company1', 4, 'Charger', 3, 'Seattle'}
{ 'Company1', 5, 'Chair', 4, 'Seattle'}
{ 'Company1', 5, 'Lamp', 2, 'Seattle'}
{ 'Company2', 4, null, null, 'Bellevue'}
{ 'Company3', null, null, null, 'Kirkland'}

نفس الجذر مثل صفيف unroll

Unroll من قِبل جذر Unroll إسقاط
البضائع. الأوامر البضائع. الأوامر اسم
goods.orders.shipped.orderItems.itemName
goods.customers
مكان

المخرجات

{ 'MSFT', ['Laptop','Charger'], ['government','distributer','retail'], 'Redmond'}
{ 'MSFT', ['Mice', 'Keyboard'], ['government','distributer','retail'], 'Redmond'}
{ 'Company1', ['Laptop','Charger'], ['store', 'store2'], 'Seattle'}
{ 'Company1', ['Chair', 'Lamp'], ['store', 'store2'], 'Seattle'}
{ 'Company2', null, ['Bank'], 'Bellevue'}

جذر unroll مع صفيف معقد

Unroll من قِبل جذر Unroll إسقاط
goods.orders.shipped.orderItem البضائع. الأوامر اسم
orderId = goods.orders.orderId
itemName = goods.orders.shipped.orderItems.itemName
itemQty = goods.orders.shipped.orderItems.itemQty
الموقع= الموقع

المخرجات

{ 'MSFT', 1, 'Laptop', 20, 'Redmond'}
{ 'MSFT', 1, 'Charger', 2, 'Redmond'}
{ 'MSFT', 2, 'Mice', 2, 'Redmond'}
{ 'MSFT', 2, 'Keyboard', 1, 'Redmond'}
{ 'Company1', 4, 'Laptop', 20, 'Seattle'}
{ 'Company1', 4, 'Charger', 3, 'Seattle'}
{ 'Company1', 5, 'Chair', 4, 'Seattle'}
{ 'Company1', 5, 'Lamp', 2, 'Seattle'}
{ 'Company2', 4, null, null, 'Bellevue'}

البرنامج النصي لتدفق البيانات

بناء الجملة

<incomingStream>
foldDown(unroll(<unroll cols>),
    mapColumn(
        name,
        each(<array>(type == '<arrayDataType>')),
        each(<array>, match(true())),
        location
    )) ~> <transformationName>

مثال

source foldDown(unroll(goods.orders.shipped.orderItems, goods.orders),
    mapColumn(
        name,
        orderId = goods.orders.orderId,
        itemName = goods.orders.shipped.orderItems.itemName,
        itemQty = goods.orders.shipped.orderItems.itemQty,
        location = location
    ),
    skipDuplicateMapInputs: false,
    skipDuplicateMapOutputs: false)