বিশ্লেষণমূলক প্রশ্নের জন্য MDX বনাম এসকিউএল এর ভাল উদাহরণ example


11

বিশ্লেষণমূলক প্রশ্নগুলি করার সময় কেউ কি আমাকে নিয়মিত এসকিউএল এর চেয়ে এমডিএক্সের সুবিধাগুলির একটি ভাল উদাহরণ দেখাতে পারেন? আমি একটি এমডিএক্স প্রশ্নের সাথে একটি এসকিউএল কোয়েরি তুলনা করতে চাই যা অনুরূপ ফলাফল দেয়।

উইকিপিডিয়া বলেছেন :

এগুলির কয়েকটিকে traditionalতিহ্যবাহী এসকিউএল-তে অনুবাদ করা সম্ভব হলেও এটি খুব সহজ এমডিএক্স এক্সপ্রেশনগুলির জন্য প্রায়শই আনাড়ি এসকিউএল এক্সপ্রেশনগুলির সংশ্লেষণের প্রয়োজন হয়।

তবে উদ্ধৃতি বা উদাহরণ নেই। আমি সম্পূর্ণরূপে অবগত যে অন্তর্নিহিত ডেটা অবশ্যই আলাদাভাবে সংগঠিত করা উচিত এবং ওএলএপ প্রতি সন্নিবেশে আরও বেশি প্রসেসিং এবং স্টোরেজ প্রয়োজন। (আমার প্রস্তাবনাটি একটি ওরাকল আরডিবিএমএস থেকে অ্যাপাচি কাইলিন + হাদুপে স্থানান্তরিত করা )

প্রসঙ্গ: আমি আমার সংস্থাকে বোঝানোর চেষ্টা করছি যে আমাদের কোনও ওল্যাপ ডাটাবেসের পরিবর্তে একটি ওএলএপি ডাটাবেস অনুসন্ধান করা উচিত। বেশিরভাগ এসআইইএম ক্যোয়ারী গ্রুপ-বাই, বাছাই করা এবং একীকরণের ভারী ব্যবহার করে। পারফরম্যান্স বৃদ্ধির পাশাপাশি, আমি মনে করি যে ওএলএপি (এমডিএক্স) কোয়েরিগুলি সমান ওয়ালটিপি এসকিউএল এর চেয়ে বেশি সংক্ষিপ্ত এবং পড়তে / লিখতে সহজ হবে। একটি দৃ concrete় উদাহরণ পয়েন্ট হোম চালিত করবে, কিন্তু আমি এসকিউএল এর বিশেষজ্ঞ নই, এমডিএক্সের চেয়ে কম ...


এটি যদি সহায়তা করে তবে গত সপ্তাহে ঘটে যাওয়া ফায়ারওয়াল ইভেন্টগুলির জন্য এখানে একটি নমুনা এসআইইএম-সম্পর্কিত এসকিউএল কোয়েরি রয়েছে:

SELECT   'Seoul Average' AS term, 
         Substr(To_char(idate, 'HH24:MI'), 0, 4) 
                  || '0'        AS event_time , 
         Round(Avg(tot_accept)) AS cnt 
FROM     ( 
                SELECT                     * 
                FROM   st_event_100_#yyyymm-1m# 
                WHERE  idate BETWEEN trunc(sysdate, 'iw')-7 AND trunc(sysdate, 'iw')-3 #stat_monitor_group_query#
                UNION ALL 
                SELECT * 
                FROM   st_event_100_#yyyymm# 
                WHERE  idate BETWEEN trunc(sysdate, 'iw')-7 AND trunc(sysdate, 'iw')-3 #stat_monitor_group_query# ) pm
GROUP BY substr(to_char(idate, 'HH24:MI'), 0, 4) 
                  || '0' 
UNION ALL 
SELECT   'today' AS term , 
         substr(to_char(idate, 'HH24:MI'), 0, 4) 
                  || '0'        AS event_time , 
         round(avg(tot_accept)) AS cnt 
FROM     st_event_100_#yyyymm# cm 
WHERE    idate >= trunc(sysdate) #stat_monitor_group_query# 
GROUP BY substr(to_char(idate, 'HH24:MI'), 0, 4) 
                  || '0' 
ORDER BY term DESC, 
         event_time ASC

উত্তর:


10

MDXএবং SQLকোনওভাবেই একই রকম হয় না এবং প্রায়শই তুলনীয়ও হয় না কারণ তারা অনুসন্ধান করছেন multidimensionalএবং relational databasesযথাক্রমে। আপনি এমডিএক্সের সাথে আপনার বিদ্যমান সম্পর্কিত সম্পর্কিত ডাটাবেসটি জিজ্ঞাসা করতে পারবেন না।

একটি বহুমাত্রিক মডেল ব্যবহার এবং এটি জিজ্ঞাসা করার জন্য MDX ব্যবহারের প্রধান সুবিধাটি হ'ল আপনি প্রাক-সমষ্টিগত ডেটা অনুসন্ধান করছেন এবং MDX একটি সম্পর্কিত সম্পর্কিত পরিবর্তে একটি পরিসংখ্যানগত উপায়ে জিজ্ঞাসা করতে অনুকূলিত হয়েছেন। ফ্ল্যাট ফলাফল সেট তৈরি করার জন্য আপনি আর সারি এবং সারণীগুলির অনুসন্ধান করবেন না তবে আপনি একটি বহুমাত্রিক ঘনকটি টুকরো টুকরো করতে এবং একত্রিত করতে টিপলস এবং সেট ব্যবহার করছেন।

এটি এর মতো চিন্তা করুন: আপনি যদি কোনও নির্দিষ্ট আইটেম গোষ্ঠীর মোট বিক্রয় পরিমাণ পেতে একটি এসকিউএল কোয়েরি ব্যবহার করেন তবে আপনাকে এমন একটি কোয়েরি লিখতে হবে যা আইটেম গোষ্ঠীর সমস্ত আইটেমের জন্য সমস্ত চালানের লাইনের সমষ্টি করে। আপনি যদি কোন ঘনক্ষেত্র ব্যবহার করে থাকেন এবং আইটেম গ্রুপের স্তরে সমষ্টি হয় তবে ফলাফলটি প্রক্রিয়াজাতকরণের সময় গণনা করা হয় এবং প্রতিটি আইটেম গোষ্ঠীর জন্য সংগ্রহগুলি তাত্ক্ষণিকভাবে তৈরি করে রাখা হয়।

বহুমাত্রিক এবং MDX রিলেশনাল সেট-ভিত্তিক এসকিউএল থেকে সম্পূর্ণ ভিন্ন ধারণা।

আপনার উদাহরণটি অনেক সহজ হয়ে উঠতে পারে কারণ আপনি আপনার ডেটা লোড প্রক্রিয়া চলাকালীন তারিখ বিশ্লেষণের মতো রূপান্তরগুলি করছেন এবং আপনার শেষ মাসের তুলনা একটি হতে পারে calculated measure। আপনার সিউল গড় এবং আজ হতে পারেcalculated members

যদি আপনার কিউবগুলি আপনার প্রয়োজনীয়তার জন্য ভালভাবে ডিজাইন করা হয় তবে আমি বিশ্বাস করি যে আপনি কোয়েরি লেখার প্রয়োজন ছাড়াই আপনার উদাহরণের ডেটা সেটটি কাটা এবং ডাইসিং করতে পারেন তবে এটি একটি পাইভোটেবল বা অন্য কোনও বিশ্লেষণ সরঞ্জামে করতে পারেন।

তারপরে আবার কোনও "এমডিএক্সে কেবল এসকিউএল পুনর্লিখন" নেই। এটি সঠিকভাবে করার জন্য একটি মোটামুটি জ্ঞান প্রয়োজন এবং ভিন্ন মানসিকতা প্রয়োজন। ফলাফল সেটগুলির পরিবর্তে ভেন-ডায়াগ্রামগুলি ভাবেন।

অ্যাডভেঞ্চারওয়ার্কস ডাটাবেস ব্যবহার করে আপনাকে একটি উদাহরণ সরবরাহ করতে, বিভাগের বাইকগুলিতে গ্রাহক দ্বারা বিক্রয় অর্ডারের সংখ্যা তালিকাভুক্ত করার প্রয়োজনীয়তাটি কল্পনা করুন।

যদি আপনি এটি করেন যে এসকিউএল ব্যবহার করে আপনাকে এমন একটি ক্যোয়ারী লিখতে হবে যা এমন কোনও পণ্যের সাথে লাইন যুক্ত বিক্রয় অর্ডারকে গণনা করবে যা বিভাগের বাইকের হতে পারে এবং গ্রাহকদের টেবিলের সাথে যুক্ত হবে, যাতে এটি মোটামুটি জটিল প্রশ্ন হয়ে উঠবে ।

-- need distinct count, we're counting orders, not order lines
SELECT count(DISTINCT soh.salesorderid)
    ,pers.FirstName + ' ' + pers.LastName
FROM sales.SalesOrderDetail sod
-- we need product details to get to the category
INNER JOIN Production.Product p ON sod.ProductID = p.ProductID
-- but we need to pass via subcategories
INNER JOIN Production.ProductSubcategory psc ON p.ProductSubcategoryID = psc.ProductSubcategoryID
-- we finally get to the category
INNER JOIN Production.ProductCategory pc ON psc.ProductCategoryID = pc.ProductCategoryID
-- we also need the headers because that's where the customer is stored
INNER JOIN sales.SalesOrderHeader soh ON sod.SalesOrderID = soh.SalesOrderID
-- finally the customer, but we don't have his name here
INNER JOIN sales.Customer c ON soh.CustomerID = c.CustomerID
-- customers
INNER JOIN Person.Person pers ON c.PersonID = pers.BusinessEntityID
-- filter on bikes
WHERE pc.Name = 'bikes'
-- but the customers table doesn't contain the concatenated name
GROUP BY pers.FirstName + ' ' + pers.LastName;

এমডিএক্সে (আপনার ঘনকটি এই প্রয়োজনীয়তার জন্য ভালভাবে ডিজাইন করা হয়েছে) আপনি কেবল লিখতে পারেন কারণ যুক্তি এবং জটিলতা অন্য কোথাও চলে গেছে:

SELECT [Measures].[Internet Order Count] ON COLUMNS,
[Customer].[Customer].Members ON ROWS
FROM [Adventure Works]
WHERE [Product].[Product Categories].[Category].[Bikes]

3
যদিও একটি মাউস এবং একটি বাইসাইকেল তুলনা করা যেতে পারে, যদিও। মাউস ছোট এবং জীবিত। বাইসিকেলের আরও ধাতু রয়েছে এবং এর দাম আরও বেশি। উভয়ই গতির সাথে তুলনীয়।
জোন

6

ওলাপ কিউব / ডাটাবেসের নিম্নলিখিত বৈশিষ্ট্যগুলি রয়েছে:

  • ব্যবহারকারীর প্রয়োজন অনুসারে ইতিমধ্যে সংহত তথ্য প্রাপ্ত করুন।
  • সহজ এবং দ্রুত অ্যাক্সেস
  • বিভিন্ন মাত্রায় সামগ্রিক ডেটা ম্যানিপুলেট করার ক্ষমতা
  • একটি কিউব ক্লাসিকাল একীকরণ ফাংশনগুলি ন্যূনতম, সর্বোচ্চ, গণনা, যোগফল, গড় ব্যবহার করে তবে নির্দিষ্ট সংশ্লেষ ফাংশনও ব্যবহার করতে পারে।

এমডিএক্স বনাম এসকিউএল:

পিডিট টেবিলের উপস্থাপনা (সহজভাবে) প্রাপ্ত করার জন্য বহুমাত্রিক ডাটাবেসগুলিকে নেভিগেট করতে এবং তাদের সমস্ত বস্তুর (মাত্রা, স্তরক্রম, স্তর, সদস্য এবং কোষ) অনুসন্ধানগুলি সংজ্ঞায়িত করতে এমডিএক্স তৈরি করা হয়েছে।

MDX এসকিউএল কীওয়ার্ড হিসাবে অনেক অভিন্ন ব্যবহার করে, মত SELECT, FROM, WHERE। পার্থক্যটি হ'ল এসকিউএল সম্পর্কের দৃষ্টিভঙ্গি তৈরি করে যখন এমডিএক্স ডেটার বহুমাত্রিক দর্শন দেয়

পার্থক্যটি দুটি ভাষার সাধারণ কাঠামোতেও দেখা যায়:

এসকিউএল কোয়েরি: SELECT column1, column2, ..., column FROM table
এমডিএক্স কোয়েরি:SELECT axis1 ON COLUMNS, axis2 ON ROWS FROM cube

FROMডেটা উত্সটি নির্দিষ্ট করে:
এসকিউএল:
এমডিএক্সে এক বা একাধিক সারণী : একটি কিউব

SELECT কোয়েরি দ্বারা পুনরুদ্ধার করতে পছন্দসই ফলাফলগুলি নির্দেশ করে:

এসকিউএল এ:

  • দুটি মাত্রায় একটি দৃশ্য ডেটা (সারি এবং কলাম)
  • সারিগুলির কলামগুলির দ্বারা নির্ধারিত একই কাঠামো রয়েছে

এমডিএক্সে:

  • ক্যোয়ারী ফলাফল গঠনের জন্য যে কোনও মাত্রার মাত্রা।
  • অক্ষ শব্দটি ঘনক্ষেত্রের মাত্রা নিয়ে বিভ্রান্তি এড়াতে ব্যবহৃত হয়।
  • সারি এবং কলামগুলির কোনও বিশেষ অর্থ নেই, তবে আপনাকে প্রতিটি অক্ষটি সংজ্ঞায়িত করতে হবে: axe1 অনুভূমিক অক্ষটি এবং অক্ষ 2 2 উল্লম্ব অক্ষটি সংজ্ঞায়িত করে।

MDX ক্যোয়ারির উদাহরণ: এখানে চিত্র বর্ণনা লিখুন

ব্যবস্থা : একক মূল্য, পরিমাণ, ছাড়, SalesAmount, মাল
মাত্রা : টাইম
অনুক্রমের : বছর> কোয়ার্টার> মাসের> সদস্যদের সঙ্গে:

  • বছর: 2010, 2011, 2012, 2013, 2014

  • কোয়ার্টার: কিউ 1, কিউ 2, কিউ 3, কিউ 4

  • মাস: জানুয়ারী, ফেব্রুয়ারি, মার্চ,…

মাত্রা : গ্রাহক
শ্রেণিবিন্যাস : মহাদেশ> দেশ> রাষ্ট্র> সদস্যদের সাথে শহর:

  • শহর: প্যারিস, লিয়ন, বার্লিন, ক্যালন, মার্সেই, নান্টেস…

  • রাজ্য: লোয়ার আটলান্টিক, বোচেস ডু রেনি, বাস রিন, টোরিনো…

  • দেশ: অস্ট্রিয়া, বেলজিয়াম, ডেনমার্ক, ফ্রান্স, ...

  • মহাদেশীয় স্তর: ইউরোপ, উত্তর আমেরিকা, সুদ আমেরিকা, এশিয়া

মাত্রা : পণ্য
শ্রেণিবিন্যাস : বিভাগ> উপশ্রেণী> সদস্যদের সাথে পণ্য:

  • বিভাগ: খাদ্য, পানীয়…
  • খাদ্য বিভাগ: বেকড_ফুড…
  • ...

1

আপডেট : এই উদাহরণটি আরও ভাল:

ক্যোয়ারী লক্ষ্য: ২০১০ এর প্রথম প্রান্তে ক্যালিফোর্নিয়ায় বিক্রি হওয়া সমস্ত পণ্য পরিবারের (সারিগুলিতে) বিক্রয় পরিমাণ এবং ইউনিটগুলির সংখ্যা (কলামে) পান

MDX

SELECT  {[Measures].[Unit Sales], [Measures].[Store Sales]} ON COLUMNS,
      {[Products].children} ON ROWS
FROM  [Sales]
WHERE ([Time].[2010].[Q1], [Customers].[USA].[CA])

এসকিউএল

SELECT SUM(unit_sales) unit_sales_sum, SUM(store_sales) store_sales_sum
FROM sales
  LEFT JOIN products ON sales.product_id = products.id
  LEFT JOIN product_classes ON products.product_class_id = product_classes.id
  LEFT JOIN time ON sales.time_id = time.id
  LEFT JOIN customers ON sales.customer_id = customers.id
WHERE time.the_year = 2010 AND time.quarter = 'Q1'
  AND customers.country = 'USA' AND customers.state_province = 'CA'
GROUP BY product_classes.product_family
ORDER BY product_classes.product_family

উত্স: মোড্রিয়ানের জন্য ব্যবহারের নোটগুলি (যা সম্পর্কিত ডেটাবেজে ব্যবহারের জন্য এমডিএক্স অনুসন্ধানগুলি অনুবাদ করে)


আমি একটি শালীন উদাহরণ পেয়েছি, যদিও এসকিউএল তেমন জটিল নয় (এমডিএক্সের পরিবর্তে সাসবাসের তুলনায়):

এখানে চিত্র বর্ণনা লিখুন

উত্স: বিগ ডেটার জন্য রিয়েল-টাইম "OLAP" (+ ব্যবহারের ক্ষেত্রে) - bigdata.ro 2013

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.