خانه / آموزش Microsoft BI / درس بیست و پنجم- یکی کردن Data Flow ها

درس بیست و پنجم- یکی کردن Data Flow ها

یکی کردن Data Flow ها

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

اولین Component که قصد داریم مطرح کنیم در این زمینه ، Union All میباشد که همانند Union All ای که در SQL استفاده میکردیم هست.

فرض کنید دو جدول داریم که یکی نشان دهنده فروش در فرانسه با ۵۰ ردیف و جدول دیگر نشان دهنده فروش در کانادا با ۲۰۰ ردیف است. با ادغام این دو جدول ، به Table ای دست میابیم که به صورت یکپارچه فروش کانادا و فرانسه را برایمان نشان میدهد و شامل ۲۵۰ رکورد دیتا می باشد.

برای پیاده سازی این تسک در SSIS ، از آنجایی که قصد انتقال داده داریم ، نیاز به یک DFT یا Data Flow Task داریم.

حال از سه تا Flat File Source استفاده میکنیم و آنها را کانفیگ میکنیم. Union All را قرار میدهیم و Source های اطلاعاتی را به آن متصل میکنیم.

عکس 22:58

در داخل Union All میتوان مشخص کرد که ستون های متناظر هر Input کدام ها هستند تا به درستی آنها را Union کنیم. در نهایت میتوانیم نام ستون ها را برای Output مان تغییر دهیم.

در نهایت جریان داده ای را با قرار دادن یک Destination خاتمه میدهیم.

Union All از یک مکانیزمی به نام Batch Loading استفاده میکند. یعنی رکوردها را در قالب دسته های چندتایی قرار میدهد و به Destination یا component بعدی تحویل میدهد که باعث افزایش سرعت می شود.

هنگام استفاده از Union All باید توجه داشته باشید که باید ساختار جداول Input کاملا یکسان باشد ، ولی اگر دیتا تایپ یکی از ستون های با سایر ستون های متناظرش در سایر Input ها یکسان نباشد باید چه کار کرد؟

برای رفع این مشکل از کامپوننت Data Conversion میتوان استفاده کرد. داخل این Component ، میتوان دیتا تایپ و نام ستون را تغییر داد.

عکس 30:13

* اگر بخواهیم از ورود دیتا های تکراری در فرآیند Union All جلوگیری کنیم ، میتوانیم از همان مراحل قبلی را طی کنیم و دیتا ها را داخل یک Temp Table یا Staging Table قرار دهیم. سپس از دستور Select * Distinct استفاده کرده و رکورد های یکتای آن Temp Table را داخل جدول اصلی قرار میدهیم.

Merge Component :

در جلسات گذشته در مورد کامپوننت Merge Join که به وسیله آن انواع Join را پیاده سازی میکردیم. ایرای که این Component داشت این بود که باید ورودی های آن بر اساس یک ستون یکسان ، Sort شوند و سپس وارد این Component شوند که این فرآیند بهینه نیست. در استفاده از کامپوننت Merge نیز همین مشکل را خواهیم داشت و ما را حالت بهینه دور میکند.

 

در اینجا میخواهیم بررسی کنیم چگونه Merge  را استفاده کنیم ، بدون اینکه برای ورودی های آن از کامپوننت Sorting استفاده کنیم.

فرض کنید دو جدول S1 و S2 داریم که Sort شده اند. حال وقتی Merge  را انجام میدهیم نتیجه به شکل زیر است :

عکس 41:20

تقریبا میتوان گفت که شبیه Union All میباشد ولی با این تفاوت که هم ورودی و هم خروجی Sort  شده اند و به همین دلیل از Union All کند تر می باشد.

برای پیاده سازی یک مثال در SSIS از دو OLEDB Source استفاده میکنیم و آنها را به شکل زیر کانفیگ میکنیم :

عکس 43:50

عکس 44:21

حال این دو را به کامپوننت Merge  متصل میکنیم.

سپس روی Source راست کلیک کرده و وارد قسمت  Advanced Editor for OLE DB Source میشویم. به قسمت Input and Output Properties میرویم و در فولدر Output Columns ستون مد نظر را انتخاب کرده و SortKeyPosition آن را روی ۱ قرار میدهیم.

عکس 45:50

Source دیگر را هم به همین شکل تنظیم میکنیم و مشاهده میکنیم که ارور Input Source Must be Sorted از روی کامپوننت Merge برداشته میشود.

نهایتا Merge را به یک Destination متصل میکنیم و مشاهده میکنیم که خروجی ما بر اساس CustomerKey مرتب سازی شده اند.

در کل استفاده از Merge و Merge Join برای کار با دیتا های موجود در سورس هایی نظیر Excel و  Flat File مناسب است و اگر دیتایی که با آن کار داریم در Database میباشد ، بهتر است سورس را با Order by کانفیگ کنیم تا فرآیند Sorting را به SQL Server بسپاریم و فرآیند مرتب سازی را به گردن ETL نندازیم.

درباره‌ی علیرضا حسن نژاد

همچنین ببینید

طراحی ساختار SSAS Tabular Model

درس سی ام – طراحی SSAS Tabular Model

ساخت و طراحی Tabular Model اصطلاحی داریم به نام SSRS یا SQL Server Reporting Server …

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

معادله امنیتی (فقط عدد بنویسید) *