Apache Impala একটি উচ্চ-দ্রুত ডেটা প্রসেসিং ইঞ্জিন, যা হাডুপ (Hadoop) ইকোসিস্টেমের মধ্যে SQL ভিত্তিক কোয়েরি প্রসেসিং সক্ষম করে। Impala ডেটা প্রক্রিয়াকরণ এবং বিশ্লেষণের জন্য বিভিন্ন ধরনের ডেটা টাইপ এবং টেবিল তৈরি করার সুবিধা প্রদান করে। এই টিউটোরিয়ালে আমরা Impala এর ডেটা টাইপ এবং টেবিল তৈরির পদ্ধতি সম্পর্কে বিস্তারিত আলোচনা করব।
Impala Data Types
Impala তে বিভিন্ন ধরনের ডেটা টাইপ ব্যবহার করা হয়, যা ডেটাবেস টেবিলের কলামগুলির জন্য উপযুক্ত ডেটা ফরম্যাট এবং স্টোরেজ নির্ধারণ করে। Impala-তে সাধারণত ব্যবহার হওয়া ডেটা টাইপগুলো হলো:
১. Numeric Data Types
- TINYINT: এটি একটি ১ বাইটের সাইনড (signed) পূর্ণসংখ্যা (integer) ডেটা টাইপ, যা -128 থেকে 127 এর মধ্যে মান ধারণ করতে পারে।
- SMALLINT: এটি একটি ২ বাইটের সাইনড পূর্ণসংখ্যা ডেটা টাইপ, যা -32,768 থেকে 32,767 এর মধ্যে মান ধারণ করতে পারে।
- INT: এটি একটি ৪ বাইটের সাইনড পূর্ণসংখ্যা ডেটা টাইপ, যা -2,147,483,648 থেকে 2,147,483,647 এর মধ্যে মান ধারণ করতে পারে।
- BIGINT: এটি একটি ৮ বাইটের সাইনড পূর্ণসংখ্যা ডেটা টাইপ, যা -9,223,372,036,854,775,808 থেকে 9,223,372,036,854,775,807 এর মধ্যে মান ধারণ করতে পারে।
- FLOAT: এটি একটি ৪ বাইটের ভাসমান বিন্দু (floating point) ডেটা টাইপ, যা দশমিক মান ধারণ করতে পারে।
- DOUBLE: এটি একটি ৮ বাইটের ভাসমান বিন্দু ডেটা টাইপ, যা আরও উচ্চ সঠিকতার সাথে দশমিক মান ধারণ করতে পারে।
২. String Data Types
- STRING: এটি একটি ভেরিয়েবল লেংথের স্ট্রিং ডেটা টাইপ। এটি যে কোনও আকারের টেক্সট (characters) ধারণ করতে পারে।
- CHAR: এটি একটি ফিক্সড লেংথের স্ট্রিং ডেটা টাইপ, যা একটি নির্দিষ্ট দৈর্ঘ্যের স্ট্রিং ধারণ করতে পারে (যেমন,
CHAR(10)১০টি অক্ষর ধারণ করবে)। - VARCHAR: এটি একটি ভেরিয়েবল লেংথের স্ট্রিং ডেটা টাইপ, যা নির্দিষ্ট দৈর্ঘ্যের স্ট্রিং ধারণ করতে পারে, তবে স্ট্রিংয়ের দৈর্ঘ্য CHAR থেকে কম হতে হবে।
৩. Date and Time Data Types
- DATE: এটি একটি ক্যালেন্ডার তারিখ ডেটা টাইপ, যা শুধুমাত্র বছরের, মাসের এবং দিনের মান ধারণ করে (YYYY-MM-DD)।
- TIMESTAMP: এটি একটি পূর্ণ সময়ের ডেটা টাইপ, যা তারিখ (YYYY-MM-DD) এবং সময় (HH:MM:SS) সহ একত্রিত তথ্য ধারণ করে।
৪. Other Data Types
- BOOLEAN: এটি একটি বুলিয়ান ডেটা টাইপ, যা
TRUEবাFALSEমান ধারণ করতে পারে। - DECIMAL: এটি একটি নির্দিষ্ট সংখ্যা পর্যন্ত দশমিক মান ধারণ করতে পারে। উদাহরণস্বরূপ,
DECIMAL(10,2)১০টি ডিজিট ধারণ করতে পারে, যেখানে ২টি ডিজিট দশমিকের পর থাকবে। - BINARY: এটি একটি বাইনারি ডেটা টাইপ, যা একটি নির্দিষ্ট আকারের বাইনারি তথ্য ধারণ করে।
Impala Table Creation
Impala তে টেবিল তৈরি করার জন্য SQL ব্যবহার করা হয়। এখানে আমরা টেবিল তৈরি করার প্রক্রিয়া, টেবিলের স্ট্রাকচার এবং বিভিন্ন কনফিগারেশন অপশন নিয়ে আলোচনা করব।
১. টেবিল তৈরি করার সিংট্যাক্স
Impala তে একটি টেবিল তৈরি করতে সাধারণত নিচের সিংট্যাক্স ব্যবহার করা হয়:
CREATE TABLE table_name (
column_name data_type [column_constraint],
...
)
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION 'uri'];
- table_name: টেবিলের নাম।
- column_name: কলামের নাম।
- data_type: সংশ্লিষ্ট কলামের ডেটা টাইপ।
- ROW FORMAT: ডেটা ফাইলের ফরম্যাট নির্ধারণ করে (যেমন, Parquet, ORC)।
- STORED AS: ডেটা স্টোরেজ ফরম্যাট নির্ধারণ করে (যেমন, TEXTFILE, PARQUET)।
- LOCATION: টেবিলের ডেটা সংরক্ষণের লোকেশন (যেমন, HDFS বা অন্য কোন স্টোরেজ পাথ)।
২. একটি সাধারণ টেবিল তৈরি করা
CREATE TABLE employee (
id INT,
name STRING,
age INT,
salary DOUBLE,
hire_date DATE
)
STORED AS PARQUET;
এটি একটি employee নামক টেবিল তৈরি করবে যেখানে পাঁচটি কলাম থাকবে: id, name, age, salary, এবং hire_date।
৩. টেবিলের জন্য Partitioning
Impala তে পার্টিশনিং ব্যবহার করে ডেটা আরও দক্ষভাবে সংরক্ষণ এবং এক্সিকিউট করা যায়। টেবিল পার্টিশন করার জন্য, নিচের মত সিংট্যাক্স ব্যবহার করা হয়:
CREATE TABLE sales (
id INT,
product STRING,
amount DOUBLE,
sale_date DATE
)
PARTITIONED BY (region STRING)
STORED AS PARQUET;
এটি sales নামক একটি টেবিল তৈরি করবে, যেটিতে ডেটা region অনুযায়ী পার্টিশন করা হবে।
৪. ডিস্ট্রিবিউটেড টেবিল (External Tables)
Impala তে বাইরের ডেটা সোর্সের ওপর টেবিল তৈরি করতে External Tables ব্যবহার করা যায়। উদাহরণস্বরূপ:
CREATE EXTERNAL TABLE external_sales (
id INT,
product STRING,
amount DOUBLE,
sale_date DATE
)
STORED AS TEXTFILE
LOCATION '/user/data/external_sales';
এটি একটি বাইরের টেবিল তৈরি করবে, যেখানে ডেটা ফাইল HDFS এর '/user/data/external_sales' পাথ থেকে সরাসরি পড়া হবে।
সারাংশ
Impala ডেটাবেসের বিভিন্ন ধরনের ডেটা টাইপ এবং টেবিল তৈরির প্রক্রিয়া ব্যবহারকারীদের ডেটা স্টোরেজ এবং বিশ্লেষণের জন্য একটি শক্তিশালী এবং নমনীয় পরিবেশ প্রদান করে। ডেটা টাইপের মধ্যে সংখ্যা, স্ট্রিং, তারিখ, সময়, এবং বাইনারি ডেটা অন্তর্ভুক্ত থাকে। টেবিল তৈরি করার সময় বিভিন্ন কনফিগারেশন অপশন যেমন পার্টিশনিং, স্টোরেজ ফরম্যাট, এবং বাইরের ডেটা সোর্সের সংযোগ ব্যবহার করা যায়।
Apache Impala বিভিন্ন ধরনের ডেটা টেমপ্লেট বা ডেটা টাইপ সমর্থন করে, যা ব্যবহারকারীদের বিভিন্ন ধরনের ডেটা প্রসেসিং এবং বিশ্লেষণ করতে সক্ষম করে। Impala এর ডেটা টাইপগুলো প্রধানত SQL-ভিত্তিক এবং ডেটাবেসের কার্যকরী ব্যবহারের জন্য যথাযথভাবে ডিজাইন করা হয়েছে। এখানে Impala এর কিছু প্রধান ডেটা টাইপের আলোচনা করা হলো।
Impala এর সাপোর্টেড ডেটা টাইপস
Impala মোট ৫টি প্রধান ক্যাটাগরিতে ডেটা টাইপ সরবরাহ করে, যা যথাক্রমে নম্বরিক, ক্যারেক্টার, টাইমস্ট্যাম্প, লজিক্যাল, এবং স্ট্রাকচারড ডেটা টাইপ। নিচে প্রতিটি ক্যাটেগরির ডেটা টাইপ বিস্তারিতভাবে ব্যাখ্যা করা হলো।
1. নম্বরিক ডেটা টাইপ (Numeric Data Types)
এই ডেটা টাইপগুলি সংখ্যাসূচক ডেটা সংরক্ষণ করতে ব্যবহৃত হয়, যেমন পূর্ণসংখ্যা এবং ভগ্নাংশ।
- TINYINT
১ বাইটের সাইনড পূর্ণসংখ্যা, -১২৮ থেকে ১২৭ এর মধ্যে মান ধারণ করতে পারে। - SMALLINT
২ বাইটের সাইনড পূর্ণসংখ্যা, -৩২,৭৬৮ থেকে ৩২,৭৬৭ এর মধ্যে মান ধারণ করতে পারে। - INT
৪ বাইটের সাইনড পূর্ণসংখ্যা, -২,১৪৭,৪৮৩,৬৪৮ থেকে ২,১৪৭,৪৮৩,৬৪৭ এর মধ্যে মান ধারণ করতে পারে। - BIGINT
৮ বাইটের সাইনড পূর্ণসংখ্যা, -৯২২,০০০,০০০,০০০,০০০,০০০ থেকে ৯২২,০০০,০০০,০০০,০০০,০০০ এর মধ্যে মান ধারণ করতে পারে। - FLOAT
৪ বাইটের ফ্লোটিং পয়েন্ট সংখ্যা (Single Precision), ±৩.৪ x ১০^৩৮ থেকে ±৩.৪ x ১০^৩৮ এর মধ্যে। - DOUBLE
৮ বাইটের ফ্লোটিং পয়েন্ট সংখ্যা (Double Precision), ±১.৮ x ১০^৩০৮ থেকে ±১.৮ x ১০^৩০৮ এর মধ্যে। - DECIMAL (หรือ NUMERIC)
নির্দিষ্ট সঠিকতা এবং স্কেল সহ দশমিক সংখ্যা, যেমন ৩৫ সঠিকতা এবং ১০ স্কেল, অর্থাৎ ৩৫ ডিজিট এবং ১০টি ডেসিমাল পয়েন্ট।
2. ক্যারেক্টার ডেটা টাইপ (Character Data Types)
এই ডেটা টাইপগুলি টেক্সট ডেটা সংরক্ষণের জন্য ব্যবহৃত হয়।
- CHAR
স্থির দৈর্ঘ্যের স্ট্রিং, যার দৈর্ঘ্য ১ থেকে ২,০০০ পর্যন্ত হতে পারে। - VARCHAR
পরিবর্তনশীল দৈর্ঘ্যের স্ট্রিং, যেখানে স্ট্রিংয়ের দৈর্ঘ্য ১ থেকে ৮,০০০ পর্যন্ত হতে পারে। - STRING
পরিবর্তনশীল দৈর্ঘ্যের স্ট্রিং, যা হালকা এবং বৃহত্তর স্ট্রিং ডেটা সংরক্ষণে ব্যবহৃত হয়। এটি অনন্ত দৈর্ঘ্য ধারণ করতে পারে।
3. টাইমস্ট্যাম্প ডেটা টাইপ (Timestamp Data Type)
টাইমস্ট্যাম্প ডেটা টাইপ তারিখ এবং সময় সম্পর্কিত তথ্য ধারণ করতে ব্যবহৃত হয়।
- TIMESTAMP
এটি ১২০ বছর পরিমাণ সময়ের সাথে সম্পর্কিত ডেটা ধারণ করে, যা সেকেন্ড এবং মিলিসেকেন্ডের মধ্যে পার্থক্য প্রকাশ করতে সক্ষম। এটি ১৯৭০-০১-০১ ০০:০০:০০ থেকে ২২৭৪-১২-৩১ ২৩:৫৯:৫৯ এর মধ্যে সময় নির্দেশ করতে পারে।
4. লজিক্যাল ডেটা টাইপ (Logical Data Types)
এই টাইপটি বুলিয়ান মান সংরক্ষণ করতে ব্যবহৃত হয়।
- BOOLEAN
এটি একটি সত্য (True) বা মিথ্যা (False) মান সংরক্ষণ করে।
5. স্ট্রাকচারড ডেটা টাইপ (Structured Data Types)
এই ডেটা টাইপগুলি একাধিক মান ধারণ করতে পারে এবং এটি কমপ্লেক্স ডেটা স্ট্রাকচার গঠন করতে ব্যবহৃত হয়।
- ARRAY
এটি একটি ধারাবাহিক উপাদান ধারণ করে, যেখানে প্রতিটি উপাদান একই ডেটা টাইপের হতে হবে। উদাহরণস্বরূপ, একটি ইন্টিজার অ্যারে বা স্ট্রিং অ্যারে। - MAP
এটি একটি কীগুলির সাথে মান সংযুক্ত করে একটি ডেটা স্ট্রাকচার। প্রতিটি মান একটি নির্দিষ্ট কীর সাথে সম্পর্কিত থাকে। উদাহরণস্বরূপ,MAP<STRING, INT>। - STRUCT
এটি একটি ডেটা স্ট্রাকচার যা বিভিন্ন ডেটা টাইপের উপাদান ধারণ করে। এটি অন্যান্য ডেটা টাইপের মতো একটি কমপ্লেক্স ডেটা টাইপ গঠন করতে পারে। উদাহরণস্বরূপ,STRUCT<INT, STRING, BOOLEAN>।
Impala এর অন্যান্য সমর্থিত ডেটা টাইপ
এছাড়া, Impala আরও কিছু বিশেষ ডেটা টাইপ সমর্থন করে, যেমন:
- BINARY
এটি বাইনারি ডেটা সংরক্ষণ করে, যেমন ছবি বা ভিডিও ফাইল। - UUID
এটি ইউনিভার্সালি ইউনিক আইডেন্টিফায়ার (UUID) ধারণ করে, যা নির্দিষ্ট মান সহ একটি অনন্য আইডেন্টিফায়ার। - GEOGRAPHY
এটি ভূগোল সম্পর্কিত ডেটা যেমন স্থানাঙ্ক, মানচিত্র, লাইন ইত্যাদি ধারণ করতে ব্যবহৃত হয়।
সারাংশ
Apache Impala এর সাপোর্টেড ডেটা টাইপগুলি বিভিন্ন ধরনের ডেটা সংরক্ষণ এবং প্রসেস করার জন্য ডিজাইন করা হয়েছে। এর মধ্যে রয়েছে নম্বরিক, ক্যারেক্টার, টাইমস্ট্যাম্প, লজিক্যাল, এবং স্ট্রাকচারড ডেটা টাইপ। প্রতিটি ডেটা টাইপ Impala ব্যবহারকারীদের তাদের প্রয়োজনীয় ডেটা প্রক্রিয়াকরণ এবং বিশ্লেষণ সম্পাদন করার জন্য অত্যন্ত কার্যকরী।
Apache Impala-তে CREATE TABLE স্টেটমেন্ট ব্যবহার করে একটি নতুন টেবিল তৈরি করা হয়। এটি ব্যবহারকারীকে একটি ডেটাবেসের মধ্যে নতুন টেবিল তৈরি করার সুযোগ দেয়, যেখানে আপনি টেবিলের কলাম, ডেটাটাইপ এবং অন্যান্য বৈশিষ্ট্যগুলি নির্ধারণ করতে পারেন।
CREATE TABLE Syntax
CREATE TABLE [IF NOT EXISTS] <table_name> (
<column_name1> <data_type1>,
<column_name2> <data_type2>,
...
)
[ROW FORMAT <format>]
[STORED AS <file_format>];
- IF NOT EXISTS: এটি ঐচ্ছিক এবং যদি টেবিলটি আগে থেকেই ডেটাবেসে থাকে তবে টেবিলটি তৈরি করবে না।
- <table_name>: তৈরি করা টেবিলের নাম।
- <column_name>: টেবিলের কলামের নাম।
- <data_type>: কলামের জন্য নির্দিষ্ট ডেটাটাইপ (যেমন INT, STRING, FLOAT ইত্যাদি)।
- ROW FORMAT: টেবিলের ডেটা কীভাবে স্টোর করা হবে, যেমন TextFile বা Parquet।
- STORED AS: এটি টেবিলের ডেটা সংরক্ষণের ফাইল ফরম্যাট নির্ধারণ করে (যেমন, TEXTFILE, PARQUET, ORC ইত্যাদি)।
উদাহরণ ১: সাধারণ CREATE TABLE Statement
নিচে একটি সাধারণ CREATE TABLE স্টেটমেন্টের উদাহরণ দেওয়া হলো, যা একটি নতুন টেবিল তৈরি করবে যার মধ্যে তিনটি কলাম থাকবে:
CREATE TABLE employees (
employee_id INT,
name STRING,
salary FLOAT
);
এই স্টেটমেন্টটি একটি employees নামের টেবিল তৈরি করবে, যেখানে তিনটি কলাম থাকবে:
employee_id(INT টাইপ)name(STRING টাইপ)salary(FLOAT টাইপ)
উদাহরণ ২: IF NOT EXISTS ব্যবহার করে CREATE TABLE
যদি টেবিলটি ইতোমধ্যে ডেটাবেসে থাকে, তাহলে আপনি IF NOT EXISTS ব্যবহার করে টেবিল তৈরি করতে পারেন, যাতে টেবিলটি পুনরায় তৈরি না হয়:
CREATE TABLE IF NOT EXISTS employees (
employee_id INT,
name STRING,
salary FLOAT
);
এটি শুধুমাত্র তখনই টেবিল তৈরি করবে যখন employees নামের টেবিলটি ডেটাবেসে উপস্থিত না থাকবে।
উদাহরণ ৩: ROW FORMAT এবং STORED AS দিয়ে CREATE TABLE
এখানে একটি টেবিল তৈরি করা হচ্ছে যেখানে ডেটা Parquet ফরম্যাটে সংরক্ষিত হবে:
CREATE TABLE employees_parquet (
employee_id INT,
name STRING,
salary FLOAT
)
ROW FORMAT DELIMITED
STORED AS PARQUET;
এই স্টেটমেন্টে:
- ROW FORMAT DELIMITED টেবিলের ডেটাকে ডেলিমিটেড ফরম্যাটে ধারণ করে, যেমন সিএSV (Comma Separated Values)।
- STORED AS PARQUET টেবিলের ডেটা Parquet ফরম্যাটে সংরক্ষিত হবে, যা একটি কলাম-অরিয়েন্টেড ডেটাবেস ফরম্যাট।
উদাহরণ ৪: Partitioned Table তৈরি
Partitioning ব্যবহার করে টেবিলের ডেটা ভাগ করা যেতে পারে। Partitioning করলে ডেটার ভাগ আলাদা ফাইল সিস্টেমে বা অংশে ভাগ হয়ে যায়, যা পারফরম্যান্স বৃদ্ধি করতে সাহায্য করে। নিচে একটি partitioned টেবিল তৈরি করার উদাহরণ:
CREATE TABLE employees_partitioned (
employee_id INT,
name STRING,
salary FLOAT
)
PARTITIONED BY (department STRING)
STORED AS PARQUET;
এখানে:
- PARTITIONED BY:
departmentকলামের ভিত্তিতে ডেটা ভাগ হবে।
টেবিলের কলাম ও ডেটাটাইপের উদাহরণ
- STRING: টেক্সট ডেটার জন্য ব্যবহৃত হয়।
- INT: পূর্ণসংখ্যার জন্য ব্যবহৃত হয়।
- FLOAT: ভগ্নাংশ বা দশমিক সংখ্যা জন্য ব্যবহৃত হয়।
- BOOLEAN: সত্য বা মিথ্যা মান জন্য ব্যবহৃত হয়।
সারাংশ
CREATE TABLE স্টেটমেন্ট দিয়ে Impala-তে একটি নতুন টেবিল তৈরি করা হয়, যেখানে টেবিলের নাম, কলাম এবং ডেটাটাইপ নির্ধারণ করা হয়। এটি অত্যন্ত গুরুত্বপূর্ণ একটি কমান্ড, বিশেষত বড় ডেটাসেটের জন্য যেখানে বিভিন্ন ফরম্যাট এবং পার্টিশনিং ব্যবহার করা হয়। Impala-তে টেবিল তৈরি করার জন্য SQL স্ট্যান্ডার্ড অনুসরণ করা হয়, এবং বিভিন্ন ডেটা ফরম্যাট যেমন Parquet, ORC, এবং TEXTFILE ব্যবহার করা যায়।
Apache Impala, একটি শক্তিশালী SQL প্রসেসিং ইঞ্জিন, ডেটাবেসে ডেটা স্টোর করার জন্য বিভিন্ন ধরনের টেবিল সাপোর্ট করে। এর মধ্যে দুটি প্রধান ধরনের টেবিল রয়েছে: Managed Table এবং External Table। এই দুই ধরনের টেবিলের মধ্যে পার্থক্য বুঝে ডেটার সংরক্ষণ এবং ব্যবস্থাপনা আরও সহজ এবং কার্যকর করা যায়।
Managed Table
Managed Table (বা Internal Table) হল একটি ধরণ যা Impala ক্লাস্টারে সম্পূর্ণভাবে ম্যানেজ এবং কন্ট্রোল করা হয়। এই ধরনের টেবিলের মধ্যে থাকা ডেটা হাডুপ ফাইল সিস্টেম (HDFS) অথবা অন্য ডেটা সিস্টেমে Impala দ্বারা সম্পূর্ণভাবে নিয়ন্ত্রিত হয়।
Managed Table এর বৈশিষ্ট্য
- ডেটার মালিকানা: Managed টেবিলের ক্ষেত্রে, Impala পুরো ডেটা ও মেটাডেটার মালিকানার দায়িত্ব পালন করে। যখন টেবিলটি ড্রপ করা হয়, তখন সেই টেবিলের সাথে সম্পর্কিত সমস্ত ডেটা এবং মেটাডেটা মুছে ফেলা হয়।
- স্বয়ংক্রিয় ডেটা ম্যানেজমেন্ট: টেবিলের ডেটা Impala দ্বারা সঞ্চিত থাকে এবং টেবিলের ড্রপ বা রিডিফাইন করার সময় ডেটার কপিও মুছে ফেলা হয়।
- কোয়ারি পারফরম্যান্স: Managed টেবিল সাধারণত কোয়েরি পারফরম্যান্সে উন্নত হতে পারে কারণ Impala এই টেবিলের ডেটা এবং মেটাডেটার সম্পূর্ণ নিয়ন্ত্রণ রাখে।
Managed Table উদাহরণ
CREATE TABLE managed_table (
id INT,
name STRING,
age INT
);
External Table
External Table হল একটি টেবিল যার ডেটা Impala দ্বারা পুরোপুরি নিয়ন্ত্রিত নয়। এই ধরনের টেবিলগুলি অন্য কোনো ডেটা সোর্স (যেমন HDFS বা S3) থেকে ডেটা এক্সেস করে এবং Impala এর মাধ্যমে কেবল সেই ডেটা বিশ্লেষণ করে।
External Table এর বৈশিষ্ট্য
- ডেটার মালিকানা: External টেবিলের ক্ষেত্রে, ডেটার মালিকানা Impala এর বাইরে থাকে। এটি অন্য কোথাও (যেমন HDFS বা ক্লাউড স্টোরেজ) সঞ্চিত থাকে এবং Impala কেবলমাত্র সেই ডেটার রেফারেন্স (metadata) ধরে রাখে।
- ডেটা বজায় রাখা: External টেবিলের ডেটা ড্রপ করার সময় Impala শুধুমাত্র টেবিলের মেটাডেটা মুছে ফেলে। ডেটার কোনো ক্ষতি হয় না এবং তা বহিরাগত জায়গাতেই থাকে।
- শেয়ারড ডেটা: External টেবিল ব্যবহার করে বিভিন্ন অ্যাপ্লিকেশন বা টুল একে অন্যের ডেটা শেয়ার করতে পারে। একাধিক ব্যবহারকারী একই ডেটা সোর্সের ওপর কাজ করতে পারেন।
External Table উদাহরণ
CREATE EXTERNAL TABLE external_table (
id INT,
name STRING,
age INT
)
LOCATION '/user/data/external_data';
Managed এবং External Table এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Managed Table | External Table |
|---|---|---|
| ডেটার মালিকানা | Impala | বাইরের সিস্টেম (HDFS, S3, ইত্যাদি) |
| ডেটা ড্রপ করার সময় | ডেটা মুছে যায় | ডেটা অপরিবর্তিত থাকে |
| টেবিলের ব্যবস্থাপনা | Impala সম্পূর্ণভাবে ম্যানেজ করে | বাইরের সিস্টেম ম্যানেজ করে |
| বহিরাগত অ্যাপ্লিকেশন/টুলের সঙ্গে শেয়ারিং | সাধারণত শেয়ার করা হয় না | অন্যান্য অ্যাপ্লিকেশন বা টুলের সঙ্গে শেয়ার করা যেতে পারে |
সারাংশ
Managed এবং External Table এর মধ্যে প্রধান পার্থক্য হল ডেটার মালিকানা এবং ব্যবস্থাপনা। Managed Table-এ Impala ডেটা এবং মেটাডেটার পুরোপুরি মালিকানা রাখে, যেখানে External Table-এ ডেটা বাহ্যিক সিস্টেমে সঞ্চিত থাকে এবং Impala কেবলমাত্র ডেটার রেফারেন্স ধরে রাখে। এই দুই ধরনের টেবিলের উপযুক্ত ব্যবহার নিশ্চিত করে ডেটা ম্যানেজমেন্ট এবং বিশ্লেষণ কার্যক্রম আরও দক্ষ এবং কার্যকর হয়।
Impala তে ডেটা সংরক্ষণ এবং সংগঠন করার জন্য Partitioning এবং Bucketing দুটি গুরুত্বপূর্ণ কৌশল ব্যবহার করা হয়। এই দুটি কৌশল ডেটা প্রক্রিয়াকরণে দক্ষতা এবং গতি বৃদ্ধি করতে সাহায্য করে। Impala এর Partitioned এবং Bucketed টেবিল ডিজাইন ডেটার উপর কার্যকরী অপারেশন সম্পাদন করতে সহায়তা করে, বিশেষ করে বড় ডেটা সেটের ক্ষেত্রে।
Partitioned Table Design
১. Partitioning কী?
Partitioning একটি পদ্ধতি যার মাধ্যমে একটি টেবিলের ডেটা ভিন্ন অংশে ভাগ করা হয়, যা Partition Columns এর ভিত্তিতে হয়। প্রতি পার্টিশন একটি পৃথক ফোল্ডারে সংরক্ষিত হয় এবং এটি হাডুপ ফাইল সিস্টেম (HDFS) এ পার্টিশন ডিরেক্টরি হিসেবে রাখা হয়। এইভাবে, ডেটা সঞ্চয় এবং রিডিংয়ের সময় প্রতিটি পার্টিশনের উপর নির্দিষ্ট কোয়েরি চালানো সম্ভব হয়, যা কোয়েরির গতি বাড়ায়।
২. Partitioned Table তৈরি করা
Impala তে একটি টেবিল Partition করতে হলে, টেবিলের স্কিমা ডিজাইন করার সময় PARTITIONED BY ক্লজ ব্যবহার করতে হয়।
উদাহরণ:
CREATE TABLE sales (
sale_id INT,
sale_date DATE,
amount DECIMAL(10, 2)
)
PARTITIONED BY (sale_year INT, sale_month INT)
STORED AS PARQUET;
এখানে, sale_year এবং sale_month এর ভিত্তিতে টেবিলটি পার্টিশন হবে, যার ফলে ডেটার ভলিউম অনেক কম হবে এবং কোয়েরি পারফরম্যান্স অনেক ভালো হবে যখন সেগুলি নির্দিষ্ট সময়ের জন্য চালানো হয়।
৩. Partitioning এর সুবিধা
- ডেটা সিলেকশন: পার্টিশনিংয়ের মাধ্যমে নির্দিষ্ট পার্টিশনটি এক্সেস করা সহজ হয়, যার ফলে কোয়েরি গতি অনেক বৃদ্ধি পায়।
- ফাস্ট লোডিং: বড় ডেটা লোড করার সময় নির্দিষ্ট পার্টিশনে ডেটা সংরক্ষণ করা হয়, যা লোডিং প্রক্রিয়া দ্রুত করে।
- ডেটা ম্যানেজমেন্ট: পার্টিশনিংয়ের মাধ্যমে ডেটা ম্যানেজমেন্ট সহজ হয়, যেমন পার্টিশন ভিত্তিক ডেটা আর্কাইভ বা ডিলিট করা।
Bucketed Table Design
১. Bucketing কী?
Bucketing একটি পদ্ধতি যেখানে টেবিলের ডেটাকে Bucket Columns ব্যবহার করে একাধিক বাকেট-এ ভাগ করা হয়। প্রতিটি বাকেট একটি পৃথক ফাইল হিসেবে সংরক্ষিত হয় এবং সেগুলিকে সিলেক্ট করার জন্য একটি হ্যাশিং পদ্ধতি ব্যবহার করা হয়। Bucketing সাধারণত তখন ব্যবহার করা হয় যখন ডেটার খুব ভালোভাবে সোজাসুজি বিভাজন (even distribution) প্রয়োজন হয়।
২. Bucketed Table তৈরি করা
Impala তে একটি টেবিল Bucketing করতে হলে, টেবিল তৈরি করার সময় CLUSTERED BY ক্লজ ব্যবহার করতে হয়।
উদাহরণ:
CREATE TABLE employee (
emp_id INT,
emp_name STRING,
department STRING
)
CLUSTERED BY (emp_id) INTO 10 BUCKETS
STORED AS PARQUET;
এখানে, emp_id কলামের উপর হ্যাশিং করে ১০টি বাকেটে ডেটা ভাগ করা হবে। এই পদ্ধতি ডেটা সংরক্ষণকে আরও সুষম এবং ইফিসিয়েন্ট (efficient) করে তোলে।
৩. Bucketing এর সুবিধা
- ইফিসিয়েন্ট জয়ন (Efficient Joins): Bucketing ডেটা এক্সেসের জন্য উপযুক্ত যখন বিভিন্ন টেবিলের মধ্যে জয়ন করতে হয়। একটি সঠিকভাবে bucketed টেবিল দ্রুত জয়ন করতে সহায়তা করে।
- ডেটার সমান বিভাজন: Bucketing দ্বারা ডেটা সমানভাবে ভাগ করা হয়, যা কোয়েরি প্রসেসিংয়ে ইফিসিয়েন্সি এনে দেয়।
- ডেটা রিডিং: কোয়েরি চলাকালে নির্দিষ্ট বাকেটের ডেটা এক্সেস করা সহজ হয়, যার ফলে রিডিং গতি বৃদ্ধি পায়।
Partitioned এবং Bucketed Table এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Partitioned Table | Bucketed Table |
|---|---|---|
| ভাগ করার ভিত্তি | ডেটাকে বিভিন্ন পার্টিশন কলাম দ্বারা ভাগ করা হয় | ডেটাকে বিভিন্ন বাকেট কলাম দ্বারা ভাগ করা হয় |
| ডেটা এক্সেস | নির্দিষ্ট পার্টিশন থেকে ডেটা এক্সেস করা হয় | নির্দিষ্ট বাকেট থেকে ডেটা এক্সেস করা হয় |
| পারফরম্যান্স | পার্টিশনিং কোয়েরির গতি বাড়ায়, বিশেষ করে টাইম-সিরিজ ডেটায় | Bucketing কোয়েরির গতি বাড়ায়, বিশেষ করে জয়ন অপারেশনে |
| ব্যবহার | সাধারণত সময়ভিত্তিক বা লজিক্যাল পার্টিশনিং এর জন্য ব্যবহৃত | একে অপরের সাথে জয়ন বা সমান ভাবে ডেটা ভাগ করার জন্য ব্যবহৃত |
| স্টোরেজ | পার্টিশন একটি আলাদা ডিরেক্টরিতে থাকে | প্রতিটি বাকেট একটি আলাদা ফাইল হিসেবে থাকে |
পার্টিশন এবং বাকেটিং এর একত্রিত ব্যবহার
Impala তে আপনি একই টেবিলকে Partitioned এবং Bucketed দুটি পদ্ধতি একসাথে ব্যবহার করতে পারেন। এইভাবে, আপনি ডেটাকে পার্টিশন করে রাখতে পারেন এবং প্রতিটি পার্টিশনের মধ্যে আরও ভালোভাবে Bucketing করতে পারেন। এতে ডেটা সিলেকশন এবং এক্সিকিউশন গতি আরও বৃদ্ধি পায়।
উদাহরণ:
CREATE TABLE sales (
sale_id INT,
sale_date DATE,
amount DECIMAL(10, 2)
)
PARTITIONED BY (sale_year INT)
CLUSTERED BY (sale_id) INTO 10 BUCKETS
STORED AS PARQUET;
এখানে, প্রথমে sale_year দ্বারা পার্টিশন করা হয়েছে এবং তারপর sale_id দ্বারা বাকি ডেটাকে ১০টি বাকেটে ভাগ করা হয়েছে।
এভাবে Impala তে Partitioned এবং Bucketed টেবিল ডিজাইন করে আপনি ডেটার সঞ্চয় এবং এক্সিকিউশন গতি আরও বৃদ্ধি করতে পারেন, যা বড় ডেটা সেটের বিশ্লেষণে অত্যন্ত কার্যকরী।
Read more