نسخ وتحويل البيانات في Azure SQL Managed Instance باستخدام Azure Data Factory أو Synapse Analytics

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

تلميح

جرب Data Factory في Microsoft Fabric، وهو حل تحليلي متكامل للمؤسسات. يغطي Microsoft Fabric كل شيء بدءا من حركة البيانات إلى علم البيانات والتحليلات في الوقت الحقيقي والمعلومات المهنية وإعداد التقارير. تعرف على كيفية بدء إصدار تجريبي جديد مجانا!

توضح هذه المقالة كيفية استخدام Copy Activity لنسخ البيانات من وإلى Azure SQL Managed Instance، واستخدام Data Flow لتحويل البيانات في Azure SQL Managed Instance. للتعرف على المزيد، اقرأ المقالات التمهيدية حول Azure Data Factory وSynapse Analytics.

القدرات المدعومة

يتوفر دعم موصل Azure SQL Managed Instance للإمكانيات التالية:

القدرات المدعومة IR نقطة النهاية الخاصة المُدارة
Copy activity (المصدر/المتلق) (1) (2) ✓ الإصدار الأولي العام
تعيين تدفق البيانات (المصدر/ المتلقي) (1) ✓ الإصدار الأولي العام
نشاط البحث (1) (2) ✓ الإصدار الأولي العام
نشاط GetMetadata (1) (2) ✓ الإصدار الأولي العام
نشاط البرنامج النصي (1) (2) ✓ الإصدار الأولي العام
نشاط الإجراء المخزن (1) (2) ✓ الإصدار الأولي العام

① وقت تشغيل تكامل Azure ② وقت تشغيل التكامل المستضاف ذاتيًا

بالنسبة لنشاط النسخ، يدعم موصل قاعدة بيانات Azure SQL هذه الوظائف:

  • نسخ البيانات باستخدام مصادقة SQL ومصادقة الرمز المميز لتطبيق Microsoft Entra مع كيان الخدمة أو الهويات المدارة لموارد Azure.
  • كمصدر، استرداد البيانات باستخدام استعلام SQL أو إجراء مخزن. يمكنك أيضا اختيار النسخ المتوازي من مصدر MI SQL، راجع القسم النسخ المتوازي من SQL MI لمزيد من التفاصيل.
  • كمتلقي، إنشاء جدول الوجهة تلقائياً إذا لم يكن موجوداً استناداً إلى المخطط المصدر؛ إلحاق البيانات بجدول أو استدعاء إجراء مُخزن باستخدام منطق مُخصص أثناء النسخ.

المتطلبات الأساسية

للوصول إلى نقطة النهاية العامة لـ SQL Managed Instance، يمكنك استخدام وقت تشغيل التكامل المُدار لـ Azure. تأكد من تمكين نقطة النهاية العامة والسماح أيضاً بنسبة استخدام الشبكة لنقطة النهاية العامة على مجموعة أمان الشبكة بحيث يمكن للخدمة الاتصال بقاعدة البيانات. لمزيد من المعلومات، راجع هذا الدليل.

للوصول إلى نقطة النهاية الخاصة لـ SQL Managed Instance، قم بإعداد وقت تشغيل التكامل المستضاف ذاتياً الذي يمكنه الوصول إلى قاعدة البيانات. إذا قمت بتوفير وقت تشغيل التكامل المستضاف ذاتياً في نفس الشبكة الظاهرية مثل المثيل المُدار، تأكد من أن جهاز وقت تشغيل التكامل الخاص بك في شبكة فرعية مختلفة عن مثيلك المُدار. إذا قمت بتوفير وقت تشغيل التكامل المستضاف ذاتياً في شبكة ظاهرية مختلفة عن مثيلك المُدار، يمكنك استخدام إما اتصال شبكة ظاهرية نظيرة أو اتصال شبكة ظاهرية إلى شبكة ظاهرية. لمزيد من المعلومات، راجع توصيل تطبيقك بـ SQL Managed Instance.

الشروع في العمل

لتنفيذ نشاط النسخ باستخدام أحد المسارات، يمكنك استخدام إحدى الأدوات أو عدد تطوير البرامج التالية:

إنشاء خدمة مرتبطة بـ Azure SQL Managed instance باستخدام واجهة المستخدم

استخدم الخطوات التالية لإنشاء خدمة مرتبطة بـ SQL Managed instance في واجهة مستخدم مدخل Microsoft Azure.

  1. استعرض للوصول إلى علامة التبويب "Manage" في مصنع بيانات Azure أو مساحة عمل Synapse، وحدد "Linked Services"، ثم انقر فوق "New":

  2. ابحث عن SQL وحدد موصل Azure SQL Server Managed Instance.

    لقطة شاشة لموصل Azure SQL Server Managed Instance.

  3. قم بتكوين تفاصيل الخدمة، واختبر الاتصال، وأنشئ الخدمة المرتبطة الجديدة.

    لقطة شاشة لتكوين خدمة مرتبطة لـ SQL Managed instance.

تفاصيل تكوين الموصل

توفر الأقسام التالية تفاصيل حول الخصائص المستخدمة لتحديد كيانات Azure Data Factory الخاصة بموصل SQL Managed Instance.

خصائص الخدمة المرتبطة

يتم دعم هذه الخصائص العامة للخدمة المرتبطة بمثيل SQL المدار:

الخاصية الوصف مطلوب
النوع يجب تعيين نوع الخاصية إلى AzureSqlMI. ‏‏نعم‬
سلسلة الاتصال تحدد هذه الخاصية معلومات connectionString المطلوبة للاتصال بـ SQL Managed Instance باستخدام مصادقة SQL. لمزيد من المعلومات، يرجى مراجعة الأمثلة التالية.
المنفذ الافتراضي هو 1433. إذا كنت تستخدم SQL Managed Instance بنقطة نهاية عامة، فحدد المنفذ 3342 بشكل صريح.
يمكنك أيضا وضع كلمة مرور في Azure Key Vault. إذا كانت مصادقة SQL، فاسحب تكوين password من سلسلة الاتصال. لمزيد من المعلومات، راجع مثال JSON الذي يتبع الجدول وقم بتخزين بيانات الاعتماد في Azure Key Vault.
‏‏نعم‬
azureCloudType للمصادقة الأساسية للخدمة، حدد نوع بيئة سحابة Azure التي تم تسجيل تطبيق Microsoft Entra إليها.
القيم المسموح بها هي AzurePublic، وAzureChina، وAzureUsGovernment، وAzureGermany. يتم استخدام بيئة السحابة للخدمة بشكل افتراضي.
لا
alwaysEncryptedSettings حدد معلومات alwaysencryptedsettings المطلوبة لتمكين Always Encrypted لحماية البيانات الحساسة المُخزنة في خادم SQL باستخدام الهوية المدارة أو كيان الخدمة. لمزيد من المعلومات، راجع مثال JSON الذي يتبع الجدول واستخدم القسم Always Encrypted. إذا لم يتم تحديده، فسيتم تعطيل الإعداد الافتراضي المشفر دائماً. لا
connectVia يُستخدم وقت تشغيل التكامل هذا للاتصال بمخزن البيانات. يمكنك استخدام وقت تشغيل التكامل المستضاف ذاتياً أو وقت تشغيل تكامل Azure إذا كان المثيل المُدار يحتوي على نقطة نهاية عامة ويسمح للخدمة بالوصول إليه. في حالة عدم التحديد، يُستخدم وقت تشغيل تكامل Azure الافتراضي. ‏‏نعم‬

لأنواع المصادقة المختلفة، راجع الأقسام التالية حول خصائص معينة والمتطلبات الأساسية وعينات JSON، على التوالي:

مصادقة SQL

لاستخدام نوع مصادقة مصادقة SQL، حدد الخصائص العامة الموضحة في القسم السابق.

مثال 1: استخدام مصادقة SQL

{
    "name": "AzureSqlMILinkedService",
    "properties": {
        "type": "AzureSqlMI",
        "typeProperties": {
            "connectionString": "Data Source=<hostname,port>;Initial Catalog=<databasename>;Integrated Security=False;User ID=<username>;Password=<password>;"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

مثال 2: استخدام مصادقة SQL مع كلمة مرور في Azure Key Vault

{
    "name": "AzureSqlMILinkedService",
    "properties": {
        "type": "AzureSqlMI",
        "typeProperties": {
            "connectionString": "Data Source=<hostname,port>;Initial Catalog=<databasename>;Integrated Security=False;User ID=<username>;",
            "password": { 
                "type": "AzureKeyVaultSecret", 
                "store": { 
                    "referenceName": "<Azure Key Vault linked service name>", 
                    "type": "LinkedServiceReference" 
                }, 
                "secretName": "<secretName>" 
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

مثال 3: استخدام مصادقة SQL مع Always Encrypted

{
    "name": "AzureSqlMILinkedService",
    "properties": {
        "type": "AzureSqlMI",
        "typeProperties": {
            "connectionString": "Data Source=<hostname,port>;Initial Catalog=<databasename>;Integrated Security=False;User ID=<username>;Password=<password>;"
        },
        "alwaysEncryptedSettings": {
            "alwaysEncryptedAkvAuthType": "ServicePrincipal",
            "servicePrincipalId": "<service principal id>",
            "servicePrincipalKey": {
                "type": "SecureString",
                "value": "<service principal key>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

المصادقة الأساسية للخدمة

لاستخدام مصادقة كيان الخدمة، بالإضافة إلى الخصائص العامة الموصوفة في القسم السابق، حدد الخصائص التالية

الخاصية الوصف مطلوب
servicePrincipalId حدد معرّف عميل التطبيق. ‏‏نعم‬
servicePrincipalKey حدِّد مفتاح التطبيق. ضع علامة على هذا الحقل باعتباره SecureString لتخزينه بشكل آمن، أو قم بالإشارة إلى سر مخزن في. ‏‏نعم‬
tenant حدد معلومات المستأجر، مثل اسم المجال أو معرّف المستأجر، الذي يتواجد تطبيقك ضمنه. يمكنك استرداده من خلال تمرير الماوس على الزاوية العلوية اليمنى من مدخل Microsoft Azure. ‏‏نعم‬

عليك أيضًا اتباع الخطوات التالية:

  1. اتبع الخطوات لتوفير مسؤول Microsoft Entra للمثيل المدار.

  2. إنشاء تطبيق Microsoft Entra من مدخل Microsoft Azure. قم بتدوين اسم التطبيق والقيم التالية التي تحدد الخدمة المرتبطة:

    • مُعرّف التطبيق
    • مفتاح التطبيق
    • معرف المستأجر
  3. قم بإنشاء عمليات تسجيل دخول لكيان الخدمة. في SQL Server Management Studio (SSMS)، اتصل بالمثيل المُدار باستخدام حساب SQL Server الذي يُعد مسؤول النظام. في قاعدة البيانات الرئيسية، قم بتشغيل T-SQL التالية:

    CREATE LOGIN [your application name] FROM EXTERNAL PROVIDER
    
  4. إنشاء مستخدمي قاعدة البيانات المضمنة لمبدأ الخدمة. اتصل بقاعدة البيانات التي تريد نسخ البيانات منها أو إليها، قم بتشغيل T-SQL التالي:

    CREATE USER [your application name] FROM EXTERNAL PROVIDER
    
  5. امنح كيان الخدمة الأذونات المطلوبة كما تفعل عادةً لمستخدمي SQL وغيرهم. قم بتشغيل التعليمات البرمجية التالية. لمزيد من الخيارات، يرجى مراجعة هذا المستند.

    ALTER ROLE [role name e.g. db_owner] ADD MEMBER [your application name]
    
  6. تكوين خدمة SQL Managed Instance المرتبطة.

مثال: استخدام مصادقة كيان الخدمة

{
    "name": "AzureSqlDbLinkedService",
    "properties": {
        "type": "AzureSqlMI",
        "typeProperties": {
            "connectionString": "Data Source=<hostname,port>;Initial Catalog=<databasename>;",
            "servicePrincipalId": "<service principal id>",
            "servicePrincipalKey": {
                "type": "SecureString",
                "value": "<service principal key>"
            },
            "tenant": "<tenant info, e.g. microsoft.onmicrosoft.com>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

مصادقة الهوية المدارة المعينة من قبل النظام

يمكن أن يقترن data factory أو مساحة عمل Synapse بهوية مُدارة يعينها النظام لموارد Azure والتي تمثل خدمة المصادقة على خدمات Azure الأخرى. يمكنك استخدام هذه الهوية المُدارة لمصادقة SQL Managed Instance. يمكن للخدمة المعينة الوصول إلى البيانات ونسخها من أو إلى قاعدة البيانات باستخدام هذه الهوية.

لاستخدام مصادقة الهوية المدارة المعينة من قبل النظام، حدد الخصائص العامة الموضحة في القسم السابق، واتبع هذه الخطوات.

  1. اتبع الخطوات لتوفير مسؤول Microsoft Entra للمثيل المدار.

  2. إنشاء عمليات تسجل دخول للهوية المُدارة المعينة من قِبَل النظام. في SQL Server Management Studio (SSMS)، اتصل بالمثيل المُدار باستخدام حساب SQL Server الذي يُعد مسؤول النظام. في قاعدة البيانات الرئيسية، قم بتشغيل T-SQL التالية:

    CREATE LOGIN [your_factory_or_workspace_ name] FROM EXTERNAL PROVIDER
    
  3. قم بإنشاء مستخدمي قاعدة البيانات المضمنة للهوية المُدارة المعينة من قبل النظام. اتصل بقاعدة البيانات التي تريد نسخ البيانات منها أو إليها، قم بتشغيل T-SQL التالي:

    CREATE USER [your_factory_or_workspace_name] FROM EXTERNAL PROVIDER
    
  4. امنح الهوية المُدارة المعينة من قبل النظام الأذونات المطلوبة كما تفعل عادةً لمستخدمي SQL وغيرهم. قم بتشغيل التعليمات البرمجية التالية. لمزيد من الخيارات، يرجى مراجعة هذا المستند.

    ALTER ROLE [role name e.g. db_owner] ADD MEMBER [your_factory_or_workspace_name]
    
  5. تكوين خدمة SQL Managed Instance المرتبطة.

مثال: استخدام مصادقة الهوية المُدارة المعينة من قِبَل النظام

{
    "name": "AzureSqlDbLinkedService",
    "properties": {
        "type": "AzureSqlMI",
        "typeProperties": {
            "connectionString": "Data Source=<hostname,port>;Initial Catalog=<databasename>;"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

مصادقة الهوية المدارة المعينة من قبل المستخدم

يمكن أن يقترن data factory أو مساحة عمل Synapse بهوية مُدارة معينة من قِبَل المستخدم والتي تمثل خدمة المصادقة على خدمات Azure الأخرى. يمكنك استخدام هذه الهوية المُدارة لمصادقة SQL Managed Instance. يمكن للخدمة المعينة الوصول إلى البيانات ونسخها من أو إلى قاعدة البيانات باستخدام هذه الهوية.

لاستخدام مصادقة هوية مدارة من قبل عميل معيّن، بالإضافة إلى الخصائص العامة الموصوفة في القسم السابق، حدد الخصائص التالية:

الخاصية الوصف مطلوب
بيانات الاعتماد حدد الهوية المدارة المعينة من قبل المستخدم ككائن بيانات الاعتماد. ‏‏نعم‬

عليك أيضًا اتباع الخطوات التالية:

  1. اتبع الخطوات لتوفير مسؤول Microsoft Entra للمثيل المدار.

  2. قم بإنشاء تسجيلات دخول للهوية المدارة المعينة من قِبَل المستخدم. في SQL Server Management Studio (SSMS)، اتصل بالمثيل المُدار باستخدام حساب SQL Server الذي يُعد مسؤول النظام. في قاعدة البيانات الرئيسية، قم بتشغيل T-SQL التالية:

    CREATE LOGIN [your_factory_or_workspace_ name] FROM EXTERNAL PROVIDER
    
  3. قم بإنشاء مستخدمي قاعدة البيانات المضمنة للهوية المُدارة المعينة من قبل المستخدم. اتصل بقاعدة البيانات التي تريد نسخ البيانات منها أو إليها، قم بتشغيل T-SQL التالي:

    CREATE USER [your_factory_or_workspace_name] FROM EXTERNAL PROVIDER
    
  4. قم بإنشاء هوية مدارة واحدة أو عدة هويات مدارة يعينها المستخدم وامنح الهوية المدارة المعينة من قِبَل المستخدم الأذونات المطلوبة كما تفعل عادةً لمستخدمي SQL وغيرهم. قم بتشغيل التعليمات البرمجية التالية. لمزيد من الخيارات، يرجى مراجعة هذا المستند.

    ALTER ROLE [role name e.g. db_owner] ADD MEMBER [your_factory_or_workspace_name]
    
  5. تعيين هوية مدارة معينة من قبل المستخدم، واحدة أو متعددة، إلى مصنع البيانات وإنشاء بيانات اعتماد لكل هوية مدارة معينة من قبل المستخدم.

  6. تكوين خدمة SQL Managed Instance المرتبطة.

مثال: استخدام مصادقة الهوية المدارة المعينة من قِبَل المستخدم

{
    "name": "AzureSqlDbLinkedService",
    "properties": {
        "type": "AzureSqlMI",
        "typeProperties": {
            "connectionString": "Data Source=<hostname,port>;Initial Catalog=<databasename>;",
            "credential": {
                "referenceName": "credential1",
                "type": "CredentialReference"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

خصائص مجموعة البيانات

للحصول على قائمة كاملة بالأقسام والخصائص المتاحة للاستخدام لتعريف مجموعات البيانات، راجع مقالة مجموعات البيانات. يوفر هذا القسم قائمة بالخصائص المعتمدة من قبل مجموعة بيانات SQL Managed Instance.

لنسخ البيانات من وإلى SQL Managed Instance، يتم اعتماد الخصائص التالية:

الخاصية الوصف مطلوب
النوع يجب تعيين خاصية نوع مجموعة البيانات إلى AzureSqlMITable. ‏‏نعم‬
Schema اسم المخطط. لا للمصدر، نعم للمتلقي
طاولتنا اسم الجدول/طريقة العرض. لا للمصدر، نعم للمتلقي
اسم الجدول اسم الجدول/طريقة العرض مع المخطط. هذه الخاصية مدعومة للتوافق مع الإصدارات السابقة. بالنسبة لحمل العمل الجديد، استخدم schema وtable. لا للمصدر، نعم للمتلقي

مثال

{
    "name": "AzureSqlMIDataset",
    "properties":
    {
        "type": "AzureSqlMITable",
        "linkedServiceName": {
            "referenceName": "<SQL Managed Instance linked service name>",
            "type": "LinkedServiceReference"
        },
        "schema": [ < physical schema, optional, retrievable during authoring > ],
        "typeProperties": {
            "schema": "<schema_name>",
            "table": "<table_name>"
        }
    }
}

انسخ خصائص النشاط

للحصول على قائمة كاملة بالأقسام والخصائص المتاحة للاستخدام لتعريف الأنشطة، راجع مقالة خطوط التدفقات. يوفر هذا القسم قائمة خصائص مدعومة من قِبل مصدر ومتلقي SQL Managed Instance.

SQL Managed Instance كمصدر

تلميح

لتحميل البيانات من SQL MI بكفاءة باستخدام تقسيم البيانات، تعرف على المزيد من النسخ المتوازي من SQL MI.

لنسخ البيانات من SQL Managed Instance، يتم دعم الخصائص التالية في قسم مصدر نشاط النسخ:

الخاصية الوصف مطلوب
النوع يجب تعيين خاصية نوع مصدر نشاط النسخ إلى SqlMISource. ‏‏نعم‬
sqlReaderQuery تستخدم هذه الخاصية استعلام SQL المُخصص لقراءة البيانات. مثال على ذلك select * from MyTable . لا
sqlReaderStoredProcedureName هذه الخاصية هي اسم الإجراء المخزن الذي يقرأ البيانات من الجدول المصدر. يجب أن تكون بوابة لغة الاستعلامات المركبة الأخيرة عبارة عن مصطلح SELECT في الإجراء المُخزن. لا
storedProcedureParameters هذه المعلمات من أجل الإجراء المخزن.
القيم المسموح بها هي أزواج الاسم أو القيمة. يجب أن تتطابق أسماء المعلمات وحالتها مع أسماء معلمات الإجراء المُخزن وحالتها.
لا
isolationLevel يحدد سلوك تأمين المعاملة لمصدر SQL. القيم المسموح بها هي: ReadCommitted، وReadUncommitted، وRepeatableRead، وSerializable، وSnapshot. إذا لم يتم تحديده، فسيتم استخدام مستوى العزل الافتراضي لقاعدة البيانات. يرجى مراجعة هذا المستند للحصول على المزيد من التفاصيل. لا
خيارات التقسيم تحديد خيارات تقسيم البيانات المستخدمة لتحميل البيانات من SQL MI.
القيم المسموح بها هي: None (افتراضي)، وPhysicalPartitionsOfTable، وDynamicRange.
عند تمكين خيار التقسيم (أي، ليس None)، يتم التحكم في درجة التوازي لتحميل البيانات بشكل متزامن من SQL MI بواسطة الإعداد parallelCopies في نشاط النسخ.
لا
partitionSettings حدد مجموعة الإعدادات الخاصة بتقسيم البيانات.
تطبيق عندما لا يكون خيار التقسيم None.
لا
تحت partitionSettings:
partitionColumnName حدد اسم عمود المصدر بعدد صحيح أو نوع التاريخ/التاريخ والوقت (int أو smallint أو bigint أو date أو smalldatetime أو datetime أو datetime2 أو datetimeoffset) التي سيتم استخدامها عن طريق تقسيم النطاق للنسخ المتوازي. إذا لم يتم تحديده، فسيتم اكتشاف الفهرس أو المفتاح الأساسي للجدول تلقائياً واستخدامهما كعمود للتقسيم.
تُطبق عندما يكون خيار التقسيم هو DynamicRange. إذا كنت تستخدم استعلاماً لاسترداد البيانات المصدر، اربط ?DfDynamicRangePartitionCondition في عبارة WHERE. على سبيل المثال، راجع القسم النسخ المتوازي من قاعدة بيانات SQL.
لا
التقسيم القيمة القصوى لعمود القسم لتقسيم نطاق القسم. تُستخدم هذه القيمة لتحديد مرحلة القسم، وليس لتصفية الصفوف في الجدول. سيتم تقسيم ونسخ جميع الصفوف في الجدول أو نتيجة الاستعلام. إذا لم يتم تحديده، يكشف نشاط النسخ القيمة تلقائياً.
تُطبق عندما يكون خيار التقسيم هو DynamicRange. على سبيل المثال، راجع القسم النسخ المتوازي من قاعدة بيانات SQL.
لا
partitionLowerBound الحد الأدنى لقيمة عمود القسم لتقسيم نطاق القسم. تُستخدم هذه القيمة لتحديد مرحلة القسم، وليس لتصفية الصفوف في الجدول. سيتم تقسيم ونسخ جميع الصفوف في الجدول أو نتيجة الاستعلام. إذا لم يتم تحديده، يكشف نشاط النسخ القيمة تلقائياً.
تُطبق عندما يكون خيار التقسيم هو DynamicRange. على سبيل المثال، راجع القسم النسخ المتوازي من قاعدة بيانات SQL.
لا

لاحظ النقاط التالية:

  • إذا تم تحديد sqlReaderQuery لـ SqlMISource، يقوم نشاط النسخ بتشغيل هذا الاستعلام مقابل مصدر SQL Managed Instance للحصول على البيانات. يمكنك أيضاً تحديد إجراء مخزن عن طريق تحديد sqlReaderStoredProcedureName وstoredProcedureParameters إذا كان الإجراء المُخزن يأخذ المعلمات.
  • عند استخدام الإجراء المُخزن في المصدر لاسترداد البيانات، لاحظ إذا تم تصميم الإجراء المُخزن الخاص بك لإرجاع مخطط مختلف عند تمرير قيمة معلمة مختلفة، فقد تواجه عطلاً أو ترى نتيجة غير متوقعة عند استيراد مخطط من واجهة المستخدم أو عند نسخ البيانات إلى قاعدة بيانات SQL باستخدام إنشاء الجدول التلقائي.

مثال: استخدام استعلام SQL

"activities":[
    {
        "name": "CopyFromAzureSqlMI",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<SQL Managed Instance input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SqlMISource",
                "sqlReaderQuery": "SELECT * FROM MyTable"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

مثال: استخدام إجراء مُخزن

"activities":[
    {
        "name": "CopyFromAzureSqlMI",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<SQL Managed Instance input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SqlMISource",
                "sqlReaderStoredProcedureName": "CopyTestSrcStoredProcedureWithParameters",
                "storedProcedureParameters": {
                    "stringData": { "value": "str3" },
                    "identifier": { "value": "$$Text.Format('{0:yyyy}', <datetime parameter>)", "type": "Int"}
                }
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

تعريف الإجراء المُخزن

CREATE PROCEDURE CopyTestSrcStoredProcedureWithParameters
(
    @stringData varchar(20),
    @identifier int
)
AS
SET NOCOUNT ON;
BEGIN
    select *
    from dbo.UnitTestSrcTable
    where dbo.UnitTestSrcTable.stringData != stringData
    and dbo.UnitTestSrcTable.identifier != identifier
END
GO

SQL Managed Instance كمتلقي

تلميح

تعرف على المزيد حول سلوكيات الكتابة والتكوينات وأفضل الممارسات المدعومة من أفضل الممارسات لتحميل البيانات في SQL Managed Instance.

لنسخ البيانات إلى SQL Managed Instance، يتم دعم الخصائص التالية في قسم متلقي نشاط النسخ:

الخاصية الوصف مطلوب
النوع يجب تعيين خاصية نوع متلقي نشاط النسخ إلى SqlMISink. ‏‏نعم‬
preCopyScript تحدد هذه الخاصية استعلام SQL لتشغيل نشاط النسخ قبل كتابة البيانات في SQL Managed Instance. يتم استدعاؤه مرة واحدة فقط لكل نسخة تشغيل. يمكنك استخدام هذه الخاصية لتنظيف البيانات المحملة مسبقاً. لا
tableOption تحديد ما إذا كان سيتم إنشاء جدول المتلقي تلقائياً إذا لم يكن موجوداً استناداً إلى المخطط المصدر. لا يتم دعم الإنشاء التلقائي للجدول عندما يحدد التجمع الإجراء المخزن. القيم المسموح بها هي: none (افتراضي)، وautoCreate. لا
sqlWriterStoredProcedureName اسم الإجراء المُخزن الذي يحدد كيفية تطبيق البيانات المصدر في الجدول الهدف.
سيتم استدعاء هذا الإجراء المُخزن كل دفعة. بالنسبة للعمليات التي يتم تشغيلها مرة واحدة فقط وليس لها علاقة ببيانات المصدر، على سبيل المثال، الحذف أو الاقتطاع، استخدم الخاصية preCopyScript.
يرجى مراجعة مثال من استدعاء إجراء مُخزن من متلقي SQL.
لا
storedProcedureTableTypeParameterName اسم المعلمة لنوع الجدول المحدد في الإجراء المخزن. لا
sqlWriterTableType اسم نوع الجدول الذي سيتم استخدامه في الإجراء المخزن. يجعل نشاط النسخ البيانات التي يتم نقلها متاحة في جدول مؤقت بنوع الجدول الماثل. يمكن بعد ذلك أن يدمج رمز الإجراء المخزن البيانات التي يتم نسخها مع البيانات الموجودة. لا
storedProcedureParameters معلمات الإجراء المخزن.
القيم المسموح بها هي أزواج الاسم والقيمة. يجب أن تتطابق الأسماء وغلاف المعلمات مع الأسماء والغلاف الخاص بمعلمات الإجراء المخزن.
لا
writeBatchSize عدد الصفوف المراد إدراجها في جدول SQL لكل دفعة.
القيم المسموح بها هي أعداد صحيحة لعدد الصفوف. بشكل افتراضي، تحدد الخدمة ديناميكياً حجم الدُفعة المناسب بناءً على حجم الصف.
لا
writeBatchTimeout وقت الانتظار حتى تكتمل عملية الإجراء الإدراج والإصدار والتخزين قبل انتهاء المهلة.
القيم المسموح بها هي للمدى الزمني. مثال على ذلك هو "00:30:00" لمدة 30 دقيقة. إذا لم يتم تحديد أي قيمة، يتم تعيين المهلة افتراضيا إلى "00:30:00".
لا
 maxConcurrent الاتصال ions الحد الأعلى للاتصالات المتزامنة التي تم إنشاؤها إلى مخزن البيانات أثناء تشغيل النشاط. حدد قيمة فقط عندما تريد تحديد الاتصالات المتزامنة.  لا
WriteBehavior حدد سلوك الكتابة لنشاط النسخ لتحميل البيانات في Azure SQL MI.
القيمة المسموح بها هي Insert و Upsert. تستخدم الخدمة insert لتحميل البيانات بشكلٍ افتراضي.
لا
upsertSettings حدد مجموعة إعدادات سلوك الكتابة.
استخدمها عندما يكون خيار WriteBehavior هو Upsert.
لا
تحت upsertSettings:
useTempDB حدد ما إذا كنت تريد استخدام جدول مؤقت عمومي أو جدول فعلي كجدول مؤقت ل upsert.
تستخدم الخدمة الجدول المؤقت العمومي كجدول مؤقت بشكلٍ افتراضي. القيمة هي true.
لا
interimSchemaName حدد المخطط المؤقت لإنشاء جدول مؤقت إذا تم استخدام جدول فعلي. ملاحظة: يحتاج المستخدم إلى الحصول على إذن لإنشاء أي جدول وحذفه. بشكل افتراضي، سيشارك الجدول المؤقت نفس المخطط كجدول متلقي.
استخدمه عندما يكون خيار useTempDB هو False.
لا
المفاتيح حدد أسماء الأعمدة لتعريف الصف الفريد. يمكن استخدام مفتاح واحد أو سلسلة من المفاتيح. إذا لم يتم تحديده، فسيتم استخدام عمود المفتاح الأساسي. لا

مثال 1: إلحاق البيانات

"activities":[
    {
        "name": "CopyToAzureSqlMI",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<SQL Managed Instance output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SqlMISink",
                "tableOption": "autoCreate",
                "writeBatchSize": 100000
            }
        }
    }
]

مثال 2: استدعاء إجراء مخزن أثناء النسخ

تعرف على مزيد من التفاصيل من استدعاء إجراء مخزن من متلقي SQL MI.

"activities":[
    {
        "name": "CopyToAzureSqlMI",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<SQL Managed Instance output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SqlMISink",
                "sqlWriterStoredProcedureName": "CopyTestStoredProcedureWithParameters",
                "storedProcedureTableTypeParameterName": "MyTable",
                "sqlWriterTableType": "MyTableType",
                "storedProcedureParameters": {
                    "identifier": { "value": "1", "type": "Int" },
                    "stringData": { "value": "str1" }
                }
            }
        }
    }
]

مثال 3: بيانات Upsert

"activities":[
    {
        "name": "CopyToAzureSqlMI",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<SQL Managed Instance output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SqlMISink",
                "tableOption": "autoCreate",
                "writeBehavior": "upsert",
                "upsertSettings": {
                    "useTempDB": true,
                    "keys": [
                        "<column name>"
                    ]
                },            
            }
        }
    }
]

نسخ موازي من SQL MI

يوفر موصل Azure SQL Managed Instance في نشاط النسخ تقسيم البيانات المضمن لنسخ البيانات بالتوازي. يمكنك العثور على خيارات تقسيم البيانات في علامة التبويب Source لنشاط النسخ.

لقطة شاشة لخيارات التقسيم

عند تمكين النسخ المقسم، يعمل نشاط النسخ على تشغيل استعلامات متوازية مقابل مصدر SQL MI لتحميل البيانات حسب الأقسام. يتم التحكم في الدرجة المتوازية بواسطة parallelCopies الإعداد على نشاط النسخ. على سبيل المثال، إذا قمت بتعيين parallelCopies على أربعة، تقوم الخدمة بشكل متزامن بإنشاء وتشغيل أربعة استعلامات بناءً على خيار التقسيم المحدد والإعدادات، ويسترد كل استعلام جزءًا من البيانات من SQL MI.

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

السيناريو الإعدادات المقترحة
تحميل كامل من جدول كبير بأقسام فعلية. خيار التقسيم: أقسام فعلية للجدول.

أثناء التنفيذ، تكتشف الخدمة تلقائياً الأقسام المادية ونسخ البيانات حسب الأقسام.

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

على سبيل المثال، إذا كان معرّف عمود التقسيم يحتوي على قيم تتراوح من 1 إلى 100، وقمت بتعيين الحد الأدنى كـ 20 والحد الأعلى كـ 80، مع النسخ المتوازي كـ 4، تسترد الخدمة البيانات من خلال 4 أقسام - المعرّفات في النطاق <= 20 و[21 و50] و[51 و80] و>=81 على التوالي.
تحميل كمية كبيرة من البيانات باستخدام استعلام مخصص، دون أقسام فعلية، مع وجود عدد صحيح أو عمود التاريخ/التاريخ والوقت لتقسيم البيانات. خيارات التقسيم: تقسيم النطاق الديناميكي.
استعلام: SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>.
عمود التقسيم: حدد العمود المستخدم لتقسيم البيانات.
الحد الأعلى للتقسيموالحد الأدنى للتقسيم (اختياري): حدد إذا كنت تريد تحديد المقدار الموسع للتقسيم. هذا ليس لتصفية الصفوف في الجدول، سيتم تقسيم كافة الصفوف في نتيجة الاستعلام ونسخها. إذا لم يتم تحديده، يكشف نشاط النسخ القيمة تلقائياً.

على سبيل المثال، إذا كان معرّف عمود التقسيم يحتوي على قيم تتراوح من 1 إلى 100، وقمت بتعيين الحد الأدنى كـ 20 والحد الأعلى كـ 80، مع النسخ المتوازي كـ 4، تسترد الخدمة البيانات من خلال 4 أقسام - المعرّفات في النطاق <= 20 و[21 و50] و[51 و80] و>=81 على التوالي.

فيما يلي المزيد من نماذج الاستعلامات لسيناريوهات مختلفة:
1. الاستعلام عن الجدول بأكمله:
SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition
2. الاستعلام من جدول مع تحديد عمود وعوامل تصفية إضافية ل where-clause:
SELECT <column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>
3. الاستعلام باستخدام الاستعلامات الفرعية:
SELECT <column_list> FROM (<your_sub_query>) AS T WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>
4. الاستعلام مع القسم في الاستعلام الفرعي:
SELECT <column_list> FROM (SELECT <your_sub_query_column_list> FROM <TableName> WHERE ?DfDynamicRangePartitionCondition) AS T

أفضل الممارسات لتحميل البيانات مع خيار التقسيم:

  1. اختر عمود مميز كعمود تقسيم (مثل المفتاح الأساسي أو المفتاح الفريد) لتجنب انحراف البيانات.
  2. إذا كان الجدول يحتوي على قسم مضمن، فاستخدم خيار القسم "الأقسام المادية للجدول" للحصول على أداء أفضل.
  3. إذا كنت تستخدم Azure Microsoft Integration Runtime لنسخ البيانات لكن يمكنك تعيين "وحدات تكامل بيانات (DIU)" (> 4) أكبر للاستفادة من المزيد من موارد الحوسبة. تحقق من السيناريوهات القابلة للتطبيق هناك.
  4. تتحكم "درجة توازي النسخ" في أرقام التقسيم، ويؤدي تعيين هذا الرقم إلى عدد كبير جداً في بعض الأحيان إلى الإضرار بالأداء، ويوصي بتعيين هذا الرقم إلى (DIU أو عدد عقد وقت تشغيل التكامل المستضاف ذاتياً) * (2 إلى 4).

مثال: تحميل كامل من جدول كبير مع أقسام فعلية

"source": {
    "type": "SqlMISource",
    "partitionOption": "PhysicalPartitionsOfTable"
}

مثال: الاستعلام مع تقسيم النطاق الديناميكي

"source": {
    "type": "SqlMISource",
    "query": "SELECT * FROM <TableName> WHERE ?DfDynamicRangePartitionCondition AND <your_additional_where_clause>",
    "partitionOption": "DynamicRange",
    "partitionSettings": {
        "partitionColumnName": "<partition_column_name>",
        "partitionUpperBound": "<upper_value_of_partition_column (optional) to decide the partition stride, not as data filter>",
        "partitionLowerBound": "<lower_value_of_partition_column (optional) to decide the partition stride, not as data filter>"
    }
}

نموذج استعلام للتحقق من التقسيم الفعلي

SELECT DISTINCT s.name AS SchemaName, t.name AS TableName, pf.name AS PartitionFunctionName, c.name AS ColumnName, iif(pf.name is null, 'no', 'yes') AS HasPartition
FROM sys.tables AS t
LEFT JOIN sys.objects AS o ON t.object_id = o.object_id
LEFT JOIN sys.schemas AS s ON o.schema_id = s.schema_id
LEFT JOIN sys.indexes AS i ON t.object_id = i.object_id 
LEFT JOIN sys.index_columns AS ic ON ic.partition_ordinal > 0 AND ic.index_id = i.index_id AND ic.object_id = t.object_id 
LEFT JOIN sys.columns AS c ON c.object_id = ic.object_id AND c.column_id = ic.column_id 
LEFT JOIN sys.partition_schemes ps ON i.data_space_id = ps.data_space_id 
LEFT JOIN sys.partition_functions pf ON pf.function_id = ps.function_id 
WHERE s.name='[your schema]' AND t.name = '[your table name]'

إذا كان الجدول يحتوي على تقسيم فعلي، فسترى "HasPartition" كـ "yes" كما يلي.

نتيجة استعلام Sql

أفضل الممارسات لتحميل البيانات إلى SQL Managed Instance

عند نسخ البيانات إلى SQL Managed Instance، قد تحتاج إلى سلوك كتابة مختلف:

  • إلحاق: تحتوي بيانات المصدر الخاصة بي على سجلات جديدة فقط.
  • Upsert: تحتوي بيانات المصدر الخاصة بي على كل من الإدراجات والتحديثات.
  • الاستبدال: أريد إعادة تحميل جدول الأبعاد بأكمله في كل مرة.
  • الكتابة باستخدام منطق مخصص: أحتاج معالجة إضافية قبل الإدراج النهائي في الجدول الوجهة.

راجع الأقسام الخاصة بكيفية التكوين وأفضل الممارسات.

قم بإلحاق البيانات

إلحاق البيانات هو السلوك الافتراضي لموصل متلقي SQL Managed Instance. تقوم الخدمة بإدراج مجمع للكتابة إلى الجدول بكفاءة. يمكنك تكوين المصدر والإيداع وفقاً لذلك في نشاط النسخ.

إدخال وتحديث البيانات

يدعم نشاط النسخ الآن تحميل البيانات محلياً في جدول مؤقت لقاعدة البيانات ثم تحديث البيانات في جدول المتلقي إذا كان المفتاح موجوداً وإدراج بيانات جديدة. لمعرفة المزيد حول إعدادات upsert في أنشطة النسخ، راجع SQL Managed Instance كمتلقي.

استبدال الجدول بأكمله

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

اكتب البيانات بمنطق مخصص

تشبه خطوات كتابة البيانات باستخدام منطق مخصص تلك الموضحة في قسم Upsert data. عندما تحتاج إلى تطبيق معالجة إضافية قبل الإدراج النهائي لبيانات المصدر في الجدول الوجهة، يمكنك التحميل إلى جدول مرحلي ثم استدعاء نشاط الإجراء المُخزن أو استدعاء إجراء مخزن في متلقي نشاط النسخ لتطبيق البيانات.

استدعاء إجراء مخزن من متلقي SQL

عند نسخ البيانات إلى SQL Managed Instance، يمكنك أيضاً تكوين واستدعاء إجراء مخزن محدد بواسطة المستخدم مع معلمات إضافية على كل دفعة من الجدول المصدر. تستفيد ميزة الإجراء المخزن من المعلمات ذات القيم الجدولية.

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

يوضح النموذج التالي كيفية استخدام إجراء مُخزن لإدراج الصفوف أو تحديثها "upsert" في جدول في قاعدة بيانات SQL Server. افترض أن بيانات الإدخال وجدول Marketing المتلقي تحتوي كل منها على ثلاثة أعمدة: ProfileID، وState، وCategory. قم بإدراج الصفوف أو تحديثها "upsert" استناداً إلى عمود ProfileID، وطبقه فقط لفئة معينة تسمى "ProductA".

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

    CREATE TYPE [dbo].[MarketingType] AS TABLE(
        [ProfileID] [varchar](256) NOT NULL,
        [State] [varchar](256) NOT NULL,
        [Category] [varchar](256) NOT NULL
    )
    
  2. في قاعدة البيانات الخاصة بك، قم بتعريف الإجراء المُخزن بنفس الاسم مثل sqlWriterStoredProcedureName. يتعامل مع بيانات الإدخال من المصدر المحدد ويدمج في جدول الإخراج. اسم معلمة نوع الجدول في الإجراء المُخزن هو نفسه tableName المُحدد في مجموعة البيانات.

    CREATE PROCEDURE spOverwriteMarketing @Marketing [dbo].[MarketingType] READONLY, @category varchar(256)
    AS
    BEGIN
    MERGE [dbo].[Marketing] AS target
    USING @Marketing AS source
    ON (target.ProfileID = source.ProfileID and target.Category = @category)
    WHEN MATCHED THEN
        UPDATE SET State = source.State
    WHEN NOT MATCHED THEN
        INSERT (ProfileID, State, Category)
        VALUES (source.ProfileID, source.State, source.Category);
    END
    
  3. في خط التدفق الخاص بك، حدد القسم متلقي SQL MI في نشاط النسخ كما يلي:

    "sink": {
        "type": "SqlMISink",
        "sqlWriterStoredProcedureName": "spOverwriteMarketing",
        "storedProcedureTableTypeParameterName": "Marketing",
        "sqlWriterTableType": "MarketingType",
        "storedProcedureParameters": {
            "category": {
                "value": "ProductA"
            }
        }
    }
    

تعيين خصائص تدفق البيانات

عند تحويل البيانات في تخطيط تدفق البيانات، يمكنك القراءة والكتابة إلى جداول من Azure SQL Managed Instance. لمزيد من المعلومات، راجع تحويل المصدر و تحويل المتلقي في تعيين تدفقات البيانات.

تحويل المصدر

يسرد الجدول أدناه الخصائص التي يدعمها مصدر Azure SQL Managed Instance. يمكنك تحرير هذه الخصائص في علامة التبويب "Source options".

Name ‏‏الوصف مطلوب القيم المسموح بها خاصية البرنامج النصي لتدفق البيانات
جدول إذا حددت الجدول كمدخلات، فإن تدفق البيانات يجلب جميع البيانات من الجدول المحدد في مجموعة البيانات. لا - -
الاستعلام إذا حددت الاستعلام كإدخال، فحدد استعلام SQL لجلب البيانات من المصدر، والذي يتجاوز أي جدول تحدده في مجموعة البيانات. يعد استخدام الاستعلامات طريقة رائعة لتقليل عدد الصفوف للاختبار أو عمليات البحث.

لا يتوفر دعم لعبارة Order By، ولكن يمكنك تعيين عبارة SELECT FROM كاملة. يمكنك أيضاً استخدام وظائف الجدول المعرفة بواسطة المستخدم. تحديد * من udfGetData() هو UDF في SQL الذي يقوم بإرجاع جدول يمكنك استخدامه في تدفق البيانات.
مثال الاستعلام: Select * from MyTable where customerId > 1000 and customerId < 2000
لا السلسلة‬ استعلام
حجم الدفعة حدد حجم دفعة لتقسيم البيانات الكبيرة إلى قراءات. لا رقم صحيح batchSize
مستوى العزل اختر أحد مستويات العزل التالية:
- قراءة ثابتة
- قراءة غير ثابتة (افتراضي)
- القراءة المتكررة
- قابل للتسلسل
- لا شيء (تجاهل مستوى العزل)
لا READ_COMMITTED
READ_UNCOMMITTED
REPEATABLE_READ
SERIALIZABLE
لا
isolationLevel
تمكين الاستخراج التزايدي استخدم هذا الخيار لإخبار ADF بمعالجة الصفوف التي تغيرت منذ آخر مرة تم فيها تنفيذ البنية الأساسية لبرنامج ربط العمليات التجارية فقط. لا - -
عمود تزايدي عند استخدام ميزة الاستخراج التزايدي، يجب عليك اختيار التاريخ/الوقت أو العمود الرقمي الذي ترغب في استخدامه كعلامة مائية في الجدول المصدر. لا - -
تمكين التقاط بيانات التغيير الأصلي (معاينة) استخدم هذا الخيار لإخبار ADF بمعالجة بيانات دلتا التي تم التقاطها بواسطة تقنية التقاط بيانات تغيير SQL فقط منذ آخر مرة تم فيها تنفيذ البنية الأساسية لبرنامج ربط العمليات التجارية. باستخدام هذا الخيار، سيتم تحميل بيانات دلتا بما في ذلك إدراج الصف والتحديث والحذف تلقائيا دون الحاجة إلى أي عمود تزايدي. تحتاج إلى تمكين تغيير التقاط البيانات على Azure SQL MI قبل استخدام هذا الخيار في ADF. لمزيد من المعلومات حول هذا الخيار في ADF، راجع التقاط بيانات التغيير الأصلي. لا - -
بدء القراءة من البداية سيؤدي تعيين هذا الخيار مع الاستخراج التزايدي إلى توجيه ADF لقراءة جميع الصفوف عند التنفيذ الأول للبنية الأساسية لبرنامج ربط العمليات التجارية مع تشغيل الاستخراج التزايدي. لا - -

تلميح

تعبير الجدول الشائع (CTE) في SQL غير مدعوم في وضع استعلام تدفق بيانات التعيين، لأن الشرط الأساسي لاستخدام هذا الوضع هو أنه يمكن استخدام الاستعلامات في عبارة SQL query FROM ولكن لا يمكن لـ CTEs إجراء ذلك. لاستخدام CTEs، تحتاج إلى إنشاء إجراء مخزّن باستخدام الاستعلام التالي:

CREATE PROC CTESP @query nvarchar(max)
AS
BEGIN
EXECUTE sp_executesql @query;
END

ثم استخدم وضع الإجراء المخزّن في تحويل المصدر لتدفق بيانات التعيين وتعيين @query مثال يشبه with CTE as (select 'test' as a) select * from CTE. ثم يمكنك استخدام CTEs كما هو متوقع.

مثال على البرنامج النصي لمصدر Azure SQL Managed Instance

عند استخدام Azure SQL Managed Instance كنوع مصدر، يكون البرنامج النصي لتدفق البيانات المقترن:

source(allowSchemaDrift: true,
    validateSchema: false,
    isolationLevel: 'READ_UNCOMMITTED',
    query: 'select * from MYTABLE',
    format: 'query') ~> SQLMISource

تحويل المتلقي

يسرد الجدول أدناه الخصائص التي يدعمها متلقي Azure SQL Managed Instance. يمكنك تحرير هذه الخصائص في علامة التبويب "Sink options".

Name ‏‏الوصف مطلوب القيم المسموح بها خاصية البرنامج النصي لتدفق البيانات
أسلوب التحديث حدد العمليات المسموح بها في وجهة قاعدة البيانات. الوضع الافتراضي هو السماح فقط بالإدراج.
لتحديث صفوف أو إجراء upsert "إدراج الصفوف أو تحديثها" أو حذفها، يلزم إجراء تحويل في الصف المعدل لوضع علامة على الصفوف التي تخضع لتلك الإجراءات.
‏‏نعم‬ true أو false قابل للحذف
قابلة للادراج
التحديث
قابل للإدراج أو التحديث
الأعمدة الرئيسية للتحديثات وعمليات الإدراج أو التحديث "upsert" والحذف، يجب تعيين عمود (أعمدة) المفاتيح لتحديد الصف المطلوب تعديله.
سيتم استخدام اسم العمود الذي تختاره كمفتاح كجزء من التحديث، أو upsert، أو الحذف اللاحق. لذلك، يجب اختيار عمود موجود في تعيين "المتلقي".
لا صفيف المفاتيح
تخطي كتابة أعمدة المفتاح إذا كنت ترغب في عدم كتابة القيمة إلى عمود المفتاح، فحدد "Skip writing key columns". لا true أو false skipKeyWrites
إجراء الجدول يحدد ما إذا كان سيتم إعادة إنشاء أو إزالة كل الصفوف من الجدول الوجهة قبل الكتابة.
- None: لن يتم اتخاذ أي إجراء على الجدول.
- Recreate: سيتم إسقاط الجدول وإعادة إنشائه. مطلوب في حال إنشاء جدول جديد بشكل ديناميكي.
- Truncate: سيتم إزالة جميع الصفوف من الجدول الهدف.
لا true أو false إعادة إنشاء
اقتطاع
حجم الدفعة حدد عدد الصفوف التي تتم كتابتها في كل دُفعة. تعمل أحجام الدُفعات الأكبر على تحسين الضغط والذاكرة، ولكنها تخاطر بنفاد استثناءات الذاكرة عند تخزين البيانات مؤقتاً. لا رقم صحيح batchSize
نصوص SQL السابقة واللاحقة حدد نصوص SQL متعددة الأسطر التي سيتم تنفيذها قبل (المعالجة المسبقة) وبعد (المعالجة اللاحقة) كتابة البيانات في قاعدة بيانات المتلقي. لا السلسلة‬ preSQLs
postSQLs

تلميح

  1. يوصى بتقسيم البرامج النصية دفعة واحدة مع أوامر مُتعددة إلى دفعات متعددة.
  2. يمكن فقط تشغيل عبارات لغة تعريف البيانات (DDL) ولغة معالجة البيانات (DML) التي ترجع عدد تحديثات بسيط كجزء مـن دفعة. تعرَّف على المزيد من خلال تنفيذ عمليات الدُفعات

مثال البرنامج النصي لمتلقي Azure SQL Managed Instance

عند استخدام Azure SQL Managed Instance كمتلقي، يكون البرنامج النصي لتدفق البيانات المقترن:

IncomingStream sink(allowSchemaDrift: true,
    validateSchema: false,
    deletable:false,
    insertable:true,
    updateable:true,
    upsertable:true,
    keys:['keyColumn'],
    format: 'table',
    skipDuplicateMapInputs: true,
    skipDuplicateMapOutputs: true) ~> SQLMISink

بحث عن خصائص النشاط

لمعرفة تفاصيل حول الخصائص، تحقق من نشاط البحث.

خصائص نشاط GetMetadata

لمعرفة تفاصيل حول الخصائص، يرجى التحقق من نشاط GetMetadata

تعيين نوع البيانات لـ SQL Managed Instance

عند نسخ البيانات من وإلى SQL Managed Instance باستخدام نشاط النسخ، يتم استخدام التعيينات التالية من أنواع بيانات SQL Managed Instance إلى أنواع البيانات المؤقتة المستخدمة داخل الخدمة. لمعرفة كيفية تعيين نشاط النسخ من المخطط المصدر ونوع البيانات إلى المتلقي، راجع تعيينات نوع البيانات والمخطط.

نوع بيانات SQL Managed Instance نوع بيانات الخدمة المؤقتة
عدد صحيح كبير Int64
binary بايت []
بت Boolean
حرف String, Char[]
date DateTime
التاريخ/الوقت DateTime
التاريخ والوقت2 DateTime
Datetimeoffset DateTimeOffset
عدد عشري عدد عشري
FILESTREAM attribute (varbinary(max)) بايت []
Float مزدوج
صورة بايت []
العدد الصحيح Int32
money عدد عشري
nchar String, Char[]
ntext String, Char[]
عددي عدد عشري
nvarchar String, Char[]
real فردي
rowversion بايت []
smalldatetime DateTime
Smallint Int16
smallmoney عدد عشري
sql_variant ‏‏الكائن
النص String, Char[]
time TimeSpan
الطابع الزمني بايت []
Tinyint Int16
uniqueidentifier Guid
varbinary بايت []
حروف متنوعة String, Char[]
xml السلسلة‬

إشعار

بالنسبة لأنواع البيانات التي يتم تعيينها إلى النوع المؤقت العشري، يدعم نشاط النسخ حالياً الدقة حتى 28. إذا كانت لديك بيانات تتطلب دقة أكبر من 28، ففكر في التحويل إلى سلسلة في استعلام SQL.

باستخدام التشفير دائمًا

عندما تقوم بنسخ البيانات من/إلى SQL Managed Instance باستخدام Always Encrypted، اتبع الخطوات التالية:

  1. تخزين المفتاح الرئيسي للعمود (CMK) في Azure Key Vault. تعرف على المزيد حول كيفية تكوين Always Encrypted باستخدام Azure Key Vault

  2. تأكد من سهولة الوصول إلى خزنة key vault حيث تم تخزين المفتاح الرئيسي للعمود (CMK). راجع هذه المقالة لمعرفة الأذونات المطلوبة.

  3. قم بإنشاء خدمة مرتبطة للاتصال بقاعدة بيانات SQL الخاصة بك وتمكين وظيفة "التشفير دائماً" باستخدام إما الهوية المدارة أو أساس الخدمة.

إشعار

تدعم دالة Always Encrypted الخاصة بـ SQL Managed Instance السيناريوهات التالية:

  1. تستخدم مخازن بيانات المصدر أو مصدر البيانات الهوية المُدارة أو أساس الخدمة كنوع مصادقة مزود رئيسي.
  2. تستخدم كل من مخازن بيانات المصدر والمخزن هوية مُدارة كنوع مصادقة مزود رئيسي.
  3. تستخدم كل من مخازن بيانات المصدر والمخزن نفس مبدأ الخدمة مثل نوع مصادقة مزود المفتاح.

إشعار

حالياً، يتم دعم دالة Always Encrypted الخاصة بـ SQL Managed Instance فقط لتحويل المصدر في تعيين تدفقات البيانات.

التقاط بيانات التغيير الأصلي

يمكن أن يدعم Azure Data Factory قدرات التقاط بيانات التغيير الأصلية ل SQL Server وAzure SQL DB وAzure SQL MI. يمكن الكشف عن البيانات التي تم تغييرها بما في ذلك إدراج الصف وتحديثه وحذفه في مخازن SQL تلقائيا واستخراجها بواسطة تدفق بيانات تعيين ADF. مع عدم وجود خبرة في التعليمات البرمجية في تعيين تدفق البيانات، يمكن للمستخدمين بسهولة تحقيق سيناريو النسخ المتماثل للبيانات من مخازن SQL عن طريق إلحاق قاعدة بيانات كمخزن وجهة. ما هو أكثر من ذلك، يمكن للمستخدمين أيضا إنشاء أي منطق تحويل البيانات بين لتحقيق سيناريو ETL تزايدي من مخازن SQL.

تأكد من الاحتفاظ باسم المسار والنشاط دون تغيير، بحيث يمكن تسجيل نقطة التحقق بواسطة ADF للحصول على بيانات تم تغييرها من آخر تشغيل تلقائيًا. إذا قمت بتغيير اسم المسار أو اسم النشاط، فسيتم إعادة تعيين نقطة التحقق، ما يؤدي بك إلى البدء من البداية أو الحصول على تغييرات من الآن في التشغيل التالي. إذا كنت تريد تغيير اسم المسار أو اسم النشاط ولكنك لا تزال تحتفظ بنقطة التحقق للحصول على بيانات تم تغييرها من آخر تشغيل تلقائيا، فيرجى استخدام مفتاح نقطة التحقق الخاص بك في نشاط تدفق البيانات لتحقيق ذلك.

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

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

المثال 1:

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

source(output(
		id as integer,
		name as string
	),
	allowSchemaDrift: true,
	validateSchema: false,
	enableNativeCdc: true,
	netChanges: true,
	skipInitialLoad: false,
	isolationLevel: 'READ_UNCOMMITTED',
	format: 'table') ~> source1
source1 sink(allowSchemaDrift: true,
	validateSchema: false,
	deletable:true,
	insertable:true,
	updateable:true,
	upsertable:true,
	keys:['id'],
	format: 'table',
	skipDuplicateMapInputs: true,
	skipDuplicateMapOutputs: true,
	errorHandlingOption: 'stopOnFirstError') ~> sink1

المثال 2:

إذا كنت ترغب في تمكين سيناريو ETL بدلا من النسخ المتماثل للبيانات بين قاعدة البيانات عبر SQL CDC، يمكنك استخدام التعبيرات في تعيين تدفق البيانات بما في ذلك isInsert(1) و isUpdate(1) و isDelete(1) للتمييز بين الصفوف مع أنواع عمليات مختلفة. فيما يلي أحد أمثلة البرامج النصية لتعيين تدفق البيانات على اشتقاق عمود واحد بالقيمة: 1 للإشارة إلى الصفوف المدرجة، و2 للإشارة إلى الصفوف المحدثة و3 للإشارة إلى الصفوف المحذوفة لتحويلات انتقال البيانات من الخادم لمعالجة بيانات دلتا.

source(output(
		id as integer,
		name as string
	),
	allowSchemaDrift: true,
	validateSchema: false,
	enableNativeCdc: true,
	netChanges: true,
	skipInitialLoad: false,
	isolationLevel: 'READ_UNCOMMITTED',
	format: 'table') ~> source1
source1 derive(operationType = iif(isInsert(1), 1, iif(isUpdate(1), 2, 3))) ~> derivedColumn1
derivedColumn1 sink(allowSchemaDrift: true,
	validateSchema: false,
	skipDuplicateMapInputs: true,
	skipDuplicateMapOutputs: true) ~> sink1

القيد المعروف:

للحصول على قائمة بمخازن البيانات المدعومة كمصادر ومتلقين من خلال نشاط النسخ، انظر مخازن البيانات المدعومة .