Hive SQL-এ Subqueries হল একটি কুয়েরি, যা অন্য কুয়েরির ভিতরে একটি সাব-কুয়েরি হিসেবে ব্যবহৃত হয়। Subqueries সাধারণত একটি প্রধান কুয়েরি (main query) এর ভিতরে ডেটা প্রদান বা ফিল্টার করার জন্য ব্যবহার করা হয়। Hive-এর ক্ষেত্রে, Subqueries ব্যবহার করে আপনি একটি কুয়েরির ফলাফলকে আরেকটি কুয়েরির অংশ হিসেবে অন্তর্ভুক্ত করতে পারেন। এটি ডেটা বিশ্লেষণ এবং ফলাফল বের করার ক্ষেত্রে অত্যন্ত কার্যকরী হতে পারে।
Subquery কী?
Subquery হল একটি কুয়েরি, যা অন্য একটি কুয়েরির মধ্যে থাকা থাকে এবং এটি সাধারণত ডেটা রিটার্ন করে বা প্রধান কুয়েরির জন্য একটি শর্ত সরবরাহ করে। Subqueries-কে সাধারণত SELECT, INSERT, UPDATE, এবং DELETE কুয়েরির মধ্যে ব্যবহৃত হতে দেখা যায়।
Hive-এ Subqueries এর ধরন
Hive-এ Subqueries সাধারণত দুই ধরনের হয়ে থাকে:
- Single-row Subquery
- Multi-row Subquery
১. Single-row Subquery
Single-row Subquery কেবল একটি একক মান রিটার্ন করে। এটি সাধারণত =`, >, < প্রমিত অপারেটরগুলির সাথে ব্যবহার হয়। এই ধরনের Subquery এমন কুয়েরি রিটার্ন করে যা একটি একক সারি এবং একটি কলামের মান প্রদান করে।
উদাহরণ:
SELECT name, salary
FROM employees
WHERE department_id = (SELECT department_id
FROM departments
WHERE department_name = 'Sales');
এখানে, subquery department_id রিটার্ন করছে যা Sales বিভাগের সাথে সম্পর্কিত। তারপর প্রধান কুয়েরি শুধুমাত্র সেই department_id এর সাথে সম্পর্কিত কর্মচারীদের নাম এবং বেতন রিটার্ন করে।
২. Multi-row Subquery
Multi-row Subquery এমন কুয়েরি রিটার্ন করে যা একাধিক সারি এবং একাধিক মান সরবরাহ করে। এই ধরনের Subquery সাধারণত IN, NOT IN, EXISTS বা NOT EXISTS অপারেটরের সাথে ব্যবহৃত হয়।
উদাহরণ:
SELECT name, salary
FROM employees
WHERE department_id IN (SELECT department_id
FROM departments
WHERE location = 'New York');
এখানে, Subquery একাধিক department_id রিটার্ন করবে, যা New York লোকেশনে অবস্থিত। তারপর প্রধান কুয়েরি সেই department_id এর সাথে সম্পর্কিত কর্মচারীদের নাম এবং বেতন রিটার্ন করবে।
Subquery এর ব্যবহার
১. Filtering Data
Subqueries ব্যবহার করে আপনি ডেটা ফিল্টার করতে পারেন। একটি প্রধান কুয়েরি থেকে ডেটা চয়ন করার জন্য Subquery প্রাপ্ত মানের ভিত্তিতে ফলাফলকে সীমাবদ্ধ করতে পারে।
উদাহরণ:
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
এই কুয়েরি মূলত সেই কর্মচারীদের বেতন রিটার্ন করবে যাদের বেতন employees টেবিলের গড় বেতনের চেয়ে বেশি।
২. Using Subqueries with Aggregations
Subqueries অ্যাগ্রিগেট ফাংশনের সাথে ব্যবহার করে ডেটার উপর পরিসংখ্যান বের করতে সহায়তা করে। এটি আপনাকে একটি নির্দিষ্ট মান বা রেঞ্জের মধ্যে ডেটা সীমাবদ্ধ করার সুযোগ দেয়।
উদাহরণ:
SELECT name, salary
FROM employees
WHERE salary > (SELECT MAX(salary) FROM employees WHERE department = 'IT');
এখানে, Subquery IT বিভাগের মধ্যে সর্বোচ্চ বেতন রিটার্ন করবে এবং প্রধান কুয়েরি সেই বেতনের চেয়ে বেশি বেতন পণ্য কর্মচারীদের রিটার্ন করবে।
৩. Using Subqueries with JOIN
Subqueries, JOIN অপারেশনগুলির সাথে ব্যবহার করা যেতে পারে যাতে আপনি অন্য টেবিল থেকে ডেটা সংগ্রহ করতে পারেন এবং প্রধান কুয়েরির সাথে একত্রিত করতে পারেন।
উদাহরণ:
SELECT e.name, e.salary
FROM employees e
WHERE e.department_id = (SELECT department_id
FROM departments
WHERE department_name = 'HR');
এখানে, Subquery HR বিভাগের department_id রিটার্ন করবে এবং প্রধান কুয়েরি সেই বিভাগে কর্মরত কর্মচারীদের নাম এবং বেতন রিটার্ন করবে।
৪. Insert Data Using Subqueries
Subqueries ব্যবহার করে Hive টেবিলে ডেটা ইনসার্ট করতে পারেন। এই ধরনের Subquery সাধারণত INSERT INTO বা INSERT OVERWRITE কুয়েরির সাথে ব্যবহৃত হয়।
উদাহরণ:
INSERT INTO TABLE high_salary_employees
SELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
এখানে, Subquery গড় বেতন বের করে এবং প্রধান কুয়েরি সেই বেতনের চেয়ে বেশি বেতন পণ্য কর্মচারীদের high_salary_employees টেবিলে ইনসার্ট করবে।
Subqueries এর সীমাবদ্ধতা
- Performance: Subqueries পারফরম্যান্সে প্রভাব ফেলতে পারে, বিশেষ করে যদি Subquery বড় ডেটাসেট থেকে ডেটা রিটার্ন করে। বড় ডেটাসেটের ক্ষেত্রে, Subqueries অপ্টিমাইজড না হলে পারফরম্যান্স ধীর হতে পারে।
- Nested Subqueries: Hive এখনও কিছু জটিল বা গভীরভাবে nested Subqueries সাপোর্ট করে না। খুব বেশি nested Subqueries ব্যবহার করলে কিছু ক্ষেত্রেও ত্রুটি হতে পারে।
- Join with Subquery: Subqueries ব্যবহার করার সময়, তাদের সাথে JOIN অপারেশনগুলি সঠিকভাবে কাজ না করার সম্ভাবনা থাকতে পারে, বিশেষ করে যখন একাধিক subqueries বা complex conditions যুক্ত থাকে।
উপসংহার
Hive-এ Subqueries অত্যন্ত গুরুত্বপূর্ণ এবং শক্তিশালী একটি টুল, যা ডেটা ফিল্টারিং, অ্যাগ্রিগেশন, ইনসার্ট এবং ডেটা সঞ্চয়ন কার্যক্রমে ব্যাপকভাবে ব্যবহৃত হয়। Subqueries দ্বারা আপনি একটি কুয়েরি থেকে ডেটা নিয়ে অন্য কুয়েরিতে ব্যবহারের জন্য তা পুনঃব্যবহার করতে পারেন। Subqueries সাধারণত Single-row বা Multi-row সিস্টেমে কাজ করে, এবং এটি ডেটা প্রক্রিয়াকরণকে আরও নমনীয় এবং কার্যকরী করে তোলে। তবে, পারফরম্যান্স এবং সীমাবদ্ধতার বিষয়েও সচেতন থাকা উচিত, বিশেষ করে বড় ডেটাসেট ব্যবহারের ক্ষেত্রে।
Read more