Incremental Import এমন একটি প্রক্রিয়া যেখানে ডেটা একবারেই সম্পূর্ণ ইম্পোর্ট না করে, বরং ধীরে ধীরে ছোট অংশে (incrementally) ডেটা ইম্পোর্ট করা হয়। এটি মূলত তখন ব্যবহৃত হয়, যখন একটি বড় ডাটাবেস থেকে ডেটা ইতিমধ্যে একবার ইম্পোর্ট করা হয়ে গেছে এবং পরবর্তী সময়ে কেবল নতুন বা আপডেট হওয়া রেকর্ডগুলোই ইম্পোর্ট করতে হয়। এই প্রক্রিয়াটি সময় ও সম্পদ সাশ্রয়ী হয়, কারণ সম্পূর্ণ ডেটাবেস পুনরায় ইম্পোর্ট না করে শুধু পরিবর্তিত বা নতুন ডেটাই ইম্পোর্ট করা হয়।
Incremental Import এর জন্য Sqoop --incremental, --check-column, এবং --last-value অপশনগুলো ব্যবহার করে। এই অপশনগুলো ব্যবহার করে আপনি নিশ্চিত করতে পারেন যে কোন ডেটা টুকরো বা রেকর্ডগুলি পরবর্তী ইম্পোর্টে অন্তর্ভুক্ত হবে।
--incremental, --check-column, --last-value এর ব্যবহার
--incremental অপশন
--incremental অপশনটি বলে দেয় যে আপনি ইনক্রিমেন্টাল ইম্পোর্ট করতে চান। এটি দুটি ভ্যালু গ্রহণ করতে পারে:
- append:
এই মোডে, নতুন রেকর্ডগুলি ইম্পোর্ট করা হয় যেগুলি পরবর্তীতে--check-columnএর ভ্যালু অনুযায়ী আপডেট বা যোগ করা হয়েছে। - lastmodified:
এই মোডে, আপনি শুধুমাত্র সেই রেকর্ডগুলিই ইম্পোর্ট করেন যেগুলি গত ইম্পোর্টের পর আপডেট বা পরিবর্তিত হয়েছে। সাধারণত এটি সময়ভিত্তিক ইম্পোর্টের জন্য ব্যবহৃত হয়, যেখানে আপনার কাছে কোনো টাইমস্ট্যাম্প কলাম থাকে।
--check-column অপশন
--check-column অপশনটি ব্যবহার করা হয় সেই কলামের নাম নির্ধারণ করতে, যা ইম্পোর্ট প্রক্রিয়ায় পরিবর্তন হওয়া বা নতুন রেকর্ড চিহ্নিত করতে ব্যবহৃত হবে। উদাহরণস্বরূপ, যদি আপনার ডাটাবেসে একটি last_updated নামক কলাম থাকে, যা রেকর্ডের শেষ পরিবর্তনের সময় সংরক্ষণ করে, তাহলে আপনি এই কলামটিকে --check-column হিসেবে ব্যবহার করতে পারেন।
--last-value অপশন
--last-value অপশনটি ব্যবহার করে আপনি আগের ইম্পোর্টের পরবর্তী ইম্পোর্টের জন্য সীমা নির্ধারণ করতে পারেন। এটি বিশেষভাবে --incremental lastmodified মোডে ব্যবহৃত হয়, যেখানে আপনি জানিয়ে দিতে পারেন যে, আগের ইম্পোর্টের পর কোন মানে ডেটা ইম্পোর্ট শুরু হবে।
উদাহরণ
ধরা যাক, আপনার একটি টেবিল রয়েছে যেখানে last_updated কলামটি রয়েছে, যা প্রতিটি রেকর্ডের সর্বশেষ আপডেট সময় ধারণ করে। আপনি আগের ইম্পোর্টের পর থেকে নতুন বা পরিবর্তিত রেকর্ডগুলি ইম্পোর্ট করতে চান। এর জন্য আপনি নিচের মতো কমান্ড ব্যবহার করতে পারেন:
sqoop import \
--connect jdbc:mysql://localhost:3306/database_name \
--username user_name --password password \
--table target_table \
--incremental lastmodified \
--check-column last_updated \
--last-value '2024-01-01 00:00:00' \
--target-dir /user/hadoop/new_data
এখানে:
- --incremental lastmodified: এটি বলছে যে আপনি ইনক্রিমেন্টাল ইম্পোর্ট করতে চান এবং নতুন বা পরিবর্তিত রেকর্ডগুলো শুধুমাত্র ইম্পোর্ট হবে, যেগুলির
last_updatedকলামটি আগের--last-valueথেকে পরবর্তী সময়ের মধ্যে পরিবর্তিত হয়েছে। - --check-column last_updated: এই কলামটি চেক করা হবে, এবং এর ভিত্তিতে Sqoop নতুন বা পরিবর্তিত রেকর্ড চিহ্নিত করবে।
- --last-value '2024-01-01 00:00:00': আগের ইম্পোর্টের পরবর্তী রেকর্ডের জন্য শুরু সময় নির্ধারণ করবে। অর্থাৎ, এই সময়ের পর পরিবর্তিত বা যোগ হওয়া রেকর্ডগুলোই ইম্পোর্ট হবে।
কেন Incremental Import প্রয়োজন?
- পারফরম্যান্স উন্নতি:
একবার ডেটা ইম্পোর্ট করার পর পুরো ডেটাবেস পুনরায় ইম্পোর্ট করার প্রয়োজন হয় না। শুধুমাত্র নতুন বা আপডেট হওয়া ডেটা ইম্পোর্ট করে সময় এবং কম্পিউটিং শক্তি বাঁচানো যায়। - স্কেলেবিলিটি:
বড় ডেটাবেস বা ডেটাসেটের জন্য এই পদ্ধতি ব্যবহার করলে ডেটা স্থানান্তরের সময় অনেকাংশে কমে আসে এবং পুরো সিস্টেমের স্কেলেবিলিটি বাড়ে। - রিয়েল-টাইম ডেটা আপডেট:
ইনক্রিমেন্টাল ইম্পোর্ট ব্যবহারের মাধ্যমে আপনি ডেটাকে রিয়েল-টাইমে আপডেট রাখতে পারেন। এটি বিশেষভাবে লাইভ ডেটা বা ফ্রিকোয়েন্টলি আপডেট হওয়া ডেটা প্রক্রিয়াকরণের ক্ষেত্রে কার্যকরী। - সংগ্রহে নির্ভুলতা:
ইনক্রিমেন্টাল ইম্পোর্টের মাধ্যমে পূর্বের ডেটা পুনরায় ইম্পোর্ট করার ঝামেলা এড়ানো যায় এবং ডেটার নির্ভুলতা ও সামঞ্জস্য বজায় থাকে।
সারাংশ
--incremental, --check-column, এবং --last-value অপশনগুলো ব্যবহৃত হয় Sqoop-এ ইনক্রিমেন্টাল ইম্পোর্ট প্রক্রিয়ায়। এগুলি ব্যবহার করে আপনি কেবল নতুন বা পরিবর্তিত ডেটা ইম্পোর্ট করতে পারেন, যা সম্পূর্ণ ডেটাবেস পুনরায় ইম্পোর্ট করার প্রয়োজনীয়তা কমিয়ে দেয়। এই প্রক্রিয়াটি বড় ডেটাসেটের ক্ষেত্রে পারফরম্যান্স বৃদ্ধি এবং সম্পদ সাশ্রয়ী হতে সাহায্য করে।
Read more