Apache Sqoop-এর Incremental Import একটি শক্তিশালী ফিচার যা ডেটাবেসের বড় টেবিলের ডেটা কেবলমাত্র নতুন বা পরিবর্তিত রেকর্ডগুলোকে Hadoop সিস্টেমে ইম্পোর্ট করতে ব্যবহৃত হয়। এটি প্রধানত ডেটা ওয়্যারহাউজিং এবং লগ অ্যানালিটিক্সের ক্ষেত্রে খুবই উপকারী, যেখানে একটি বড় ডেটাবেস টেবিলের মধ্যে নিয়মিত পরিবর্তন হয় এবং আপনি শুধু নতুন ডেটা ইম্পোর্ট করতে চান।
Incremental Import কী?
Incremental Import এর মাধ্যমে, শুধুমাত্র নতুন বা পরিবর্তিত ডেটা রিলেশনাল ডাটাবেস থেকে HDFS, Hive বা HBase-এ ইম্পোর্ট করা হয়। এটি প্রথমবার ডেটা ইম্পোর্টের পরের যেকোনো আপডেট বা অ্যাডেড রেকর্ডগুলোকেও ইম্পোর্ট করতে সাহায্য করে, যাতে প্রতিবার পুরো ডেটাবেস টেবিল ইম্পোর্ট করার প্রয়োজন না পড়ে।
Incremental Import কমান্ডের গঠন
sqoop import --connect <JDBC_URL> --username <username> --password <password> --table <table_name> --target-dir <HDFS_directory> --incremental <append|lastmodified> --check-column <column_name> --last-value <last_imported_value>
এখানে:
--connect <JDBC_URL>
ডাটাবেসের JDBC URL যেখানে সংযোগ স্থাপন করা হবে (যেমন,jdbc:mysql://localhost:3306/database_name)।--username <username>
ডাটাবেস ইউজারনেম।--password <password>
ডাটাবেস ইউজারের পাসওয়ার্ড।--table <table_name>
সেই টেবিলের নাম যা থেকে ডেটা ইম্পোর্ট করা হবে।--target-dir <HDFS_directory>
HDFS অথবা Hive-এ ডেটা লেখার জন্য পাথ।--incremental <append|lastmodified>
ইনক্রিমেন্টাল ইম্পোর্টের ধরন নির্ধারণ করে। দুটি অপশন আছে:append: নতুন রেকর্ড যোগ করা হবে, অর্থাৎ যখন ডাটাবেসের টেবিলে নতুন রেকর্ড আসে, তখন সেগুলো ইম্পোর্ট হবে।lastmodified: শুধুমাত্র সেই রেকর্ডগুলো ইম্পোর্ট হবে যেগুলোর টাইমস্ট্যাম্প পরিবর্তিত হয়েছে।
--check-column <column_name>
এটি সেই কলামের নাম যা ইনক্রিমেন্টাল ইম্পোর্টের জন্য চেক করা হবে। সাধারণত এটি একটি টাইমস্ট্যাম্প কলাম হয়।--last-value <last_imported_value>
এটি ইম্পোর্টের শেষ সময়ে কী ভ্যালু ছিল তা জানায়, এবং Sqoop সেই মানের পরবর্তী রেকর্ডগুলো ইম্পোর্ট করতে শুরু করবে।
Incremental Import-এর উদাহরণ
ধরা যাক, আপনার একটি MySQL ডাটাবেসে employees নামে একটি টেবিল রয়েছে এবং আপনি শুধুমাত্র সেই রেকর্ডগুলো ইম্পোর্ট করতে চান যেগুলো শেষ ইম্পোর্টের পর আপডেট বা নতুন যোগ করা হয়েছে। এই ক্ষেত্রে, আপনি lastmodified ইনক্রিমেন্টাল ফিচারটি ব্যবহার করবেন এবং একটি টাইমস্ট্যাম্প কলাম last_updated দিয়ে চেক করবেন।
কমান্ড:
sqoop import --connect jdbc:mysql://localhost:3306/employees_db --username root --password password --table employees --target-dir /user/hadoop/employees_data --incremental lastmodified --check-column last_updated --last-value '2024-01-01 00:00:00'
এই কমান্ডটি নিম্নলিখিতভাবে কাজ করবে:
--incremental lastmodified: শুধু সেই রেকর্ডগুলো ইম্পোর্ট হবে যেগুলোরlast_updatedকলাম পরিবর্তিত হয়েছে।--check-column last_updated:last_updatedকলামটি চেক করা হবে।--last-value '2024-01-01 00:00:00': ইম্পোর্টের শেষ সময় ছিল2024-01-01 00:00:00, এর পরের সমস্ত নতুন বা আপডেট হওয়া রেকর্ড ইম্পোর্ট হবে।
Incremental Import-এর দুটি মেথড
Append Method (
--incremental append)
এই পদ্ধতিতে নতুন রেকর্ডগুলো কেবলমাত্র ইনপুট করা হয়, পুরানো রেকর্ড পুনরায় ইম্পোর্ট করা হয় না। এটি তখন ব্যবহৃত হয় যখন টেবিলের রেকর্ড সন্নিবেশ (insert) করা হয়।কমান্ড:
sqoop import --connect jdbc:mysql://localhost:3306/employees_db --username root --password password --table employees --target-dir /user/hadoop/employees_data --incremental append --check-column emp_id --last-value 1001Lastmodified Method (
--incremental lastmodified)
এই পদ্ধতিতেlastmodifiedটাইমস্ট্যাম্প কলামের পরিবর্তনের ওপর ভিত্তি করে রেকর্ড ইম্পোর্ট করা হয়। এটি সেই সময়ে ব্যবহৃত হয় যখন টেবিলের রেকর্ড আপডেট করা হয়।কমান্ড:
sqoop import --connect jdbc:mysql://localhost:3306/employees_db --username root --password password --table employees --target-dir /user/hadoop/employees_data --incremental lastmodified --check-column last_updated --last-value '2024-01-01 00:00:00'
সারাংশ
Sqoop-এর Incremental Import কমান্ড নতুন বা পরিবর্তিত রেকর্ডগুলো ইম্পোর্ট করার জন্য ব্যবহৃত হয়, যা সম্পূর্ণ ডেটাবেস টেবিল ইম্পোর্টের প্রয়োজনীয়তা কমিয়ে দেয়। এটি append বা lastmodified পদ্ধতির মাধ্যমে কার্যকরভাবে পরিচালনা করা যায়। --check-column এবং --last-value অপশনগুলো ব্যবহার করে শুধু নতুন বা পরিবর্তিত রেকর্ডগুলো হ্যান্ডেল করা সম্ভব।
Read more