Hive, SQL-অনুরূপ কুয়েরি ভাষা HiveQL ব্যবহার করে ডেটাবেস পরিচালনা ও বিশ্লেষণ করতে সহায়তা করে। HiveQL-এ JOIN এবং Subquery দুটি গুরুত্বপূর্ণ কনসেপ্ট, যা ডেটার মধ্যে সম্পর্ক স্থাপন এবং জটিল কুয়েরি চালানোর জন্য ব্যবহৃত হয়। এই দুটি কনসেপ্ট ব্যবহার করে আপনি বিভিন্ন টেবিলের মধ্যে সম্পর্ক স্থাপন এবং আরো জটিল ডেটা বিশ্লেষণ কার্যক্রম সম্পন্ন করতে পারেন।
JOIN এর ব্যবহার
JOIN ব্যবহৃত হয় একাধিক টেবিলের মধ্যে সম্পর্ক তৈরি করতে, যেখানে একটি টেবিলের একটি কলাম অন্য টেবিলের কোনো কলামের সাথে সম্পর্কযুক্ত থাকে। Hive-এ JOIN বেশ কয়েকটি ধরণের হয়, যেমন INNER JOIN, LEFT JOIN, RIGHT JOIN, এবং FULL JOIN। Hive এই JOIN অপারেটরগুলোকে Hadoop-এর MapReduce ব্যবস্থায় প্রক্রিয়া করে থাকে।
১. INNER JOIN
INNER JOIN ব্যবহার করা হয় দুটি টেবিলের মধ্যে মিল পাওয়া রেকর্ডগুলো বের করতে। এই JOIN শুধুমাত্র তাদের রেকর্ড গুলো দেখাবে যেখানে দুটি টেবিলের মধ্যে মিল থাকবে।
উদাহরণ:
SELECT a.id, a.name, b.salary
FROM employees a
INNER JOIN salaries b
ON a.id = b.emp_id;
এখানে employees টেবিল এবং salaries টেবিলের মধ্যে id এবং emp_id কলাম দ্বারা সম্পর্ক তৈরি করা হয়েছে। শুধুমাত্র এমন রেকর্ডগুলো রিটার্ন হবে যেখানে id এবং emp_id একে অপরের সাথে মিলে যাবে।
২. LEFT JOIN
LEFT JOIN ব্যবহার করা হয় যাতে প্রথম টেবিলের সব রেকর্ড এবং মিল পাওয়া রেকর্ডগুলোকেও রিটার্ন করা হয়। যদি দ্বিতীয় টেবিলের সাথে মিল না পাওয়া যায়, তাহলে সেই কলামগুলো NULL হিসেবে দেখানো হবে।
উদাহরণ:
SELECT a.id, a.name, b.salary
FROM employees a
LEFT JOIN salaries b
ON a.id = b.emp_id;
এখানে employees টেবিলের সব রেকর্ড রিটার্ন হবে এবং মিল পাওয়া রেকর্ডগুলো salaries টেবিল থেকে যুক্ত হবে। যদি কোনো মিল না পাওয়া যায়, তবে salary কলামটি NULL হবে।
৩. RIGHT JOIN
RIGHT JOIN হল একটি বিপরীত কার্যক্রম, যেখানে দ্বিতীয় টেবিলের সব রেকর্ড রিটার্ন হয় এবং প্রথম টেবিলের সাথে মিল পাওয়া রেকর্ডগুলো দেখানো হয়।
উদাহরণ:
SELECT a.id, a.name, b.salary
FROM employees a
RIGHT JOIN salaries b
ON a.id = b.emp_id;
এখানে salaries টেবিলের সব রেকর্ড রিটার্ন হবে এবং মিল পাওয়া রেকর্ডগুলো employees টেবিল থেকে যুক্ত হবে।
৪. FULL JOIN
FULL JOIN দুটি টেবিলের সব রেকর্ড রিটার্ন করে, যেখানে মিল পাওয়া রেকর্ডগুলো একত্রিত হয় এবং যেগুলো মিল পায় না, সেখানে NULL দেখানো হয়।
উদাহরণ:
SELECT a.id, a.name, b.salary
FROM employees a
FULL JOIN salaries b
ON a.id = b.emp_id;
এখানে employees এবং salaries টেবিলের সব রেকর্ড দেখানো হবে। মিল না পাওয়া রেকর্ডগুলোর ক্ষেত্রে অন্য টেবিলের কলামগুলি NULL হিসেবে প্রদর্শিত হবে।
Subquery এর ব্যবহার
Subquery হল এমন একটি কুয়েরি যা অন্য একটি কুয়েরির মধ্যে ব্যবহৃত হয়। Subquery-কে Nested Query বা Inner Query বলা হয়। এটি সাধারণত WHERE বা FROM ক্লজে ব্যবহৃত হয়, যা মূল কুয়েরি চলানোর আগে একটি সহায়ক কুয়েরি হিসেবে কাজ করে।
১. Subquery ব্যবহার WHERE ক্লজে
Subquery মূল কুয়েরির WHERE ক্লজে ব্যবহার করা হয় যখন আপনি একটি শর্ত পূর্ণ করার জন্য অন্য কুয়েরি থেকে ফলাফল সংগ্রহ করতে চান।
উদাহরণ:
SELECT id, name
FROM employees
WHERE salary > (
SELECT AVG(salary)
FROM employees
);
এখানে, প্রথম কুয়েরিটি employees টেবিলের সেই সকল রেকর্ড নির্বাচন করবে, যাদের salary গড় salary এর চেয়ে বেশি। Subquery প্রথমে গড় salary বের করবে, এবং মূল কুয়েরি সেই গড়ের চেয়ে বেশি salary সহ রেকর্ডগুলো ফিরিয়ে আনবে।
২. Subquery ব্যবহার FROM ক্লজে
Subquery কখনো কখনো FROM ক্লজেও ব্যবহার করা হয়, যেখানে এটি একটি টেম্পোরারি টেবিল হিসেবে কাজ করে এবং মূল কুয়েরিতে অংশগ্রহণ করে।
উদাহরণ:
SELECT department, MAX(salary)
FROM (
SELECT department, salary
FROM employees
) AS subquery
GROUP BY department;
এখানে, employees টেবিল থেকে department এবং salary নিয়ে প্রথমে একটি Subquery তৈরি করা হয়েছে, এবং তারপর মূল কুয়েরিতে প্রতি ডিপার্টমেন্টের সর্বোচ্চ salary বের করা হয়েছে।
৩. Correlated Subquery
Correlated Subquery একটি এমন Subquery যা মূল কুয়েরির সাথে সম্পর্কিত এবং প্রতিটি রেকর্ডের জন্য আলাদা কুয়েরি চালায়।
উদাহরণ:
SELECT id, name
FROM employees e
WHERE salary > (
SELECT AVG(salary)
FROM employees
WHERE department = e.department
);
এখানে, প্রতিটি employees টেবিলের রেকর্ডের জন্য Subquery চলবে এবং তার বিভাগের গড় salary তুলনা করবে।
উপসংহার
Hive-এ JOIN এবং Subquery এর ব্যবহারে আপনি বিভিন্ন টেবিলের মধ্যে সম্পর্ক স্থাপন করতে এবং জটিল ডেটা বিশ্লেষণ কার্যক্রম পরিচালনা করতে পারেন। JOIN আপনাকে একাধিক টেবিলের রেকর্ড সংযুক্ত করতে সাহায্য করে, যেখানে আপনি মিল পাওয়া বা না পাওয়া রেকর্ডগুলো দেখতে পারেন। অন্যদিকে, Subquery একটি কুয়েরির ভিতরে অন্য কুয়েরি ব্যবহার করে ডেটার আরও গভীরে বিশ্লেষণ করতে সহায়তা করে। HiveQL-এ এই দুটি কনসেপ্টের ব্যবহার বড় ডেটাসেটের উপর কার্যকরী এবং জটিল কুয়েরি তৈরি করতে সক্ষম।
Read more