جلسه هشتم – 7/08/93
اگر بخواهیم فایلهای یک فولدر را بخوانیم باید در کامپوننت Foreach Loop مقدار property با عنوان foreach file enumerator را انتخاب نماییم.
مثال: می خواهیم 3 فایل متن را خوانده و یکجا در یک جدول بریزیم.
1. سه فایل با نام های x1.txt ، x2.txt و x3.txt و با محتوای دالخواه ایجاد می کنیم.
2. حلقه ای از نوع Foreach و با مشخصات زیر تولید می کنیم. به مقدار Enumerator توجه بفرمایید. متغییر FileName از نوع String بوده و مقدار فایل به همراه مسیر در آن ذخیره می شود.
3. سپس یک عنصر Data Flow Task در حلقه قرار می دهیم، در بخش مربوطه رفته و به ترتیب زیر عمل می کنیم.
4. هنگام تعریف Flat File Source سیستم یک Connection از نوع Text خواهد ساخت. باید property آنرا گرفته و مقدار Expression را به ترتیب زیر تنظیم کنید.
5. حال بسته آماده و با اجرا، مقادیر فایل های متن به جدول اطلاعاتی منتقل خواهد شد. (به دلیل سادگی از توضیح بیشتر بخش های متداول صرفنظر شده است.)
Script Task: ابزاری است که با استفاده از آن میتوان یک قطعه کد به زبان C#.Net یا VB.Net را طی اجرای یک Package اجرا نمود.
کاربردها:
· انجام عملیات خاصی خارج از فضای SSIS
· مقداردهی یک متغییر در محیط SSIS
Precedence Constraint: خطوط ارتباطی بین Task ها در محیط Control Flow میباشد و تعیین کننده توالی انجام عملیات است.
انواع Precedence Constraint:
· On Success
· On Failure
· On Completion
Expression در precedence constraint : اجرای Task بعدی در صورت تحقق گزاره مورد نظر است.
Forloop Container: با شروط عددی و معمولا برای ساخت حلقههایی با تعداد دور ثابت مورد استفاده قرار میگیرد.
تنظیمات:
· Init expression: مقداردهی اولیه متغییر شمارنده حلقه است. باید از قبل متغییری تعریف کرده و به آن اختصاص داد
· Eval expression: شرط ماندگاری در حلقه
· Assigned expression: تعریف گام حلقه
نکات عمومی:
· از کامپوننت rowcount می توان برای debug کردن و نمایش جدول نتیجه استفاده کرد. با استفاده از آن می توان تعداد سطرهای یک جریان داده را در یک متغییر عددی ذخیره نمود
· فعال کردن Data Viewer روی خط انتقال داده باعث نمایش جدولی از مقادیر در حال انتقال میشود (مناسب برای debug)
UNIFING Data Flow: یکی کردن جریانهای داده
v Union All
o برای تلفیق چند جریان داده استفاده میشود
o از نظر سرعت اجرا، سریع است
o جهت غلبه بر حجمهای سنگین داده از مکانیزم Batch By Batch برای بارگذاری دادهها استفاده میکند
o تعداد سطرهای خروجی این کامپوننت برای جمع هریک از ورودی ها است.
o تفاوت این کامپوننت با UNION All از نوع TSQL آن است که درصورتی که دو (یا چند) جدول با ستونهای اطلاعاتی مختلف با هم UNION All شوند و فیلدهای یکسان نداشته باشند، خروجی شامل تمامی فیلدهای همه جداول است.
v Merge
o میتوان دو جریان داده مرتب شده (sorted) را با یکدیگر تلفیق نمود و یک جریان داده مرتب شده یا sorted ایجاد کرد.
o از لحاظ سرعت اجرا به دلیل انجام عملیات sort نسبت به union all کندتر است
o جهت غلبه بر حجمهای سنگین داده از مکانیزم Batch By Batch برای بارگذاری دادهها استفاده میکند. علت نیاز به مرتب بودن هم همین است.
o تعداد سطرهای خروجی با تعداد سطرهای ورودی برابر است
o اگر بخواهیم که قبل از مرتب کرده باشیم کافی است در source در بخش Advance Editor و در Input and Output Properties مقدار IsSorted را به True تغییر دهیم.
v Merge Join
o میتوان دو جریان داده مرتب شده (sorted) را با یکدیگر تلفیق نمود و یک جریان داده مرتب شده یا sorted ایجاد کرد.
o جهت غلبه بر حجمهای سنگین داده از مکانیزم Batch By Batch برای بارگذاری دادهها استفاده میکند. علت نیاز به مرتب بودن هم همین است.
o تعداد سطرهای خروجی بسته به نوع Join متفاوت است.
v Lookup
o جهت تکمیل و غنیسازی یک جریان داده با استفاده از یک جریان خارجی داده استفاده میکنیم.
o این کامپوننت دادههای جدول مرجع را بهطور کامل در حافظه Data Flow Task بارگذاری میکند تا با سرعت بهتری بتواند مقادیر مورد نیاز را واکشی نماید. لذا این کامپوننت مناسب سناریوهایی است که جدول مرجع کوچک باشد
o نوع اتصال جریان داده و دادههای جدول مرجع به صورت equi-join است که حالت خاصی از left outer join باشد.
o در Equi-join درصورتیکه چندین سطر دیده شود، اولی را برای join انتخاب میکند
o انواع خروجی آن
§ Match output: سطرهایی که مقادیر متناظر آنها در جدول مرجع وجود دارد
§ No Match output: سطرهایی که مقادیر متناظر آنها در جدول مرجع وجود ندارد
· Fail Component: منجر به تولید خطا میشود
· Ignore Failure: از خطا چشم پوشی شده و مقادیر NULL جایگزین مقادیر مورد نظر میشود
· Redirect Rows (no match output) : ارسال سطرهای مشکل دار به خروجی no match
· Redirect Rows (error output) : ارسال سطرهای مشکل دار به خروجی error
Lookup |
Merge Join |
امکانات |
1 2 دارد |
2 1 ندارد |
تعداد ورودی تعداد خروجی خروجی خطا |
برروی جریان اصلی محدودیتی ندارد جدول مرجع حتما باید از نوع relational باشد (SQL - Oracle – DB2) |
محدودیتی ندارد |
تنوع Source |
Equi-join |
انواع join استاندارد را دارد |
انواع JOIN |
دارد |
ندارد |
Caching |
مناسب برای جریان های داده سنگین با جدول مرجع سبک |
مناسب برای جریان داده سنگین |
کاربرد |