خروجی های CSV از پایگاه داده با استفاده از SSIS (For Loop Container)
گاهی پیش میاد که خروجی های متفاوتی رو در قالب فایل های متنی یا csv از پایگاه های داده یا دیتابیس خروجی بگیرید. به طور مثال جدولی از مشتریان در دیتابیس وجود دارد و می خواهید به ازای هر شهر اطلاعات مشتریان رو در قالب فایل csv یا متن خروجی بگیرید. برای حل این مساله راحت ترین کار استفاده از ابزارهای SSIS مایکروسافته که با هم به بررسی نحوه اجراش می پردازیم. در این روش از ابزار For Loop Container استفاده می کنیم هر چند در پست های بعدی روش جایگزین با استفاده از For Each رو معرفی می کنم که هزینه کم تری داره و خودم هم ترجیحش می دهم.
نسخه Visual Studio مورد استفاده در این مثال : Visual Studio 2015
نسخه SSDT مورد استفاده در این مثال : SSDT 2017
نسخه MSSQL Server مورد استفاده در این مثال : Microsoft SQL Server 2017 (RTM)
SSDT رو از این لینک دانلود و با توجه به توضیحات نصب کنید.
جدولی که می خواهیم داده ها رو از اون خروجی بگیریم از دیتابیس AdventureworksDW هستش که برای دانلود می تونید با توجه به نسخه database از طریق لینک اعلامی و از سایت مایکروسافت فایل بکاپ رو دانلود و restore کنید. در مثال این پست من از AdventureworksDW2016CTP3 دارم استفاده می کنم. جداول در گیر رو در کوئری زیر میتونید مشاهده کنید :
کوئری شماره 1 :
1 2 3 4 5 6 7 8 9 10 |
SELECT b.ProductCategoryKey, b.EnglishProductCategoryName AS CategoryName, a.EnglishProductSubcategoryName AS SubcategoryName, c.EnglishProductName AS ProductName FROM DimProductSubcategory AS a INNER JOIN DimProductCategory AS b ON a.ProductCategoryKey=b.ProductCategoryKey INNER JOIN DimProduct AS c ON c.ProductSubcategoryKey=a.ProductSubcategoryKey |
روش کار به این صورت هستش که به تعداد Category محصول موجود (در این مجموعه 4 گروه) در بین داده ها حلقه ای ایجاد می کنیم و خروجی رو در پایان هر لوپ (loop) به صورت خروجی csv به همراه اطلاعات مورد نیازمون ذخیره می کنیم.
کوئری شماره 2 : کد یافتن تعداد id موجود (تعداد گروه محصول) برای انجام لوپ
1 2 3 4 |
SELECT MAX(ProductCategoryKey) AS id FROM DimProductCategory |
کوئری شماره 3 : خروجی مورد نظر برای ذخیره سازی در قالب فایل csv (علامت ؟ برای پاس دادن پارامتر که در این مثال در متغیری به اسم key ذخیره کردیم و همون مقدار id ها category هستند)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
SELECT * FROM ( SELECT b.ProductCategoryKey AS id, b.EnglishProductCategoryName AS CategoryName, a.EnglishProductSubcategoryName AS SubcategoryName, REPLACE(c.EnglishProductName,',','-') AS ProductName FROM DimProductSubcategory AS a INNER JOIN DimProductCategory AS b ON a.ProductCategoryKey=b.ProductCategoryKey INNER JOIN DimProduct AS c ON c.ProductSubcategoryKey=a.ProductSubcategoryKey ) AS p WHERE p.id=? |
مطالب جدید
دستهها
- Books (۱۲)
- Excel (۲)
- اکسل به زبان مثال …! (۹)
- ترفند های پایتونی (۶)
- هوش تجاری (۴۸)
- Power BI (۳۶)
- DAX (۱۳)
- Power Query (۹)
- SQL (۸)
- SSIS (۲)
- Power BI (۳۶)
- یادگیری ماشین (۸)
- ML Algorithm (۲)
- kNN (۲)
- pandas (۵)
- ML Algorithm (۲)
بایگانی
آمار بازدید
- ۰
- ۵۲
- ۲۱
- ۴۳,۶۲۱
- ۲۷ اردیبهشت, ۱۴۰۳