روش تولید لاک افست/فرمول ورنی افست
روش تولید لاک افست/فرمول ورنی افست موجود است.
با ما در تماس باشید...
لاک الکل سرس براق
لاک الکل نوعی رزین مصنوعی است. اکنون معمولاً به لاک شفاف روی سطح ، که از مواد پایه و مواد افزودنی ساخته شده ، بدون هیچ رنگدانه ای اشاره دارد. پس از تشکیل فیلم ، روغن درخشان خواهد شد ، که معمولاً به عنوان لاک OP شناخته می شود.
لاک OP از مشخصات زیر برخوردار است:
1. لایه از شفافیت بالایی برخوردار است.
2. مقاومت در برابر سایش
3. انعطاف پذیری بالایی دارد.
4- این فیلم از مقاومت محیطی بهتری برخوردار است.
5- سازگاری پردازش
6. سطح خوب و سطح فیلم صاف.
7. چسبندگی خاصی به سطح مواد چاپ
ویژگی SQL OFFSET FETCH: بارگیری حجم زیادی از داده با استفاده از منابع محدود با SSIS
در این مقاله، نحوه استفاده از ویژگی OFFSET FETCH را به عنوان راه حلی برای بارگیری حجم زیادی از داده ها از یک پایگاه داده رابطه ای با استفاده از ماشینی با حافظه محدود و جلوگیری از استثناء خارج شدن حافظه نشان می دهیم. ما نحوه بارگذاری داده ها را به صورت دسته ای برای جلوگیری از قرار دادن مقدار زیادی داده در حافظه توضیح می دهیم.
این مقاله اولین مقاله از سری نکات و ترفندهای SSIS است که هدف آن نشان دادن برخی از بهترین شیوه ها است.
معرفی
هنگام جستجوی آنلاین برای مشکلات مربوط به واردات داده های SSIS، راه حل هایی را پیدا خواهید کرد که می توانند در محیط های بهینه یا آموزش هایی برای مدیریت مقدار کمی از داده ها استفاده شوند. متأسفانه، این راه حل ها در یک محیط واقعی نامناسب هستند.
در واقع، شرکتهای کوچکتر همیشه نمیتوانند ذخیرهسازی، تجهیزات پردازشی و فناوریهای جدید را به کار گیرند، اگرچه هنوز باید حجم فزایندهای از دادهها را مدیریت کنند. این امر به ویژه برای تجزیه و تحلیل رسانه های اجتماعی صادق است زیرا آنها باید رفتار مخاطبان هدف خود (مشتریان) را تجزیه و تحلیل کنند.
به همین ترتیب، همه شرکتها نمیتوانند دادههای خود را به دلیل هزینه بالا و مسائل مربوط به حفظ حریم خصوصی و محرمانه بودن دادهها در فضای ابری آپلود کنند.
ویژگی OFFSET FETCH
OFFSET FETCH یک ویژگی است که به بند ORDER BY با نسخه SQL Server 2012 اضافه شده است. می توان از آن برای استخراج تعداد مشخصی از ردیف ها با شروع از یک شاخص خاص استفاده کرد. به عنوان مثال، ما یک پرس و جو داریم که 40 ردیف را برمی گرداند و باید 10 ردیف را از ردیف دهم استخراج کنیم :
1 2 3 4 5 |
SELECT *
FROM Table
ORDER BY ID
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY
|
در جستار بالا، OFFSET 10 برای رد کردن 10 ردیف و FETCH 10 ROWS ONLY برای استخراج تنها 10 ردیف استفاده می شود.
برای دریافت اطلاعات بیشتر درباره بند ORDER BY و ویژگی OFFSET FETCH، به مستندات رسمی مراجعه کنید: استفاده از OFFSET و FETCH برای محدود کردن ردیف های برگشتی .
استفاده از OFFSET FETCH برای بارگیری داده ها در تکه ها (صفحه بندی)
یکی از اهداف اصلی استفاده از ویژگی OFFSET FETCH بارگذاری داده ها به صورت تکه ای است. بیایید تصور کنیم برنامه ای داریم که یک پرس و جوی SQL را اجرا می کند و باید نتایج را در چندین صفحه نشان دهد که در آن هر صفحه فقط 10 نتیجه دارد (مشابه موتور جستجوی گوگل).
پرس و جوی زیر می تواند به عنوان پرس و جوی صفحه بندی استفاده شود که در آن @PageSize تعداد ردیف هایی است که باید در هر بخش نشان دهید و @PageNumber شماره تکرار (صفحه) است:
1 2 3 4 5 |
SELECT <some columns>
FROM <table name>
ORDER BY <some columns>
OFFSET @PageSize * @PageNumber ROWS
FETCH NEXT @PageSize ROWS ONLY;
|
این مقاله قصد ندارد همه موارد استفاده از ویژگی OFFSET FETCH را نشان دهد، و همچنین بهترین شیوه ها را مورد بحث قرار نمی دهد. مقالات زیادی در اینترنت وجود دارد که می توانید برای اطلاعات بیشتر به آنها مراجعه کنید:
پیاده سازی ویژگی OFFSET FETCH در SSIS برای بارگذاری حجم زیادی از داده ها در تکه ها
اغلب از ما خواسته شده است که یک بسته SSIS بسازیم که حجم عظیمی از داده ها را از SQL Server با منابع محدود ماشین بارگیری می کند. بارگیری دادهها با استفاده از منبع OLE DB با استفاده از حالت دسترسی به دادههای جدول یا مشاهده باعث ایجاد استثنا در حافظه میشود.
یکی از ساده ترین راه حل ها استفاده از ویژگی OFFSET FETCH برای بارگذاری داده ها به صورت تکه ای برای جلوگیری از خطاهای قطع حافظه است. در این بخش، راهنمای گام به گام پیاده سازی این منطق در بسته SSIS را ارائه می دهیم.
ابتدا باید یک بسته خدمات یکپارچه سازی جدید ایجاد کنیم، سپس چهار متغیر را به صورت زیر اعلام کنیم:
- RowCount (Int32): تعداد کل ردیف ها را در جدول منبع ذخیره می کند
- IncrementValue (Int32): تعداد ردیف هایی را که باید در عبارت OFFSET مشخص کنیم ذخیره می کند (شبیه به @PageSize * @PageNumber در مثال بالا)
- RowsInChunk (Int32): تعداد ردیف ها را در هر تکه داده مشخص می کند (شبیه به @PageSize در مثال بالا)
- SourceQuery (String): دستور منبع SQL مورد استفاده برای واکشی داده را ذخیره می کند
پس از اعلام متغیرها، یک مقدار پیش فرض برای متغیر RowsInChunk تعیین می کنیم. در این مثال، آن را روی 1000 قرار می دهیم. علاوه بر این، باید عبارت Source Query را به صورت زیر تنظیم کنیم:
1 2 3 4 5 |
"SELECT *
FROM [AdventureWorks2017].[Person].[Person]
ORDER BY [BusinessEntityID]
OFFSET " + (DT_WSTR,50)@[User::IncrementValue] + " ROWS
FETCH NEXT " + (DT_WSTR,50) @[User::RowsInChunk] + " ROWS ONLY"
|
شکل 1 - اضافه کردن متغیرها
در مرحله بعد، یک Execute SQL Task اضافه می کنیم تا تعداد کل ردیف های جدول منبع را بدست آوریم. در این مثال از جدول Person ذخیره شده در پایگاه داده AdventureWorks2017 استفاده می کنیم. در Execute SQL Task از دستور SQL زیر استفاده کردیم:
1 |
SELECT COUNT(*) FROM [AdventureWorks2017].[Person].[Person]
|
شکل 2 - تنظیم Execute SQL Task
و باید ویژگی Result Set را به Single Row تغییر دهیم. سپس در تب Result Set، متغیر RowCount را انتخاب می کنیم تا مجموعه نتایج را مانند تصویر زیر ذخیره کنیم:
شکل 3 - نتیجه نگاشت به متغیر تنظیم شده است
پس از پیکربندی Execute SQL Task، یک For Loop Container با مشخصات زیر اضافه می کنیم:
- InitExpression : @IncrementValue = 0
- EvalExpression : @IncrementValue <= @RowCount
- AssignExpression : @IncrementValue = @IncrementValue + @RowsInChunk
شکل 4 - پیکربندی برای محفظه حلقه
پس از پیکربندی For Loop Container ، یک Data Flow Task داخل آن اضافه می کنیم . سپس، در وظیفه جریان داده، یک منبع OLE DB و مقصد OLE DB اضافه می کنیم.
در منبع OLE DB ، SQL Command را از حالت دسترسی به داده های متغیر انتخاب می کنیم و متغیر @User::SourceQuery را به عنوان منبع انتخاب می کنیم.
پس از توضیح نحوه بارگیری دادهها در تکهها با استفاده از ویژگی OFFSET FETCH در SSIS، متذکر میشویم که این منطق دارای محدودیتهایی است:
- شما همیشه به استفاده از تعدادی ستون در عبارت ORDER BY نیاز دارید (هویت یا کلید اصلی ترجیح داده می شود)، زیرا OFFSET FETCH یکی از ویژگی های عبارت ORDER BY است و نمی توان آن را به طور جداگانه پیاده سازی کرد.
- اگر هنگام بارگیری داده ها خطایی رخ دهد، تمام داده های صادر شده به مقصد متعهد می شوند و فقط تکه فعلی داده ها به عقب بازگردانده می شود. این ممکن است به مراحل اضافی برای جلوگیری از تکرار داده ها هنگام اجرای مجدد بسته نیاز داشته باشد
OFFSET FETCH با استفاده از سایر ارائه دهندگان پایگاه داده
در بخش زیر به طور مختصر به نحوی که توسط سایر ارائه دهندگان پایگاه داده استفاده می شود، می پردازیم:
اوراکل
با اوراکل، میتوانید از همان سینتکس SQL Server استفاده کنید. برای اطلاعات بیشتر به لینک زیر مراجعه کنید: Oracle FETCH
SQLite
در SQLite، سینتکس با SQL Server متفاوت است، زیرا شما از ویژگی LIMIT OFFSET همانطور که در زیر ذکر شده است استفاده می کنید:
1 2 3 |
SELECT * FROM MYTABLE ORDER BY ID_COLUMN
LIMIT 50
OFFSET 10
|
MySQL
در MySQL، نحو مشابه SQLite است، زیرا شما به جای OFFSET Fetch از LIMIT OFFSET استفاده می کنید.
DB2
در DB2، نحو مشابه SQLite است، زیرا شما به جای OFFSET FETCH از LIMIT OFFSET استفاده می کنید.
نتیجه
در این مقاله، ویژگی OFFSET FETCH موجود در SQL Server 2012 و بالاتر را شرح داده ایم. نحوه استفاده از این ویژگی برای ایجاد یک پرس و جو صفحهبندی را نشان دادیم، سپس یک راهنمای گام به گام در مورد نحوه بارگیری دادهها به صورت تکهای برای امکان استخراج مقادیر زیادی داده با استفاده از ماشینی با منابع محدود ارائه کردیم. در نهایت، به برخی از محدودیت ها و تفاوت های نحوی با سایر ارائه دهندگان پایگاه داده اشاره کردیم.
به دادههای ردیف قبلی در همان مجموعه نتایج بدون استفاده از خود-پیوستگی که با SQL Server 2012 (11.x) شروع میشود، دسترسی پیدا میکند. LAG دسترسی به یک ردیف را در یک افست فیزیکی مشخص که قبل از ردیف فعلی قرار دارد، فراهم می کند. از این تابع تحلیلی در دستور SELECT برای مقایسه مقادیر در ردیف فعلی با مقادیر ردیف قبلی استفاده کنید.
نحو
syntaxsql
LAG (
scalar_expression [,offset] [,default])
OVER
( [
partition_by_clause]
order_by_clause)
توجه داشته باشید
برای مشاهده نحو Transact-SQL برای SQL Server 2014 و نسخه های قبلی، به مستندات نسخه های قبلی مراجعه کنید .
استدلال ها
scalar_expression
مقداری که باید بر اساس افست مشخص شده برگردانده شود. این یک عبارت از هر نوع است که یک مقدار واحد (اسکالر) را برمی گرداند. scalar_expression نمی تواند یک تابع تحلیلی باشد.
offset
تعداد سطرهایی که از سطر فعلی برگشته و مقداری از آنها بدست می آید. اگر مشخص نشده باشد، پیشفرض 1 است. offset میتواند یک ستون، زیرپرس و جو یا عبارت دیگری باشد که به یک عدد صحیح مثبت ارزیابی میشود یا میتواند به طور ضمنی به bigint تبدیل شود . افست نمی تواند یک مقدار منفی یا یک تابع تحلیلی باشد.
پیشفرض
مقداری که باید هنگام افست برگردانده شود ، خارج از محدوده پارتیشن است. اگر مقدار پیش فرض مشخص نشده باشد، NULL برگردانده می شود. پیش فرض می تواند یک ستون، زیرپرس و جو یا عبارت دیگر باشد، اما نمی تواند یک تابع تحلیلی باشد. پیش فرض باید با scalar_expression سازگار باشد .
OVER ( [ partition_by_clause ] order_by_clause )
partition_by_clause مجموعه نتایج تولید شده توسط عبارت FROM را به پارتیشن هایی تقسیم می کند که تابع به آنها اعمال می شود. اگر مشخص نشده باشد، این تابع تمام ردیف های مجموعه نتیجه پرس و جو را به عنوان یک گروه واحد در نظر می گیرد. order_by_clause ترتیب داده ها را قبل از اعمال تابع تعیین می کند. اگر partition_by_clause مشخص شده باشد، ترتیب داده ها را در پارتیشن تعیین می کند. order_by_clause الزامی است . برای اطلاعات بیشتر، بند OVER (Transact-SQL) را ببینید .
انواع بازگشت
نوع داده scalar_expression مشخص شده . اگر scalar_expression nullable باشد یا پیش فرض روی NULL تنظیم شده باشد، NULL برگردانده می شود.
نکات کلی
LAG غیر قطعی است. برای اطلاعات بیشتر، توابع قطعی و غیر قطعی را ببینید .
مثال ها
الف. مقادیر را بین سالها مقایسه کنید
مثال زیر از تابع LAG برای برگرداندن تفاوت سهمیه های فروش برای یک کارمند خاص در سال های گذشته استفاده می کند. توجه داشته باشید که چون مقدار تاخیری برای سطر اول وجود ندارد، پیشفرض صفر (0) برگردانده میشود.