Apache Tajo একটি ডিস্ট্রিবিউটেড ডেটা ওয়্যারহাউজ সিস্টেম, যা SQL ভিত্তিক কুয়েরি চালাতে সক্ষম। Tajo SQL এর কিছু গুরুত্বপূর্ণ ফিচার সাপোর্ট করে, তার মধ্যে CTE (Common Table Expressions) এবং Recursive Queries অন্যতম। এই ফিচারগুলো ডেটা কুয়েরি করার প্রক্রিয়াকে আরও শক্তিশালী ও সহজ করে তোলে।
CTE (Common Table Expressions) কী?
Common Table Expression (CTE) হল একটি SQL কৌশল, যা একটি কুয়েরি স্টেটমেন্টের মধ্যে অস্থায়ী ফলাফল তৈরি করতে ব্যবহৃত হয়। CTE সাধারণত WITH কীওয়ার্ড দিয়ে শুরু হয় এবং একটি কুয়েরি ব্লক হিসেবে কাজ করে। এটি মূল কুয়েরির অংশ হিসেবে ব্যবহৃত হয় এবং কোডের পুনঃব্যবহারযোগ্যতা এবং পাঠযোগ্যতা উন্নত করে।
CTE এর সুবিধা
- কোডের পুনঃব্যবহারযোগ্যতা (Reusability): একই কুয়েরি একাধিক জায়গায় ব্যবহার করা যায়।
- পাঠযোগ্যতা (Readability): বড় কুয়েরির মধ্যে CTE ব্যবহার করলে কোডের পাঠযোগ্যতা বৃদ্ধি পায়।
- কৌনিকতা (Encapsulation): CTE-তে ডেটা সংকলন করা হয়ে থাকে, যা মূল কুয়েরির মধ্যে সহজে ব্যবহৃত হতে পারে।
CTE ব্যবহার উদাহরণ
ধরা যাক, আপনার একটি employees টেবিল আছে এবং আপনি এক্সপেন্ডেড স্যালারি এবং পদের তথ্য দেখতে চান:
WITH EmployeeCTE AS (
SELECT employee_id, name, salary, department
FROM employees
WHERE department = 'HR'
)
SELECT * FROM EmployeeCTE;
এখানে EmployeeCTE একটি CTE, যা HR ডিপার্টমেন্টের সমস্ত কর্মচারীর তথ্য সংগ্রহ করে এবং পরে মূল কুয়েরিতে ব্যবহার করা হয়।
CTE এর ব্যবহার ক্ষেত্র
- ডেটা ফিল্টারিং (Data Filtering): CTE ব্যবহার করে নির্দিষ্ট শর্তে ডেটা ফিল্টার করা।
- ডেটা এক্সট্র্যাকশন: একাধিক সাব-কুয়েরি ব্যবহার করে ডেটা সংগ্রহ করা।
- এগ্রিগেশন (Aggregation): বড় ডেটাসেটের উপর গ্রুপিং এবং অন্যান্য এগ্রিগেট ফাংশন প্রয়োগ করা।
Recursive Queries কী?
Recursive Queries হল এমন কুয়েরি, যা একটি টেবিলের মধ্যে পুনরাবৃত্তি (recursion) সম্পাদন করে। এটি মূলত CTE (Common Table Expression) এর একটি বিশেষ ধরণ, যা একাধিক স্তরে ডেটা বের করতে সাহায্য করে। একটি Recursive Query মূলত দুটি অংশে বিভক্ত:
- Anchor Member (Anchor Query): এটি মূল কুয়েরির প্রথম অংশ, যা বেস কন্ডিশন নির্ধারণ করে।
- Recursive Member (Recursive Query): এটি পূর্বের অংশ থেকে পাওয়া ফলাফল ব্যবহার করে পুনরায় কুয়েরি চালিয়ে নতুন তথ্য নিয়ে আসে।
Recursive Query সাধারণত WITH RECURSIVE কীওয়ার্ড দিয়ে শুরু হয় এবং এটি একটি নির্দিষ্ট সীমা বা শর্তে সম্পন্ন হয়।
Recursive Query এর উদাহরণ
ধরা যাক, আপনার একটি employees টেবিল আছে এবং আপনি একটি নির্দিষ্ট কর্মচারীর অধীনস্থ সকল কর্মচারীর তালিকা দেখতে চান, যেখানে employee_id এবং manager_id এর মধ্যে সম্পর্ক রয়েছে। আপনি CTE ব্যবহার করে Recursive Query তৈরি করতে পারেন:
WITH RECURSIVE EmployeeHierarchy AS (
SELECT employee_id, name, manager_id
FROM employees
WHERE manager_id IS NULL -- Anchor member: প্রথম স্তর
UNION ALL
SELECT e.employee_id, e.name, e.manager_id
FROM employees e
JOIN EmployeeHierarchy eh ON e.manager_id = eh.employee_id -- Recursive member
)
SELECT * FROM EmployeeHierarchy;
এখানে:
- প্রথম অংশে (Anchor Member), শুধুমাত্র সেই কর্মচারীদের নির্বাচন করা হয়েছে যাদের manager_id NULL (যারা প্রথম স্তরের ম্যানেজার)।
- দ্বিতীয় অংশে (Recursive Member), পূর্ববর্তী স্তরের কর্মচারীদের manager_id এর সাথে সম্পর্কিত কর্মচারীদের পুনরায় যোগ করা হয়েছে।
Recursive Queries এর সুবিধা
- ডিপ এন্ট্রি (Deep Entry): সিস্টেমে কোনো ধাপে ধাপে সম্পর্কিত ডেটা বের করা সম্ভব।
- ট্রান্সফরমেশন (Transformation): ডেটার মধ্যে লজিক্যাল হায়ারার্কি বা শৃঙ্খলা সৃষ্টি করা।
- কমপ্লেক্স ডেটা অ্যানালাইসিস: Recursive Queries ডেটার মধ্যে আরও জটিল সম্পর্কের সন্ধান করতে সহায়তা করে।
CTE এবং Recursive Queries এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | CTE | Recursive Queries |
|---|---|---|
| প্রকৃতি | সাধারণত এক ধাপের কুয়েরি | একাধিক স্তরের (multiple levels) কুয়েরি |
| ব্যবহার | সাধারণ ডেটা নির্বাচন এবং ফিল্টারিং | পুনরাবৃত্তি (recursion) সম্পাদন করার জন্য |
| কুয়েরি গঠন | একক কুয়েরি বা সাব-কুয়েরি হিসাবে কাজ করে | CTE এর মাধ্যমে পুনরাবৃত্তি চলে |
| সুবিধা | কোডের পাঠযোগ্যতা ও পুনঃব্যবহারযোগ্যতা | হায়ারার্কিকাল বা ডিপ ডেটা সম্পর্ক বের করতে সক্ষম |
| প্রয়োগ ক্ষেত্র | সহজ কুয়েরি বা ডেটা ফিল্টারিং | হায়ারার্কি সম্পর্কিত ডেটা বা ট্রান্সফরমেশন |
সারাংশ
CTE (Common Table Expressions) এবং Recursive Queries হল দুটি শক্তিশালী টুল, যা SQL কুয়েরি লেখার সময় কার্যক্ষমতা এবং পাঠযোগ্যতা বাড়াতে সহায়তা করে। CTE ডেটার উপস্থাপন এবং প্রয়োগ সহজ করে, আর Recursive Queries ডেটার মধ্যে পুনরাবৃত্তি ব্যবহার করে জটিল সম্পর্কের বিশ্লেষণ করতে সহায়তা করে। Apache Tajo-তে এই ফিচারগুলো ব্যবহার করে বৃহৎ ডেটাসেটের মধ্যে আরও জটিল কুয়েরি কার্যক্রম করা সম্ভব।
Read more