شروع کار با تسک ها و کامپوننتهای SSIS
هنگامی که پروژه SSIS را به Solution اضافه میکنیم ، چندین فولدر جدید برایمان در سمت راست ظاهر میشوند که مهم ترین آنها فولدر SSIS Packages میباشد که پکیج هایی که عملیات ETL را برایمان انجام میدهند در این قسمت قرار میگیرند.
از منوی View ، نوار SSIS Toolbox را باز میکنیم و تسک ها و کامپوننت های مختلف را مشاهده میکنیم که سعی میکنیم مهم ترین های آن ها را برایتان توضیح دهیم.
با پکیج های ETL مهم میتوان امور انتقال داده و هم اموری مرتبط با دیتابیس ، نظیر بکاپ گرفتن و یا Shrink کردن دیتابیس را انجام دهیم.
Shrink Database Task :
کاری که این تسک انجام میدهد ، کاهش سایز دیتای داخل SQL Server Database و فایل های Log می باشد.
Backup Database Task :
از دیتابیسی که داخل این دیتابیس انتخاب میکنیم ، بکاپ گرفته می شود که میتوانیم نوع بکاپ ، مدت زمان بین هر بکاپ و تنظیمات مربوط به Encryption را کانفیگ کنیم.

اکثر تسک ها قسمتی به نام Connection دارند که در این قسمت باید Server Name و دیتابیس مورد نظر را انتخاب کنیم.
پایپ لاین سبز رنگ ، نشان دهنده این میباشد که در صورت اجرای موفقیت آمیز تسک ، کدام تسک در مرحله بعدی اجرا شود.
فرض کنید میخواهیم در صورت بروز خطا در هنگام اجرای پکیج ، یک ایمیل ارسال شود. تسک Shrink Database را تسک Send Mail Task وصل کرده و سپس روی Precedence Constraint سبز رنگ بینشان دو بار کلیک کرده و آن را روی حالت Failure میگذاریم.

تصویر بالا مثال یک عملیات Maintenance یا دیتابیسی است که خیلی ارتباطی به کار با دیتا ندارد.
حال یک پکیج جدید ایجاد میکینم و قصد داریم دو جدول را با یکدیگر جوین زده و با استفاده از شرط گذاری ، آنها را در دو تیبل جدید و متفاوت قرار دهیم.
در این مثال میخواهیم اطلاعاتی را بخوانیم و به جای جدید انقال دهیم ، یعنی جریان داده داریم. به همین دلیل از Data Flow Task استفاده میکینم.

روی Data Flow Task کلیک کرده و وارد پنجره جدیدی میشویم و حالا میتوانیم عملیات کار با دیتا آغاز کنیم.
وقتی وارد پنجره Data Flow Task میشویم ، کامپوننت های نوار SSIS Toolbox نیز تغییر میکنند.
این کامپوننت ها به صورت عمومی سه دسته هستند :
– کامپوننت هایی که مربوط به خواندن اطلاعات از مبدا هستند.عملیات Extract
-کامپوننت های مربوط به اعمال تغییرات روی دیتا.عملیات Transform
-کامپوننت های مرتبط با Destination هستند ، یعنی مقصدی که قصد دارم دیتای Transform شده را در آنجا قرار دهیم.عملیات Load
وقتی میخواهیم دیتا را از جدولهای یک بانک اطلاعاتی بخوانیم از OLE DB Source استفاده کنیم.

کانکشن و اطلاعات مربوط به سرور و دیتابیس را در قسمت Connection مشخص میکنیم.
در قسمت پایین از لیست جدول ها و View ها ، جدول یا ویوی مورد نظرمان را انتخاب میکنیم.
همچنین میتوانیم Data Access Mode را روی SQL Command قرار دهیم تا با نوشتن یک کوئریSELECT به دیتا مورد نظرمان دسترسی پیدا کنیم.

در این کامپوننت جدول OrderHeader را انتخاب میکنیم.
سپس از منوی سمت چپ به قسمت Columns رفته و از این قسمت میتوانیم ستون های مورد نظرمان را انتخاب کنیم.
حال یک Source دیگر گذاشته و مانند مرحله قبل آن را کانفیگ کرده و جدول OrderDetail را انتخاب میکنیم.
حال میخواهیم این دو جدول را با هم Join کنیم. از کامپوننت Merge Join استفاده میکنیم.
نکته مهم در استفاده از این کامپوننت این است که باید قبل از اعمال Merge Join باید دیتا هایمان را مرتب سازی کنیم.
به همین دلیل قبل از کامپوننت Merge Join ، کامپوننت Sort را قرار میدهیم.
در Sort ، نوع مرتب سازی که به صورت صعودی ای نزولی باشد و اینکه مرتب سازی بر اساس کدام ستون باشد را انتخاب میکنیم.

در نتیجه یک جریان داده ای را همانند تصویر ، ابتدا Sort کرده سپس به Merge Join میفرستیم.
هنگام اتصال اولین کامپوننت برای Join به Merge Join ، از ما میپرسد که این جدول را به عنوان جدول Left در نظر بگیرد و یا Right

سایر مراحل را برای جدول دیگر نیز انجام میدهیم و سپس به کانفیگ Merge Join میپردازیم.

از قسمت Join Type نوع جوین را انتخاب کرده. Swap Inputs به ما کمک میکند که جدولی قصد داریم سمت چپ در Left Join قرار دهیم را تغییر دهیم.
سپس از باکس سمت چپ ، ستون های مورد نظرمان را از هر دو جدول ، تیک میزنیم.
حال جریان دیتای خروجی از Merge Join را به کامپوننتی به نام Conditional Split وصل میکنیم که بر اساس یک یا چند شرط ، جریان واحد ما را به چند جریان داده ای تبدیل میکند.
بر اساس OnlineOrderFlag شرط گذاری میکنیم تا خرید های آنلاین و حضوری را از یکدیگر جدا کنیم.

در این کامپوننت از انواع عملگر ها برای اعمال شرط میتوان استفاده کرد.
حال میخواهیم دو جریان خروجی از کامپوننت مربوط به شرط را به مقصد بفرستیم.
اگر مقصدمان یک دیتابیس هست از OLE DB Destination استفاده میکنیم.
هنگام اتصال به مقصد از یوزر سوال میشود که کدام جریان خروجی را قصد داریم به Destination بریزیم. حال وارد کانفیگ OLE DB Destination میشویم و دیتابیس مدنظر و جدول مورد نظرمان را انتخاب میکنیم. همچنین میتوانیم یک جدول جدید ایجاد کنیم.

توجه کنید در این روش باید نام جدول را تغییر دهیم و همچنین باید دیتاتایپ ها را چک کنیم تا اشتباهی صورت نگیرد.
حتما باید به قسمت Mapping برویم که به ما امکان ادامه کار داده شود. در این قسمت باید چک کنیم آیا ستون هایی که در خروجی برای ورودی متناظر شده اند به درستی هستند یا خیر.
همین کار را برای جدول دیگر انجام می دهیم.

حال باید این پکیج را ایجاد کنیم. راست کلیک کرده و Execute Task را میزنیم.

میتوانیم صحت اطلاعات را در دیتابیس و جدول هایی که در Destination قرار داده ایم و اکنون در SSMS قرار گرفته اند ، بررسی کنیم.
توجه کنید در این مثال ، استفاده از کوئری کامند در سورس ها و نوشتن کامند مربوط به جوین در این قسمت ، بسیار به صرفه تر از استفاده کامپوننت Merge Join می باشد. زیر لازمه اجرای Merge Join ، Sorting میباشد که همانطور که در جلسات گذشته اشاره شد ، عملیات Sorting ، عملیات زمانبر و سنگینی میباشد که سرعت و بار اجرای کوئری را بسیار زیاد میکند.