تحميل البيانات تدريجياً من قاعدة بيانات Azure SQL إلى مخزن Azure Blob باستخدام PowerShell

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

تلميح

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

في هذا البرنامج التعليمي، يمكنك استخدام Azure Data Factory لإنشاء مسار تحميل بيانات دلتا من جدول في قاعدة بيانات Azure SQL إلى مخزن Azure Blob.

نفذ الخطوات التالية في هذا البرنامج التعليمي:

  • أعد مخزن بيانات لتخزين قيمة العلامة المائية.
  • إنشاء data factory.
  • أنشئ الخدمة ذات الصلة.
  • أنشئ مجموعات بيانات المورد والمصدر والعلامة المائية.
  • إنشاء البنية الأساسية لبرنامج ربط العمليات التجارية.
  • تشغيل البنية الأساسية لبرنامج ربط العمليات التجارية.
  • مراقبة تشغيل المسار.

نظرة عامة

فيما يلي رسم تخطيطي لحل رفيع المستوى:

تحميل البيانات على نحو تدريجي

فيما يلي الخطوات الهامة لإنشاء هذا الحل:

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

  2. أعد مخزن بيانات لتخزين قيمة العلامة المائية.
    في هذا البرنامج التعليمي، يمكنك تخزين قيمة العلامة المائية في قاعدة بيانات SQL.

  3. أنشئ بنية أساسية مع سير العمل التالي:

    تحتوي البنية الأساسية لهذا الحل على الأنشطة التالية:

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

في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.

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

إشعار

نوصي باستخدام الوحدة النمطية Azure Az PowerShell للتفاعل مع Azure. للبدء، راجع تثبيت Azure PowerShell. لمعرفة كيفية الترحيل إلى الوحدة النمطية Az PowerShell، راجع ترحيل Azure PowerShell من AzureRM إلى Az.

أنشئ جدول مصدر بيانات في قاعدة بيانات SQL

  1. فتح SQL Server Management Studio. في مستكشف العناصرانقر بزر الماوس الأيمن فوق database وحدد New Query.

  2. شغل أمرSQL التالي مقابل قاعدة بيانات Azure لإنشاء جدول باسم data_source_tableمخزن مصدر البيانات:

    create table data_source_table
    (
        PersonID int,
        Name varchar(255),
        LastModifytime datetime
    );
    
    INSERT INTO data_source_table
    (PersonID, Name, LastModifytime)
    VALUES
    (1, 'aaaa','9/1/2017 12:56:00 AM'),
    (2, 'bbbb','9/2/2017 5:23:00 AM'),
    (3, 'cccc','9/3/2017 2:36:00 AM'),
    (4, 'dddd','9/4/2017 3:21:00 AM'),
    (5, 'eeee','9/5/2017 8:06:00 AM');
    

    في هذا البرنامج التعليمي، يمكنك استخدام LastModifytime كعمود علامة مائية. تظهر البيانات الموجودة في مخزن مصدر البيانات في الجدول التالي:

    PersonID | Name | LastModifytime
    -------- | ---- | --------------
    1 | aaaa | 2017-09-01 00:56:00.000
    2 | bbbb | 2017-09-02 05:23:00.000
    3 | cccc | 2017-09-03 02:36:00.000
    4 | dddd | 2017-09-04 03:21:00.000
    5 | eeee | 2017-09-05 08:06:00.000
    

أنشئ جدول أخر في قاعدة بيانات SQL لتخزين أعلى قيمة للعلامة المائية

  1. شغل أمر SQL التالي مقابل قاعدة بياناتك في SQL لإنشاء جدول باسم watermarktableلتخزين قيمة العلامة المائية:

    create table watermarktable
    (
    
    TableName varchar(255),
    WatermarkValue datetime,
    );
    
  2. عين القيمة الافتراضية للعلامة المائية العالية مع اسم جدول مخزن بيانات المصدر. في هذا البرنامج التعليمي، اسم الجدول هو data_source_table.

    INSERT INTO watermarktable
    VALUES ('data_source_table','1/1/2010 12:00:00 AM')    
    
  3. راجع البيانات الموجودة في الجدولwatermarktable.

    Select * from watermarktable
    

    إخراج:

    TableName  | WatermarkValue
    ----------  | --------------
    data_source_table | 2010-01-01 00:00:00.000
    

أنشئ إجراء مخزن في قاعدة بياناتك بـSQL

شغل الأمر التالي لإنشاء إجراء مخزن في قاعدة بياناتك في SQL:

CREATE PROCEDURE usp_write_watermark @LastModifiedtime datetime, @TableName varchar(50)
AS

BEGIN

UPDATE watermarktable
SET [WatermarkValue] = @LastModifiedtime
WHERE [TableName] = @TableName

END

إنشاء مصدرًا للبيانات

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

    $resourceGroupName = "ADFTutorialResourceGroup";
    

    إذا كانت مجموعة الموارد موجودة بالفعل، فقد لا ترغب في الكتابة فوقها. عين قيمة مختلفة $resourceGroupName للمتغير وشغل الأمر مرة أخرى.

  2. حدد متغير لموقع بيانات المصنع.

    $location = "East US"
    
  3. لإنشاء مجموعة موارد Azure، شغل الأمر التالي:

    New-AzResourceGroup $resourceGroupName $location
    

    إذا كانت مجموعة الموارد موجودة بالفعل، فقد لا ترغب في الكتابة فوقها. عين قيمة مختلفة $resourceGroupName للمتغير وشغل الأمر مرة أخرى.

  4. حدد متغير لموقع بيانات المصنع.

    هام

    حدث اسم مصنع البيانات باسم عمومي فريد. مثال على ذلك هو ADFTutorialFactorySP1127.

    $dataFactoryName = "ADFIncCopyTutorialFactory";
    
  5. لإنشاء بيانات المصنع شغل التالي Set-AzDataFactoryV2 cmdlet:

    Set-AzDataFactoryV2 -ResourceGroupName $resourceGroupName -Location "East US" -Name $dataFactoryName
    

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

  • يجب أن يكون اسم مصنع البيانات مميزًا وعامًا. إذا استلمت الخطأ التالي، فغير الاسم وحاول مرة أخرى:

    The specified Data Factory name 'ADFv2QuickStartDataFactory' is already in use. Data Factory names must be globally unique.
    
  • لإنشاء مثيلات لبيانات المصنع، يجب أن يكون حساب المستخدم الذي تستخدمه لتسجيل الدخول إلى Azure مشتركاً في Azure أو له دول المالك أو مسؤول الاشتراك في Azure.

  • للحصول على قائمة بمناطق Azure التي يتوفر فيها حالياً Data Factory، حدد المناطق التي تهمك في الصفحة التالية، ثم قم بتوسيع "Analytics" لتحديد موقع Data Factory: "Products available by region". يمكن أن تكون مخازن البيانات (Storage، SQL Database، Azure SQL Managed Instance، وما إلى ذلك) وحسابات (Azure HDInsight وما إلى ذلك) التي يستخدمها data factory في مناطق أخرى.

إنشاء linked services

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

أنشئ خدمة مرتبطة للتخزين

  1. أنشئ ملف JSON باسم AzureStorageLinkedService.json في المجلد C:\ADF، بالمحتويات التالية. (أنشئ المجلد ADF إذا لم يكن موجوداً بالفعل.) استبدل <accountName>و<accountKey> باسم ومفتاح حساب تخزينك قبل حفظ الملف.

    {
        "name": "AzureStorageLinkedService",
        "properties": {
            "type": "AzureStorage",
            "typeProperties": {
                "connectionString": "DefaultEndpointsProtocol=https;AccountName=<accountName>;AccountKey=<accountKey>"
            }
        }
    }
    
  2. في PowerShell، بدل إلى مجلد ADF.

  3. شغل cmdlet Set-AzDataFactoryV2LinkedService لإنشاء الخدمة المرتبطة: AzureStorageLinkedService. في المثال التالي، يمكنك تمرير قيم ResourceGroupName واسم معلمات DataFactory:

    Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureStorageLinkedService" -File ".\AzureStorageLinkedService.json"
    

    فيما يلي ناتج العينة:

    LinkedServiceName : AzureStorageLinkedService
    ResourceGroupName : <resourceGroupName>
    DataFactoryName   : <dataFactoryName>
    Properties        : Microsoft.Azure.Management.DataFactory.Models.AzureStorageLinkedService
    

أنشئ خدمة مرتبطة Azure SQL Database

  1. أنشئ ملف JSON باسم AzureSQLDatabaseLinkedService.json في ملف C:\ADF بالمحتويات التالية. (أنشئ مجلد ADF إذا لم يكن موجوداً بالفعل.) استبدل < الخادم >و< قاعدة البيانات ومعرف المستخدم >و<><كلمة المرور باسم الخادم > وقاعدة البيانات ومعرف المستخدم وكلمة المرور قبل حفظ الملف.

    {
        "name": "AzureSQLDatabaseLinkedService",
        "properties": {
            "type": "AzureSqlDatabase",
            "typeProperties": {
                "connectionString": "Server = tcp:<server>.database.windows.net,1433;Initial Catalog=<database>; Persist Security Info=False; User ID=<user> ; Password=<password>; MultipleActiveResultSets = False; Encrypt = True; TrustServerCertificate = False; Connection Timeout = 30;"
            }
        }
    }
    
  2. في PowerShell، بدل إلى مجلد ADF.

  3. شغل cmdlet Set-AzDataFactoryV2LinkedService لإنشاء الخدمة المرتبطة: AzureSqlDatabaseLinkedService.

    Set-AzDataFactoryV2LinkedService -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "AzureSQLDatabaseLinkedService" -File ".\AzureSQLDatabaseLinkedService.json"
    

    فيما يلي ناتج العينة:

    LinkedServiceName : AzureSQLDatabaseLinkedService
    ResourceGroupName : ADF
    DataFactoryName   : incrementalloadingADF
    Properties        : Microsoft.Azure.Management.DataFactory.Models.AzureSqlDatabaseLinkedService
    ProvisioningState :
    

إنشاء datasets

في هذه الخطوة، يمكنك إنشاء مجموعات بيانات تمثل مصدر ووجهة البيانات.

قم بإنشاء مجموعة بيانات المصدر

  1. أنشئ ملف JSON باسم SourceDataset.json في نفس الملف بالمحتويات التالية:

    {
        "name": "SourceDataset",
        "properties": {
            "type": "AzureSqlTable",
            "typeProperties": {
                "tableName": "data_source_table"
            },
            "linkedServiceName": {
                "referenceName": "AzureSQLDatabaseLinkedService",
                "type": "LinkedServiceReference"
            }
        }
    }
    
    

    في هذا البرنامج التعليمي، استخدم الجدول الذي يحمل اسم data_source_table. استبدله إذا كنت تستخدم جدولاً باسم مختلف.

  2. شغل Set-AzDataFactoryV2Dataset cmdlet لإنشاء مجموعة بيانات SourceDataset.

    Set-AzDataFactoryV2Dataset -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "SourceDataset" -File ".\SourceDataset.json"
    

    إليك ناتج تشغيل عينة cmdlet:

    DatasetName       : SourceDataset
    ResourceGroupName : ADF
    DataFactoryName   : incrementalloadingADF
    Structure         :
    Properties        : Microsoft.Azure.Management.DataFactory.Models.AzureSqlTableDataset
    

أنشئ مجموعة بيانات المورد

  1. أنشئ ملف JSON باسم SinkDataset.json في نفس الملف بالمحتويات التالية:

    {
        "name": "SinkDataset",
        "properties": {
            "type": "AzureBlob",
            "typeProperties": {
                "folderPath": "adftutorial/incrementalcopy",
                "fileName": "@CONCAT('Incremental-', pipeline().RunId, '.txt')",
                "format": {
                    "type": "TextFormat"
                }
            },
            "linkedServiceName": {
                "referenceName": "AzureStorageLinkedService",
                "type": "LinkedServiceReference"
            }
        }
    }   
    

    هام

    تفترض هذه القصاصة البرمجية امتلاكك حاوية blob المسماة adftutorial في blob storage. أنشئ الحاوية إذا لم تكن موجودة، أو استخدم اسم حاوية موجودة. يتم إنشاء مجلد الناتج incrementalcopy تلقائياً إذا لم يكن موجوداً في الحاوية. في هذا البرنامج التعليمي، يتم إنشاء اسم الملف ديناميكياً من خلال التعبير@CONCAT('Incremental-', pipeline().RunId, '.txt').

  2. شغل Set-AzDataFactoryV2Dataset cmdlet لإنشاء مجموعة بيانات SinkDataset.

    Set-AzDataFactoryV2Dataset -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "SinkDataset" -File ".\SinkDataset.json"
    

    إليك ناتج تشغيل عينة cmdlet:

    DatasetName       : SinkDataset
    ResourceGroupName : ADF
    DataFactoryName   : incrementalloadingADF
    Structure         :
    Properties        : Microsoft.Azure.Management.DataFactory.Models.AzureBlobDataset    
    

أنشئ مجموعة بيانات لهذه العلامة المائية

في هذه الخطوة، يمكنك إنشاء مجموعة بيانات لتخزين قيمة علامة مائية عالية.

  1. أنشئ ملف JSON باسم WatermarkDataset.json في نفس الملف بالمحتويات التالية:

    {
        "name": " WatermarkDataset ",
        "properties": {
            "type": "AzureSqlTable",
            "typeProperties": {
                "tableName": "watermarktable"
            },
            "linkedServiceName": {
                "referenceName": "AzureSQLDatabaseLinkedService",
                "type": "LinkedServiceReference"
            }
        }
    }    
    
  2. شغل Set-AzDataFactoryV2Dataset cmdlet لإنشاء مجموعة بيانات WatermarkDataset.

    Set-AzDataFactoryV2Dataset -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "WatermarkDataset" -File ".\WatermarkDataset.json"
    

    إليك ناتج تشغيل عينة cmdlet:

    DatasetName       : WatermarkDataset
    ResourceGroupName : ADF
    DataFactoryName   : incrementalloadingADF
    Structure         :
    Properties        : Microsoft.Azure.Management.DataFactory.Models.AzureSqlTableDataset    
    

إنشاء البنية الأساسية لبرنامج ربط العمليات التجارية

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

  1. أنشئ ملف JSON باسم IncrementalCopyPipeline.json في نفس الملف بالمحتويات التالية:

    {
        "name": "IncrementalCopyPipeline",
        "properties": {
            "activities": [
                {
                    "name": "LookupOldWaterMarkActivity",
                    "type": "Lookup",
                    "typeProperties": {
                        "source": {
                        "type": "SqlSource",
                        "sqlReaderQuery": "select * from watermarktable"
                        },
    
                        "dataset": {
                        "referenceName": "WatermarkDataset",
                        "type": "DatasetReference"
                        }
                    }
                },
                {
                    "name": "LookupNewWaterMarkActivity",
                    "type": "Lookup",
                    "typeProperties": {
                        "source": {
                            "type": "SqlSource",
                            "sqlReaderQuery": "select MAX(LastModifytime) as NewWatermarkvalue from data_source_table"
                        },
    
                        "dataset": {
                        "referenceName": "SourceDataset",
                        "type": "DatasetReference"
                        }
                    }
                },
    
                {
                    "name": "IncrementalCopyActivity",
                    "type": "Copy",
                    "typeProperties": {
                        "source": {
                            "type": "SqlSource",
                            "sqlReaderQuery": "select * from data_source_table where LastModifytime > '@{activity('LookupOldWaterMarkActivity').output.firstRow.WatermarkValue}' and LastModifytime <= '@{activity('LookupNewWaterMarkActivity').output.firstRow.NewWatermarkvalue}'"
                        },
                        "sink": {
                            "type": "BlobSink"
                        }
                    },
                    "dependsOn": [
                        {
                            "activity": "LookupNewWaterMarkActivity",
                            "dependencyConditions": [
                                "Succeeded"
                            ]
                        },
                        {
                            "activity": "LookupOldWaterMarkActivity",
                            "dependencyConditions": [
                                "Succeeded"
                            ]
                        }
                    ],
    
                    "inputs": [
                        {
                            "referenceName": "SourceDataset",
                            "type": "DatasetReference"
                        }
                    ],
                    "outputs": [
                        {
                            "referenceName": "SinkDataset",
                            "type": "DatasetReference"
                        }
                    ]
                },
    
                {
                    "name": "StoredProceduretoWriteWatermarkActivity",
                    "type": "SqlServerStoredProcedure",
                    "typeProperties": {
    
                        "storedProcedureName": "usp_write_watermark",
                        "storedProcedureParameters": {
                            "LastModifiedtime": {"value": "@{activity('LookupNewWaterMarkActivity').output.firstRow.NewWatermarkvalue}", "type": "datetime" },
                            "TableName":  { "value":"@{activity('LookupOldWaterMarkActivity').output.firstRow.TableName}", "type":"String"}
                        }
                    },
    
                    "linkedServiceName": {
                        "referenceName": "AzureSQLDatabaseLinkedService",
                        "type": "LinkedServiceReference"
                    },
    
                    "dependsOn": [
                        {
                            "activity": "IncrementalCopyActivity",
                            "dependencyConditions": [
                                "Succeeded"
                            ]
                        }
                    ]
                }
            ]
    
        }
    }
    
  2. شغل Set-AzDataFactoryV2Pipeline cmdlet لإنشاء البنية الأساسية IncrementalCopyPipeline.

    Set-AzDataFactoryV2Pipeline -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -Name "IncrementalCopyPipeline" -File ".\IncrementalCopyPipeline.json"
    

    فيما يلي ناتج العينة:

     PipelineName      : IncrementalCopyPipeline
     ResourceGroupName : ADF
     DataFactoryName   : incrementalloadingADF
     Activities        : {LookupOldWaterMarkActivity, LookupNewWaterMarkActivity, IncrementalCopyActivity, StoredProceduretoWriteWatermarkActivity}
     Parameters        :
    

قم بتشغيل البنية الأساسية

  1. شغل المسار IncrementalCopyPipeline باستخدام Cmdlet Invoke-AzDataFactoryV2Pipeline. استبدل placeholders بمجموعة الموارد الخاصة بك واسم بيانات المصنع.

    $RunId = Invoke-AzDataFactoryV2Pipeline -PipelineName "IncrementalCopyPipeline" -ResourceGroupName $resourceGroupName -dataFactoryName $dataFactoryName
    
  2. تحقق من حالة المسار عن طريق تشغيل cmdlet Get-AzDataFactoryV2ActivityRun حتى تشاهد نجاح تشغيل جميع الأنشطة. استبدال placeholders بوقتك المناسب للمعلمات RunStartedAfter وRunStartedBefore. في هذا البرنامج التعليمي، يمكنك استخدام -RunStartedAfter "2017/09/14"و-RunStartedBefore "2017/09/15".

    Get-AzDataFactoryV2ActivityRun -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineRunId $RunId -RunStartedAfter "<start time>" -RunStartedBefore "<end time>"
    

    فيما يلي ناتج العينة:

    ResourceGroupName : ADF
    DataFactoryName   : incrementalloadingADF
    ActivityName      : LookupNewWaterMarkActivity
    PipelineRunId     : d4bf3ce2-5d60-43f3-9318-923155f61037
    PipelineName      : IncrementalCopyPipeline
    Input             : {source, dataset}
    Output            : {NewWatermarkvalue}
    LinkedServiceName :
    ActivityRunStart  : 9/14/2017 7:42:42 AM
    ActivityRunEnd    : 9/14/2017 7:42:50 AM
    DurationInMs      : 7777
    Status            : Succeeded
    Error             : {errorCode, message, failureType, target}
    
    ResourceGroupName : ADF
    DataFactoryName   : incrementalloadingADF
    ActivityName      : LookupOldWaterMarkActivity
    PipelineRunId     : d4bf3ce2-5d60-43f3-9318-923155f61037
    PipelineName      : IncrementalCopyPipeline
    Input             : {source, dataset}
    Output            : {TableName, WatermarkValue}
    LinkedServiceName :
    ActivityRunStart  : 9/14/2017 7:42:42 AM
    ActivityRunEnd    : 9/14/2017 7:43:07 AM
    DurationInMs      : 25437
    Status            : Succeeded
    Error             : {errorCode, message, failureType, target}
    
    ResourceGroupName : ADF
    DataFactoryName   : incrementalloadingADF
    ActivityName      : IncrementalCopyActivity
    PipelineRunId     : d4bf3ce2-5d60-43f3-9318-923155f61037
    PipelineName      : IncrementalCopyPipeline
    Input             : {source, sink}
    Output            : {dataRead, dataWritten, rowsCopied, copyDuration...}
    LinkedServiceName :
    ActivityRunStart  : 9/14/2017 7:43:10 AM
    ActivityRunEnd    : 9/14/2017 7:43:29 AM
    DurationInMs      : 19769
    Status            : Succeeded
    Error             : {errorCode, message, failureType, target}
    
    ResourceGroupName : ADF
    DataFactoryName   : incrementalloadingADF
    ActivityName      : StoredProceduretoWriteWatermarkActivity
    PipelineRunId     : d4bf3ce2-5d60-43f3-9318-923155f61037
    PipelineName      : IncrementalCopyPipeline
    Input             : {storedProcedureName, storedProcedureParameters}
    Output            : {}
    LinkedServiceName :
    ActivityRunStart  : 9/14/2017 7:43:32 AM
    ActivityRunEnd    : 9/14/2017 7:43:47 AM
    DurationInMs      : 14467
    Status            : Succeeded
    Error             : {errorCode, message, failureType, target}
    
    

مراجعة النتائج

  1. في blob storage (مخزن sink) تستطيع مشاهدة البيانات المنسوخة إلى الملف المعرف في SinkDataset. في البرنامج التعليمي الحالي، اسم الملف هوIncremental- d4bf3ce2-5d60-43f3-9318-923155f61037.txt. افتح الملف، ويمكنك مشاهدة السجلات في الملف وهي نفس البيانات في قاعدة بيانات SQL.

    1,aaaa,2017-09-01 00:56:00.0000000
    2,bbbb,2017-09-02 05:23:00.0000000
    3,cccc,2017-09-03 02:36:00.0000000
    4,dddd,2017-09-04 03:21:00.0000000
    5,eeee,2017-09-05 08:06:00.0000000
    
  2. تحقق من أحدث قيمة من watermarktable. يمكنك ملاحظة تحديث قيمة العلامة المائية.

    Select * from watermarktable
    

    فيما يلي ناتج العينة:

    TableName WatermarkValue
    data_source_table 2017-09-05 (8:06:00.000)

أدرج البيانات في مخزن مصدر البيانات للتحقق من تحميل بيانات دلتا

  1. أدخل بيانات جديدة في قاعدة بيانات SQL (مخزن مصدر البيانات).

    INSERT INTO data_source_table
    VALUES (6, 'newdata','9/6/2017 2:23:00 AM')
    
    INSERT INTO data_source_table
    VALUES (7, 'newdata','9/7/2017 9:01:00 AM')
    

    البيانات المحدثة في قاعدة بيانات SQL هي:

    PersonID | Name | LastModifytime
    -------- | ---- | --------------
    1 | aaaa | 2017-09-01 00:56:00.000
    2 | bbbb | 2017-09-02 05:23:00.000
    3 | cccc | 2017-09-03 02:36:00.000
    4 | dddd | 2017-09-04 03:21:00.000
    5 | eeee | 2017-09-05 08:06:00.000
    6 | newdata | 2017-09-06 02:23:00.000
    7 | newdata | 2017-09-07 09:01:00.000
    
  2. شغل المسار IncrementalCopyPipeline مرة أخرى مستخدماً Cmdlet Invoke-AzDataFactoryV2Pipeline. استبدل placeholders بمجموعة الموارد الخاصة بك واسم بيانات المصنع.

    $RunId = Invoke-AzDataFactoryV2Pipeline -PipelineName "IncrementalCopyPipeline" -ResourceGroupName $resourceGroupName -dataFactoryName $dataFactoryName
    
  3. تحقق من حالة المسار عن طريق تشغيل cmdlet Get-AzDataFactoryV2ActivityRun حتى تشاهد نجاح تشغيل جميع الأنشطة. استبدال placeholders بوقتك المناسب للمعلمات RunStartedAfter وRunStartedBefore. في هذا البرنامج التعليمي، يمكنك استخدام -RunStartedAfter "2017/09/14"و-RunStartedBefore "2017/09/15".

    Get-AzDataFactoryV2ActivityRun -DataFactoryName $dataFactoryName -ResourceGroupName $resourceGroupName -PipelineRunId $RunId -RunStartedAfter "<start time>" -RunStartedBefore "<end time>"
    

    فيما يلي ناتج العينة:

    ResourceGroupName : ADF
    DataFactoryName   : incrementalloadingADF
    ActivityName      : LookupNewWaterMarkActivity
    PipelineRunId     : 2fc90ab8-d42c-4583-aa64-755dba9925d7
    PipelineName      : IncrementalCopyPipeline
    Input             : {source, dataset}
    Output            : {NewWatermarkvalue}
    LinkedServiceName :
    ActivityRunStart  : 9/14/2017 8:52:26 AM
    ActivityRunEnd    : 9/14/2017 8:52:58 AM
    DurationInMs      : 31758
    Status            : Succeeded
    Error             : {errorCode, message, failureType, target}
    
    ResourceGroupName : ADF
    DataFactoryName   : incrementalloadingADF
    ActivityName      : LookupOldWaterMarkActivity
    PipelineRunId     : 2fc90ab8-d42c-4583-aa64-755dba9925d7
    PipelineName      : IncrementalCopyPipeline
    Input             : {source, dataset}
    Output            : {TableName, WatermarkValue}
    LinkedServiceName :
    ActivityRunStart  : 9/14/2017 8:52:26 AM
    ActivityRunEnd    : 9/14/2017 8:52:52 AM
    DurationInMs      : 25497
    Status            : Succeeded
    Error             : {errorCode, message, failureType, target}
    
    ResourceGroupName : ADF
    DataFactoryName   : incrementalloadingADF
    ActivityName      : IncrementalCopyActivity
    PipelineRunId     : 2fc90ab8-d42c-4583-aa64-755dba9925d7
    PipelineName      : IncrementalCopyPipeline
    Input             : {source, sink}
    Output            : {dataRead, dataWritten, rowsCopied, copyDuration...}
    LinkedServiceName :
    ActivityRunStart  : 9/14/2017 8:53:00 AM
    ActivityRunEnd    : 9/14/2017 8:53:20 AM
    DurationInMs      : 20194
    Status            : Succeeded
    Error             : {errorCode, message, failureType, target}
    
    ResourceGroupName : ADF
    DataFactoryName   : incrementalloadingADF
    ActivityName      : StoredProceduretoWriteWatermarkActivity
    PipelineRunId     : 2fc90ab8-d42c-4583-aa64-755dba9925d7
    PipelineName      : IncrementalCopyPipeline
    Input             : {storedProcedureName, storedProcedureParameters}
    Output            : {}
    LinkedServiceName :
    ActivityRunStart  : 9/14/2017 8:53:23 AM
    ActivityRunEnd    : 9/14/2017 8:53:41 AM
    DurationInMs      : 18502
    Status            : Succeeded
    Error             : {errorCode, message, failureType, target}
    
    
  4. في blob storage، تستطيع رؤية إنشاء ملف أخر. في هذا البرنامج التعليمي، اسم الملف الجديد هو Incremental-2fc90ab8-d42c-4583-aa64-755dba9925d7.txt. افتح هذا الملف، وسترى صفين من السجلات.

  5. تحقق من أحدث قيمة من watermarktable. يمكنك ملاحظة تحديث قيمة العلامة المائية.

    Select * from watermarktable
    

    عينة الناتج:

    TableName WatermarkValue
    data_source_table 2017-09-07 09:01:00.000

نفّذت الخطوات التالية في هذا البرنامج التعليمي:

  • أعد مخزن بيانات لتخزين قيمة العلامة المائية.
  • إنشاء data factory.
  • أنشئ الخدمة ذات الصلة.
  • أنشئ مجموعات بيانات المورد والمصدر والعلامة المائية.
  • إنشاء البنية الأساسية لبرنامج ربط العمليات التجارية.
  • تشغيل البنية الأساسية لبرنامج ربط العمليات التجارية.
  • مراقبة تشغيل المسار.

في هذا البرنامج التعليمي، مسار البيانات المنسوخة من جدول واحد في قاعدة بيانات Azure SQL إلى Blob storage. انتقل إلى البرنامج التعليمي التالي لمعرفة كيفية نسخ البيانات من جداول متعددة في قاعدة بيانات SQL Server إلى قاعدة بيانات SQL.