Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SSIS में मर्ज जॉइन और लुकअप ट्रांसफॉर्मेशन में क्या अंतर हैं?

स्क्रीनशॉट #1 Merge Join transformation के बीच अंतर करने के लिए कुछ बिंदु दिखाता है और Lookup transformation .

लुकअप के संबंध में:

यदि आप स्रोत 1 इनपुट के आधार पर स्रोत 2 में मेल खाने वाली पंक्तियों को खोजना चाहते हैं और यदि आप जानते हैं कि प्रत्येक इनपुट पंक्ति के लिए केवल एक मैच होगा, तो मैं लुकअप ऑपरेशन का उपयोग करने का सुझाव दूंगा। एक उदाहरण आप होंगे OrderDetails तालिका और आप मिलान करने वाले Order Id . को खोजना चाहते हैं और Customer Number , तो लुकअप एक बेहतर विकल्प है।

मर्ज जॉइन के संबंध में:

यदि आप Address से सभी पते (घर, कार्य, अन्य) लाने जैसे जॉइन करना चाहते हैं Customer . में किसी दिए गए ग्राहक के लिए तालिका तालिका, तो आपको मर्ज जॉइन के साथ जाना होगा क्योंकि ग्राहक के पास उनके साथ जुड़े 1 या अधिक पते हो सकते हैं।

तुलना के लिए एक उदाहरण:

Merge Join . के बीच प्रदर्शन अंतर प्रदर्शित करने के लिए यहां एक परिदृश्य दिया गया है और Lookup . यहां इस्तेमाल किया गया डेटा एक से एक में शामिल होता है, जो उनके बीच तुलना करने के लिए एकमात्र परिदृश्य है।

  1. मेरे पास dbo.ItemPriceInfo . नाम की तीन टेबल हैं , dbo.ItemDiscountInfo और dbo.ItemAmount . इन तालिकाओं के लिए स्क्रिप्ट बनाएँ SQL स्क्रिप्ट अनुभाग के अंतर्गत प्रदान की जाती हैं।

  2. टेबल्सdbo.ItemPriceInfo और dbo.ItemDiscountInfo दोनों में 13,349,729 पंक्तियाँ हैं। दोनों तालिकाओं में सामान्य कॉलम के रूप में ItemNumber है। ItemPriceInfo में मूल्य की जानकारी है और ItemDiscountInfo के पास छूट की जानकारी है। स्क्रीनशॉट #2 इनमें से प्रत्येक तालिका में पंक्ति गणना दिखाता है। स्क्रीनशॉट #3 तालिका में मौजूद डेटा के बारे में एक विचार देने के लिए शीर्ष 6 पंक्तियों को दिखाता है।

  3. मर्ज जॉइन और लुकअप ट्रांसफॉर्मेशन के प्रदर्शन की तुलना करने के लिए मैंने दो एसएसआईएस पैकेज बनाए। दोनों पैकेजों को टेबल से जानकारी लेनी होती है dbo.ItemPriceInfo और dbo.ItemDiscountInfo , कुल राशि की गणना करें और इसे तालिका में सहेजें dbo.ItemAmount

  4. इस्तेमाल किया गया पहला पैकेज Merge Join परिवर्तन और उसके अंदर डेटा को संयोजित करने के लिए INNER JOIN का उपयोग किया। स्क्रीनशॉट #4 और #5 नमूना पैकेज निष्पादन और निष्पादन अवधि दिखाएं। इसमें 05 लगा मिनट 14 सेकंड 719 मर्ज जॉइन ट्रांसफॉर्मेशन आधारित पैकेज को निष्पादित करने के लिए मिलीसेकंड।

  5. दूसरा पैकेज इस्तेमाल किया गया Lookup पूर्ण कैश के साथ परिवर्तन (जो डिफ़ॉल्ट सेटिंग है)। स्क्रीनशॉट #6 और #7 नमूना पैकेज निष्पादन और निष्पादन अवधि दिखाएं। इसमें 11 लगा मिनट 03 सेकंड 610 लुकअप रूपांतरण आधारित पैकेज को निष्पादित करने के लिए मिलीसेकंड। आपको चेतावनी संदेश मिल सकता है जानकारी:The buffer manager has allocated nnnnn bytes, even though the memory pressure has been detected and repeated attempts to swap buffers have failed. यहां एक लिंक है जो लुकअप कैश आकार की गणना करने के तरीके के बारे में बात करता है। इस पैकेज के निष्पादन के दौरान, भले ही डेटा प्रवाह कार्य तेजी से पूरा हुआ, पाइपलाइन की सफाई में बहुत समय लगा।

  6. यह नहीं मतलब लुकअप ट्रांसफॉर्मेशन खराब है। बात बस इतनी है कि इसका इस्तेमाल समझदारी से करना होगा। मैं अपनी परियोजनाओं में अक्सर इसका उपयोग करता हूं लेकिन फिर से मैं हर रोज लुकअप के लिए 10+ मिलियन पंक्तियों से निपटता नहीं हूं। आमतौर पर, मेरी नौकरियां 2 से 3 लाख पंक्तियों के बीच संभालती हैं और इसके लिए प्रदर्शन वास्तव में अच्छा है। 10 मिलियन पंक्तियों तक, दोनों ने समान रूप से अच्छा प्रदर्शन किया। अधिकांश समय जो मैंने देखा है वह यह है कि परिवर्तन के बजाय बाधा गंतव्य घटक बन जाती है। आप इसे कई गंतव्यों के द्वारा दूर कर सकते हैं। यहां एक उदाहरण है जो कई गंतव्यों के कार्यान्वयन को दर्शाता है।

  7. स्क्रीनशॉट #8 तीनों तालिकाओं में रिकॉर्ड गिनती दिखाता है। स्क्रीनशॉट #9 प्रत्येक तालिका में शीर्ष 6 रिकॉर्ड दिखाता है।

आशा है कि यह मदद करता है।

एसक्यूएल स्क्रिप्ट:

CREATE TABLE [dbo].[ItemAmount](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ItemNumber] [nvarchar](30) NOT NULL,
    [Price] [numeric](18, 2) NOT NULL,
    [Discount] [numeric](18, 2) NOT NULL,
    [CalculatedAmount] [numeric](18, 2) NOT NULL,
CONSTRAINT [PK_ItemAmount] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO

CREATE TABLE [dbo].[ItemDiscountInfo](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ItemNumber] [nvarchar](30) NOT NULL,
    [Discount] [numeric](18, 2) NOT NULL,
CONSTRAINT [PK_ItemDiscountInfo] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO

CREATE TABLE [dbo].[ItemPriceInfo](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [ItemNumber] [nvarchar](30) NOT NULL,
    [Price] [numeric](18, 2) NOT NULL,
CONSTRAINT [PK_ItemPriceInfo] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO

स्क्रीनशॉट #1:

स्क्रीनशॉट #2:

स्क्रीनशॉट #3:

स्क्रीनशॉट #4:

स्क्रीनशॉट #5:

स्क्रीनशॉट #6:

स्क्रीनशॉट #7:

स्क्रीनशॉट #8:

स्क्रीनशॉट #9:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर इंस्टेंस पर सभी डेटाबेस से प्राथमिक कुंजी बाधा की सूची कैसे प्राप्त करें - SQL सर्वर / TSQL ट्यूटोरियल भाग 60

  2. मैं SQL सर्वर 2008 एक्सप्रेस में उसी सर्वर पर SQL सर्वर डेटाबेस को कैसे क्लोन कर सकता हूं?

  3. SQL सर्वर में उच्च गंभीरता त्रुटियों से निपटना

  4. केवल sql सर्वर पर छवि संग्रहीत करने के लिए जावास्क्रिप्ट का उपयोग करके छवि को बाइट सरणी में कैसे बदलें?

  5. SQL सर्वर 2008 में WHERE क्लॉज के भीतर केस स्टेटमेंट