تسک Bulk Insert در SSIS
تسک Bulk Insert در SSIS تنها میتواند دادهها را از یک فایل متنی به داخل یک جدول یا نمای (View) منتقل کند، که مشابه دستور Bulk Insert در SQL Server است. اگر جدول یا نمای مقصد از قبل دارای داده باشد، هنگام اجرای تسک Bulk Insert در SSIS، دادههای جدید به دادههای موجود افزوده میشوند. اگر میخواهید دادهها جایگزین شوند، باید قبل از اجرای تسک Bulk Insert، یک تسک Execute SQL اجرا کنید که دستور DELETE یا TRUNCATE را اجرا کند.
برای مثال، ما با دادههای بازار بورس کار میکنیم و هر روز میلیاردها داده در قالب فایل .csv (مقادیر جداشده با کاما) دریافت میکنیم. وظیفه ما این است که دادههای داخل این فایل .csv را هر روز به یک جدول پایگاه داده SQL کپی کنیم. به طور معمول، دو رویکرد برای انجام تسک Bulk Insert در SSIS داریم:
کشیدن و رها کردن (Drag and Drop) تسک Data Flow و درون آن استفاده از Flat File Source و OLE DB Destination برای کپی دادهها. این روش زمانی مفید است که بخواهیم در SSIS تبدیلهایی (Transformations) انجام دهیم.
استفاده از تسک SSIS Bulk Insert. این روش در مقایسه با روش قبلی قدرتمندتر است، زیرا بهصورت درونی از عملیات Bulk Copy (BCP) استفاده میکند که در SQL Server بسیار سریع است.
گزینههای موجود در تسک Bulk Insert در SSIS
با کلیک بر روی تب Options در تسک Bulk Insert، گزینههای زیر در دسترس خواهند بود:
CodePage: تعیین صفحه کد (Code Page) دادهها در فایل داده. معمولاً برای زبانهای دیگر استفاده میشود.
DataFileType: مشخصکردن نوع دادهای (Data Type) که در عملیات بارگذاری استفاده میشود.
BatchSize: مشخصکردن تعداد ردیفها در هر دسته (Batch). مقدار پیشفرض کل فایل داده است. اگر BatchSize را برابر صفر قرار دهید، کل دادهها در یک Batch بارگذاری میشوند. برای مثال، اگر اندازه Batch را 100 قرار دهیم، هر Batch به عنوان یک تراکنش عمل میکند و اگر تسک پس از مدتی با خطا مواجه شود، Batchهایی که با موفقیت بارگذاری شدهاند بازگردانده (Rollback) نمیشوند.
LastRow: مشخصکردن آخرین ردیفی که باید کپی شود.
FirstRow: مشخصکردن اولین ردیفی که کپی از آن آغاز میشود.
SortedData: مشخصکردن عبارت ORDER BY در دستور Bulk Insert. مقدار پیشفرض False است.
MaxErrors: مشخصکردن حداکثر تعداد خطاهایی که قبل از لغو عملیات Bulk Insert مجاز هستند. مقدار 0 به این معنی است که تعداد نامحدودی از خطاها مجاز است.

گزینهها – تعریف اصطلاحات
Check constraints: بررسی محدودیتها (Constraints) روی ستونها برای اعتبارسنجی دادهها.
Keep nulls: انتخاب این گزینه باعث میشود مقادیر null در طول عملیات Bulk Insert حفظ شوند و بهجای آنها مقدار پیشفرض برای ستونهای خالی درج نشود.
Enable identity insert: انتخاب این گزینه اجازه میدهد مقادیر موجود به یک ستون Identity وارد شوند.
Table lock: انتخاب این گزینه باعث میشود جدول در طول عملیات Bulk Insert قفل شود.
Fire triggers: انتخاب این گزینه باعث فعالشدن هرگونه Trigger (مانند insert، update یا delete) روی جدول میشود.
مثال Bulk Insert Task در SSIS
در این مثال از تسک Bulk Insert، قصد داریم یک فایل متنی که در درایو محلی قرار دارد را به مقصد (پایگاه داده) کپی کنیم.
ما یک فایل متنی به نام GEOGRAPHY.txt داریم که شامل ۱٬۰۰۰٬۰۰۰ ردیف است. تسک ما این است که تمام این ردیفها را با استفاده از تسک Bulk Insert در SSIS وارد (Insert) کنیم.

تسک SSIS Bulk Insert را از Toolbox بکشید و در ناحیهی Control Flow رها (Drag and Drop) کنید.

روی تسک Bulk Insert دوبار کلیک کنید تا Connection Stringهای مبدأ و مقصد را پیکربندی کنید. در تب General، میتوانیم نام (Name) و توضیحات (Description) را تغییر دهیم.

اکنون روی تب Connection کلیک کنید تا اتصالات مبدأ و مقصد تنظیم شوند. ابتدا باید اتصال مبدأ را پیکربندی کنیم، بنابراین گزینه File را انتخاب کنید.
نکته: برای دسترسی به فایل متنی که در محل (Local) یا از راه دور (Remote) قرار دارد، باید اطلاعات دسترسی (Credentials) را وارد کنیم.

با کلیک روی گزینه New Connection میتوانیم فایل متنی مبدأ مورد نظر را انتخاب کنیم. روی دکمه Browse کلیک کنید تا فایل متنی را انتخاب نمایید. در اینجا، ما فایل متنی GEOGRAPHY با اندازه ۹۲٬۵۶۲ کیلوبایت را انتخاب میکنیم.

روی OK کلیک کنید تا پیکربندیهای منبع تسک Bulk Insert در SSIS تمام شود.
گزینه Row Delimiter را به {CR}{LF} (بازگشت کاراکتر و خط جدید) تنظیم کنید. همچنین گزینه Column Delimiter را روی Comma (‘,’) قرار دهید، زیرا در فایل متنی ما، ستونها با کاما از هم جدا شدهاند.

اکنون برای پیکربندی اتصال مقصد، روی New Connection کلیک کنید. اتصال به معنای انتخاب نام پایگاه داده است. در اینجا، ما Following Database را به عنوان پایگاه داده مقصد انتخاب میکنیم.
سپس، جدول مقصد تسک Bulk Insert در SSIS را با انتخاب آن از لیست پیکربندی کنید. در اینجا، ما جدول GEOGRAPHY را به عنوان جدول مقصد انتخاب میکنیم.
نکته: جدول مقصد باید از قبل در سرور طراحی شده باشد.

نکته: تسک Bulk Insert ردیفهای خطادار را ثبت نمیکند. اگر میخواهید رکوردهای اشتباه در یک فایل یا جدول خطا نوشته شوند، بهتر است از تسک Data Flow استفاده کنید.
حالا روی Options کلیک کنید.

ما قبلاً توضیح دادهایم که هر گزینه چه خصوصیتی دارد. در حال حاضر، تنظیمات پیشفرض را بهطور کامل نگه میداریم، اما برای First Row مقدار آن را به 2 تغییر دادهایم، زیرا در دادهها، نام ستونها در ردیف اول قرار دارند.
روی OK کلیک کنید تا پیکربندی تسک Bulk Insert در SSIS تمام شود و سپس پکیج را اجرا کنید.

بیایید Management Studio را باز کرده و دستور زیر را بنویسیم و نتیجه را بررسی کنیم:
SELECT [CountryRegionCode] AS [Country Code] ,[EnglishCountryRegionName] AS [Country] ,[StateProvinceCode] AS [State Code] ,[StateProvinceName] AS [State] ,[City] ,[PostalCode] ,[UnitPrice] ,[ExtendedAmount] AS [ExtAmount] ,[ProductStandardCost] AS [StandardCost] ,[TotalProductCost] AS [ProductCost] ,[SalesAmount] AS [Sales] ,[TaxAmt] FROM [DimGeography]

نکات مهم در تسک Bulk Insert در SSIS
تسک Bulk Insert در SSIS فقط میتواند دادهها را از یک فایل متنی به داخل یک جدول یا نمای (View) منتقل کند.
تسک Bulk Insert از Flat File Connection Manager برای انتخاب فایل متنی پشتیبانی میکند.
تسک Bulk Insert تنها از OLE DB Connection Manager برای پایگاه داده مقصد پشتیبانی میکند.
جدول مقصد باید قبل از استفاده در تسک Bulk Insert وجود داشته باشد.
فراموش نکنید که گزینه First Row را به 2 تغییر دهید، اگر نام ستونها در ردیف اول فایل متنی شما قرار دارند.
همیشه بهترین کار این است که Batch Size را برای وارد کردن حجم زیادی از دادهها تنظیم کنید.
دیدگاهتان را بنویسید