بارگذاری افزایشی در SSIS (Incremental Load in SSIS)
در این مقاله، نحوهی انجام بارگذاری افزایشی در SSIS (Incremental Load) را با استفاده از مثالها نشان خواهیم داد. بارگذاری افزایشی در SSIS به معنای مقایسهی دادههای منبع با جدول مقصد بر اساس شناسه (ID)، تاریخ (Date Stamp) یا زمان (Time Stamp) است.
اگر رکوردهای جدیدی در دادههای منبع وجود داشته باشد، باید این رکوردها را در جدول مقصد وارد کنیم. به عنوان مثال، باید هر روز رکوردهای فروش بر اساس شعبه را وارد کنیم.
اگر مقادیر بهروزرسانی شدهای در دادههای منبع وجود داشته باشد، باید این رکوردها را در جدول مقصد بهروزرسانی کنیم. به عنوان مثال، باید آدرس مشتریان را بهروزرسانی کنیم.
در این مثال، مراحل لازم برای پیکربندی بارگذاری افزایشی در SSIS را نمایش خواهیم داد. پیش از آنکه شروع به ساخت پکیج SSIS کنیم، ابتدا دادههای منبع را بررسی خواهیم کرد.

حالا بیایید دادهها را در داخل جدول مقصد نیز بررسی کنیم.

وظیفهی ما در اینجا بارگذاری ۴ رکورد اضافی به جدول مقصد و بهروزرسانی دادههای موجود در ردیفهای ۲، ۵ و ۱۰ با استفاده از بارگذاری افزایشی SSIS است.
پیکربندی بارگذاری افزایشی در SSIS (Configure Incremental Load in SSIS)
گام ۱: Data Flow Task را از Toolbox به منطقهی Control Flow بکشید و رها کنید و آن را به نام “Incremental Load in SSIS” تغییر نام دهید.

روی آن دوبار کلیک کنید تا برگه Data Flow در SSIS باز شود.
گام ۲: OLE DB Source را به منطقهی Data Flow بکشید و رها کنید. با دوبار کلیک روی آن، تنظیمات OLE DB Connection Manager باز خواهد شد.
از اسکرینشات زیر، میتوانید مشاهده کنید که ما پایگاه دادهی زیر را به عنوان پایگاه دادهی منبع و [CDC Source] را به عنوان جدول منبع انتخاب کردهایم.

گام ۳: روی تب Columns کلیک کنید تا ستونها را بررسی کنید. در این تب، میتوانیم ستونهای غیرضروری را غیر فعال کنیم.

روی OK کلیک کنید تا OLE DB Source بسته شود و سپس Lookup Transformation را از Toolbox به تب Data Flow بکشید.

گام ۴: روی Lookup Transformation دوبار کلیک کنید تا Lookup Transformation Editor باز شود و بتوانید جدول Lookup (جدول مرجع) را پیکربندی کنید. در تب General، زیر گزینهی “Specify how to handle rows with no matching entries”، گزینهی پیشفرض Fail Component را به Ignore Failure تغییر دهید.

گام ۵: روی تب Connection کلیک کنید تا تنظیمات اتصالات Lookup پیکربندی شود. اگر قبلاً OLE DB Connection Manager را ایجاد کردهاید، آن را از لیست انتخاب کنید. در غیر این صورت، روی دکمه New کلیک کرده و آن را پیکربندی کنید. در اینجا، ما پایگاه دادهی زیر را انتخاب کردهایم.
سپس، ما از Query به عنوان جدول Lookup استفاده میکنیم زیرا فقط به یک ستون برای جستجو نیاز داریم (یعنی Employee_ID)، بنابراین از query استفاده میکنیم.
توجه: به طور کلی، نیاز ممکن است شامل ID یا Date and Time باشد.

گام ۶: روی Available Input Columns کلیک کنید و آن را به Available Lookup Columns بکشید تا یک join بین دو مجموعه داده ایجاد شود. ستون Employee_ID در دادههای منبع با ستون [Employee_ID] در جدول Lookup (که در واقع همان جدول مقصد است) مقایسه خواهد شد.

گام ۷: Conditional Split Transformation را بکشید و خروجی Lookup Match Output را به عنوان منبع به Conditional Split متصل کنید.

گام ۸: روی آن دوبار کلیک کنید تا شرایط را وارد کنید. شرطی که ما در این Transformation استفاده کردهایم ISNULL(LKP_Employee_ID) است. این به این معناست که Conditional Split بررسی میکند که آیا Employee ID در Lookup خالی (Null) است یا نه.
اگر LKP_Employee_ID Null باشد، یعنی رکوردی در جدول مقصد وجود ندارد. بنابراین، ما میخواهیم رکورد جدیدی وارد کنیم.
اگر LKP_Employee_ID Null نباشد، یعنی رکوردی در جدول مقصد وجود دارد. بنابراین، ما میخواهیم دادههای موجود را با دادههای جدید بهروزرسانی کنیم.
از توضیحات فوق، میتوان دید که ما از یک شرط و یک خروجی پیشفرض در Conditional Split Transformation استفاده کردهایم. بنابراین، در مجموع دو خروجی خواهیم داشت.

گام ۹: یک OLE DB Destination و OLE DB Command Transformation را به منطقهی Data Flow بکشید و سپس فلش خروجی را به OLE DB Destination جدید متصل کنید. یک پنجره پاپ آپ به نام Input Output Selection ظاهر خواهد شد که از شما میخواهد نوع Input-Output را انتخاب کنید: INSERT یا UPDATE.
توجه: برای بهروزرسانی دادههای جدول، به یک SQL Query برای انجام دستور UPDATE نیاز داریم. به همین دلیل از OLE DB Command Transformation استفاده میکنیم.

گام ۱۰: روی OLE DB Destination دوبار کلیک کنید تا OLE DB Connection Manager را انتخاب کنید و جدول [CDC Target] را در پایگاه داده برای وارد کردن رکوردهای جدید انتخاب کنید.

گام ۱۱: روی تب Mappings کلیک کنید تا بررسی کنید که آیا ستونهای منبع بهطور دقیق به ستونهای مقصد نقشهبرداری شدهاند یا خیر. اگر به اسکرینشات زیر دقت کنید، مشاهده خواهید کرد که ما برای ستون Employee_ID نقشهبرداری انجام ندادهایم، زیرا این ستون یک ستون Auto-increment Identity است.

گام ۱۲: روی OLE DB Command Transformation دوبار کلیک کنید تا Advanced Editor برای OLE DB Command باز شود و بتوانید آن را پیکربندی کنید. در تب Connection Managers، OLE DB Connection که قبلاً ایجاد شده است را از لیست انتخاب میکنیم.

در بخش Component Properties، باید دستور SQL را برای انجام بهروزرسانیها بنویسیم. لطفاً ویژگی SqlCommand را انتخاب کرده و روی دکمه جستجو (دکمه …) کلیک کنید. پس از کلیک روی دکمه جستجو، پنجرهای به نام String Value Editor باز خواهد شد که میتوانید دستور را در آن وارد کنید. در این مثال، ما در حال بهروزرسانی مقادیر در جدول products هستیم.

دستور SQL که استفاده کردیم به شرح زیر است:

در بخش Column Mapping، باید نام ستون مناسب را به پارامترها اختصاص دهیم.
نکته: اولین علامت سوال (؟) پارامتر ۰ خواهد بود، دومی پارامتر ۱، و به همین ترتیب.

روی OK کلیک کنید تا پیکربندی Incremental Load در پکیج SSIS تکمیل شود. حالا میتوانیم پکیج را اجرا کنیم.

بیایید SQL Server Management Studio را باز کرده و بررسی کنیم که آیا رکوردهای جدید وارد شده و رکوردهای قدیمی با استفاده از Incremental Load در SSIS بهروزرسانی شدهاند یا خیر.

دیدگاهتان را بنویسید