Avro Schema হল একটি গুরুত্বপূর্ণ উপাদান যা Avro সিরিয়ালাইজেশন প্রক্রিয়ায় ডেটার কাঠামো সংজ্ঞায়িত করে। স্কিমা দিয়ে আপনি নির্ধারণ করতে পারেন ডেটার ধরন, কাঠামো এবং তা কিভাবে সঞ্চয় বা ট্রান্সফার করা হবে। স্কিমা নির্ধারণের সময় JSON ফরম্যাট ব্যবহৃত হয়, যা এর সহজলভ্যতা এবং মানব-পঠনযোগ্যতা নিশ্চিত করে।
এছাড়াও, Avro স্কিমা ডেটার ভ্যালিডেশন এবং ইভোলিউশন পরিচালনা করতে সাহায্য করে। স্কিমার মাধ্যমে আপনি ডেটার গঠন এবং মান যাচাই করতে পারেন, যার ফলে ডেটার বৈধতা নিশ্চিত করা যায়।
Avro স্কিমা ডিফিনিশন (Avro Schema Definition)
Avro স্কিমা ডেটার কাঠামো (structure) এবং ডেটার ধরন (type) সংজ্ঞায়িত করে। এটি একটি JSON ফরম্যাট যা স্কিমার বিভিন্ন অংশে ভাগ হয়ে থাকে। Avro স্কিমার প্রধান উপাদানগুলো হল:
- type: এটি ডেটার ধরন (primitive type বা complex type) নির্দেশ করে। প্রধান ধরণের মধ্যে আছে
record,enum,fixed,string,int,float,boolean,nullইত্যাদি। - name: এটি একটি রেকর্ড বা এনারামের নামের জন্য ব্যবহার হয়, যা সাধারণত একটি ক্যাপিটাল লেটার দিয়ে শুরু হয়।
- fields: এটি
recordটাইপের স্কিমা বা অবজেক্টের ক্ষেত্র বা ফিল্ড নির্ধারণ করে। প্রতিটি ফিল্ডেnameএবংtypeথাকতে হয়। - default: যদি কোনো ফিল্ডের মান সরবরাহ না করা হয়, তবে একটি ডিফল্ট মান নির্ধারণ করা হয়।
উদাহরণ: একটি সাধারণ Avro স্কিমা
{
"type": "record",
"name": "Person",
"fields": [
{
"name": "name",
"type": "string"
},
{
"name": "age",
"type": "int"
},
{
"name": "email",
"type": "string",
"default": "unknown"
}
]
}
এই স্কিমাটি একটি Person রেকর্ড তৈরি করে যার তিনটি ফিল্ড আছে:
name(string টাইপ)age(int টাইপ)email(string টাইপ, যার ডিফল্ট মান "unknown")
Avro স্কিমার প্রকার (Types of Avro Schema)
Avro স্কিমা কিছু নির্দিষ্ট টাইপে বিভক্ত করা যায়। এখানে কিছু জনপ্রিয় প্রকার:
- Primitive Types:
stringintlongfloatdoublebooleanbytesnull
- Complex Types:
- Record: একটি জটিল টাইপ যা একটি অবজেক্ট বা রেকর্ডের মতো। এতে বিভিন্ন ফিল্ড বা প্রপার্টি থাকতে পারে।
- Enum: একটি ধরণের তালিকা (set) যা নির্দিষ্ট মানগুলোর মধ্যে সীমাবদ্ধ থাকে।
- Fixed: একটি নির্দিষ্ট আকারের বাইনারি ডেটা।
Avro স্কিমা ভ্যালিডেশন (Avro Schema Validation)
Avro স্কিমা ভ্যালিডেশন হল একটি প্রক্রিয়া যেখানে ডেটার সঠিকতা যাচাই করা হয় স্কিমার সাথে মেলানোর জন্য। এটি নিশ্চিত করে যে, ডেটা স্কিমা অনুযায়ী ঠিকভাবে ফরম্যাট করা হয়েছে। যদি স্কিমা এবং ডেটার মধ্যে কোনো অমিল থাকে, তবে তা অবিলম্বে ধরা পড়বে এবং একটি ত্রুটি তৈরি হবে।
স্কিমা ভ্যালিডেশন প্রক্রিয়া:
- Schema Parsing: স্কিমা ফাইলটি JSON ফরম্যাটে পাঠ করা হয় এবং এটি Avro লাইব্রেরি দ্বারা পেয়ার করা হয়।
- Schema Compatibility Check: পুরনো এবং নতুন স্কিমার মধ্যে সামঞ্জস্যতা যাচাই করা হয়, বিশেষ করে যদি স্কিমা ইভোলিউশন ঘটে থাকে।
- Data Validation: স্কিমা অনুযায়ী ডেটা ভ্যালিড করা হয় যাতে কোনো ফিল্ড মিসিং বা ভুল টাইপের না হয়।
স্কিমা ভ্যালিডেশন উদাহরণ:
ধরা যাক, একটি ডেটা অবজেক্ট পাঠানো হচ্ছে এবং এটি Avro স্কিমা অনুযায়ী যাচাই করতে হবে।
// Avro Schema Parsing Example
Schema.Parser parser = new Schema.Parser();
Schema schema = parser.parse(new File("person_schema.avsc"));
// Data Validation using Avro
DatumReader<GenericRecord> reader = new GenericDatumReader<>(schema);
DataFileReader<GenericRecord> fileReader = new DataFileReader<>(new File("person_data.avro"), reader);
while (fileReader.hasNext()) {
GenericRecord record = fileReader.next();
// Check if the record matches schema
String name = record.get("name").toString();
int age = (int) record.get("age");
System.out.println("Name: " + name + ", Age: " + age);
}
fileReader.close();
এই উদাহরণে, person_schema.avsc স্কিমার সাথে person_data.avro ফাইলের ডেটা যাচাই করা হয়েছে। যদি স্কিমা এবং ডেটার মধ্যে কোনো অমিল থাকে, তবে এটি ত্রুটি সৃষ্টি করবে।
স্কিমা ইভোলিউশন (Schema Evolution)
Avro স্কিমা ইভোলিউশন সমর্থন করে, অর্থাৎ আপনি যখন স্কিমাতে পরিবর্তন করবেন, তখন পুরনো ডেটা ত্রুটিহীনভাবে ডেসিরিয়ালাইজ করা যাবে। Avro পুরনো এবং নতুন স্কিমার মধ্যে সামঞ্জস্য পরীক্ষা করে এবং ডেটা ফরম্যাটে আগের সংস্করণের সাথে কাজ করতে সক্ষম।
স্কিমা ইভোলিউশনের কিছু প্রধান বৈশিষ্ট্য:
- Field Addition/Removal: নতুন ফিল্ড যোগ করা বা পুরনো ফিল্ড বাদ দেওয়ার পরেও ডেটা স্বাভাবিকভাবে কাজ করতে পারে।
- Field Type Change: যদি কোনো ফিল্ডের ধরন পরিবর্তন করা হয়, তবে স্কিমা ইভোলিউশন তা ম্যানেজ করতে পারে (যতটা সম্ভব সামঞ্জস্য রেখে)।
- Default Values: ফিল্ডে ডিফল্ট মান নির্ধারণ করা হলে, পরিবর্তন ঘটলেও তা স্বয়ংক্রিয়ভাবে নতুন ডেটাতে প্রয়োগ হবে।
স্কিমা ইভোলিউশন উদাহরণ:
ধরা যাক, একটি পুরনো স্কিমা ছিল যেখানে email ফিল্ড ছিল না, তবে নতুন স্কিমায় এটি যুক্ত করা হয়েছে।
পুরনো স্কিমা:
{
"type": "record",
"name": "Person",
"fields": [
{
"name": "name",
"type": "string"
},
{
"name": "age",
"type": "int"
}
]
}
নতুন স্কিমা:
{
"type": "record",
"name": "Person",
"fields": [
{
"name": "name",
"type": "string"
},
{
"name": "age",
"type": "int"
},
{
"name": "email",
"type": "string",
"default": "unknown"
}
]
}
এক্ষেত্রে, email ফিল্ডটি নতুনভাবে যুক্ত করা হয়েছে এবং এটি একটি ডিফল্ট মান "unknown" দিয়েছে, যাতে পুরনো ডেটাতে এই ফিল্ডের অভাব থাকলেও কোনো ত্রুটি তৈরি না হয়।
Avro স্কিমা ডিফিনিশন এবং ভ্যালিডেশন হল ডেটার সঠিকতা এবং কাঠামো নিশ্চিত করার জন্য অপরিহার্য উপাদান। এটি ডেটার টাইপ এবং ফিল্ড গঠন নির্ধারণ করে, এবং স্কিমা ইভোলিউশন সমর্থন করে, যাতে পুরনো এবং নতুন স্কিমার মধ্যে সামঞ্জস্য বজায় থাকে। Avro এর স্কিমা যাচাই প্রক্রিয়া ডেটার মান নিশ্চিত করতে সহায়ক এবং ডিস্ট্রিবিউটেড সিস্টেমে এটি কার্যকরীভাবে কাজ করে।
Read more