شروع کار با تسک های SSIS
هنگامی که پروژه SSIS را به Solution اضافه میکنیم ، چندین فولدر جدید برایمان در سمت راست ظاهر میشوند که مهم ترین آنها فولدر SSIS Packages میباشد که پکیج هایی که عملیات ETL را برایمان انجام میدهند در این قسمت قرار میگیرند.
از منوی View ، نوار SSIS Toolbox را باز میکنیم و تسک ها و کامپوننت های مختلف را مشاهده میکنیم که سعی میکنیم مهم ترین های آن ها را برایتان توضیح دهیم.
با پکیج های ETL مهم میتوان امور انتقال داده و هم اموری مرتبط با دیتابیس ، نظیر بکاپ گرفتن و یا Shrink کردن دیتابیس را انجام دهیم.
تسک Shrink Database :
کاری که این تسک انجام میدهد ، کاهش سایز دیتای داخل SQL Server Database و فایل های Log می باشد.
تسک Backup Database :
از دیتابیسی که داخل این دیتابیس انتخاب میکنیم ، بکاپ گرفته می شود که میتوانیم نوع بکاپ ، مدت زمان بین هر بکاپ و تنظیمات مربوط به Encryption را کانفیگ کنیم.
اکثر تسک ها قسمتی به نام Connection دارند که در این قسمت باید Server Name و دیتابیس مورد نظر را انتخاب کنیم.
پایپ لاین سبز رنگ ، نشان دهنده این میباشد که در صورت اجرای موفقیت آمیز تسک ، کدام تسک در مرحله بعدی اجرا شود.
فرض کنید میخواهیم در صورت بروز خطا در هنگام اجرای پکیج ، یک ایمیل ارسال شود. تسک Shrink Database را تسک Send Mail Task وصل کرده و سپس روی Procedure Constraint سبز رنگ بینشان دو بار کلیک کرده و آن را روی حالت Failure میگذاریم.
تصویر بالا مثال یک عملیات Maintenance یا دیتابیسی است که خیلی ارتباطی به کار با دیتا ندارد.
حال یک پکیج جدید ایجاد میکینم و قصد داریم دو تیبل را با یکدیگر جوین زده و با استفاده از شرط گذاری ، آنها را در دو تیبل جدید و متفاوت قرار دهیم.
در پکیج های SSIS یک سری تسک داریم. مثال قبلی کاری با دیتا و انتقال داده نداشت. ولی در این مثال میخواهیم اطلاعات را بخوانیم و به جای جدید انقال دهیم ، یعنی جریان داده داریم. به همین دلیل در ابتدا از کنترل Data Flow Task استفاده میکینم.
روی این قسمت دبل کلیک کرده و وارد پنجره جدیدی میشویم و حالا میتوانیم عملیات کار با دیتا آغاز کنیم.
وقتی وارد پنجره Data Flow Task میشویم ، محتواو کامپوننت های نوار SSIS Toolbox نیز تغییر میکنند.
این کامپوننت ها به صورت عمومی سه دسته هستند :
دسته اول کامپوننت هایی که مربوط به خواندن اطلاعات از مبدا هستند.
دسته دوم کامپوننت های مربوط به اعمال تغییرات روی دیتا
و دسته سوم کامپوننت های مرتبط با Destination هستند ، یعنی مقصدی که قصد دارم دیتای ترنسفورم شده را در آنجا قرار دهیم.
وقتی میخواهیم دیتا را از تیبل های یک بانک اطلاعاتی بخوانیم از 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 ، عملیات زمانبر و سنگینی میباشد که سرعت و بار اجرای کوئری را بسیار زیاد میکند.