स्क्रीनशॉट #1 Merge Join transformation
के बीच अंतर करने के लिए कुछ बिंदु दिखाता है और Lookup transformation
.
लुकअप के संबंध में:
यदि आप स्रोत 1 इनपुट के आधार पर स्रोत 2 में मेल खाने वाली पंक्तियों को खोजना चाहते हैं और यदि आप जानते हैं कि प्रत्येक इनपुट पंक्ति के लिए केवल एक मैच होगा, तो मैं लुकअप ऑपरेशन का उपयोग करने का सुझाव दूंगा। एक उदाहरण आप होंगे OrderDetails
तालिका और आप मिलान करने वाले Order Id
. को खोजना चाहते हैं और Customer Number
, तो लुकअप एक बेहतर विकल्प है।
मर्ज जॉइन के संबंध में:
यदि आप Address
से सभी पते (घर, कार्य, अन्य) लाने जैसे जॉइन करना चाहते हैं Customer
. में किसी दिए गए ग्राहक के लिए तालिका तालिका, तो आपको मर्ज जॉइन के साथ जाना होगा क्योंकि ग्राहक के पास उनके साथ जुड़े 1 या अधिक पते हो सकते हैं।
तुलना के लिए एक उदाहरण:
Merge Join
. के बीच प्रदर्शन अंतर प्रदर्शित करने के लिए यहां एक परिदृश्य दिया गया है और Lookup
. यहां इस्तेमाल किया गया डेटा एक से एक में शामिल होता है, जो उनके बीच तुलना करने के लिए एकमात्र परिदृश्य है।
-
मेरे पास
dbo.ItemPriceInfo
. नाम की तीन टेबल हैं ,dbo.ItemDiscountInfo
औरdbo.ItemAmount
. इन तालिकाओं के लिए स्क्रिप्ट बनाएँ SQL स्क्रिप्ट अनुभाग के अंतर्गत प्रदान की जाती हैं। -
टेबल्स
dbo.ItemPriceInfo
औरdbo.ItemDiscountInfo
दोनों में 13,349,729 पंक्तियाँ हैं। दोनों तालिकाओं में सामान्य कॉलम के रूप में ItemNumber है। ItemPriceInfo में मूल्य की जानकारी है और ItemDiscountInfo के पास छूट की जानकारी है। स्क्रीनशॉट #2 इनमें से प्रत्येक तालिका में पंक्ति गणना दिखाता है। स्क्रीनशॉट #3 तालिका में मौजूद डेटा के बारे में एक विचार देने के लिए शीर्ष 6 पंक्तियों को दिखाता है। -
मर्ज जॉइन और लुकअप ट्रांसफॉर्मेशन के प्रदर्शन की तुलना करने के लिए मैंने दो एसएसआईएस पैकेज बनाए। दोनों पैकेजों को टेबल से जानकारी लेनी होती है
dbo.ItemPriceInfo
औरdbo.ItemDiscountInfo
, कुल राशि की गणना करें और इसे तालिका में सहेजेंdbo.ItemAmount
। -
इस्तेमाल किया गया पहला पैकेज
Merge Join
परिवर्तन और उसके अंदर डेटा को संयोजित करने के लिए INNER JOIN का उपयोग किया। स्क्रीनशॉट #4 और #5 नमूना पैकेज निष्पादन और निष्पादन अवधि दिखाएं। इसमें05
लगा मिनट14
सेकंड719
मर्ज जॉइन ट्रांसफॉर्मेशन आधारित पैकेज को निष्पादित करने के लिए मिलीसेकंड। -
दूसरा पैकेज इस्तेमाल किया गया
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.
यहां एक लिंक है जो लुकअप कैश आकार की गणना करने के तरीके के बारे में बात करता है। इस पैकेज के निष्पादन के दौरान, भले ही डेटा प्रवाह कार्य तेजी से पूरा हुआ, पाइपलाइन की सफाई में बहुत समय लगा। -
यह नहीं मतलब लुकअप ट्रांसफॉर्मेशन खराब है। बात बस इतनी है कि इसका इस्तेमाल समझदारी से करना होगा। मैं अपनी परियोजनाओं में अक्सर इसका उपयोग करता हूं लेकिन फिर से मैं हर रोज लुकअप के लिए 10+ मिलियन पंक्तियों से निपटता नहीं हूं। आमतौर पर, मेरी नौकरियां 2 से 3 लाख पंक्तियों के बीच संभालती हैं और इसके लिए प्रदर्शन वास्तव में अच्छा है। 10 मिलियन पंक्तियों तक, दोनों ने समान रूप से अच्छा प्रदर्शन किया। अधिकांश समय जो मैंने देखा है वह यह है कि परिवर्तन के बजाय बाधा गंतव्य घटक बन जाती है। आप इसे कई गंतव्यों के द्वारा दूर कर सकते हैं। यहां एक उदाहरण है जो कई गंतव्यों के कार्यान्वयन को दर्शाता है।
-
स्क्रीनशॉट #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: