Apache Avro, Schema Evolution va Katta to'rtlik (CSV, JSON, Parquet, Avro) tahlili
10-sinf BI va Machine Learning 2-hafta · 5-darsZich ikkilik (dense binary) qatorli format va nega u JSON'dan 5 barobar ixchamligi.
Sxema evolyutsiyasi: yangi ustunlar qo'shilganda tizimning uzluksiz ishlash siri.
CSV vs JSON vs Parquet vs Avro — qachon qaysi formatni tanlash mezonlari.
Qatorga asoslangan, o'ta ixcham ikkilik serializatsiya tizimi
{"id": 1, "user_id": 9942, "summa": 50000}
{"id": 2, "user_id": 9943, "summa": 12000}
{"id": 3, "user_id": 9944, "summa": 85000}
Har bir qatorda "id", "user_id", "summa" so'zlari million marta takrorlanadi! Tarmoq trafigi behuda to'ladi.
Sxema faqat bir marta (Header'da yoki Schema Registry'da) saqlanadi. Qatorlarda esa faqat zich ikkilik baytlar uzatiladi!
Natijada tarmoq orqali yuboriladigan hajm 70–80% ga qisqaradi.
Dasturlar yangilanganda ma'lumotlar oqimini to'xtatmaslik san'ati
Yangi sxema yordamida eski yozuvlarni o'qish mumkin. Yangi maydonga default qiymat berilsa yetarli.
Eski sxema yordamida yangi yozuvlarni o'qish mumkin. Yangi maydonlar e'tiborsiz qoldiriladi.
Ham backward, ham forward moslik. Tizimning istalgan versiyasi istalgan ma'lumotni xatosiz o'qiydi.
CSV, JSON, Parquet va Avro — qachon qaysi birini ishlatamiz?
Turi: Satrli matn
Sxema: Yo'q
Afzalligi: Oddiy, Excel'da ochiladi
Kichik eksportlar uchun
Turi: Satrli nested
Sxema: Ixtiyoriy
Afzalligi: Web va API standarti
Konfiguratsiya va loglar
Turi: Ustunli binary
Sxema: Qat'iy ichki
Afzalligi: Analitika, Pushdown
DWH, Data Lake (Silver/Gold)
Turi: Satrli binary
Sxema: JSON sxema
Afzalligi: Tez yozish, Evolution
Kafka, Streaming, Ingestion
Fastavro kutubxonasi yordamida sxema tuzish va saqlash
import fastavro
# 1. Sxemani JSON formatida tavsiflaymiz
schema = {
'doc': 'Maktab oquvchilari baholari',
'name': 'OquvchiBaho',
'namespace': 'uz.maktab.bi',
'type': 'record',
'fields': [
{'name': 'id', 'type': 'int'},
{'name': 'ism', 'type': 'string'},
{'name': 'baho', 'type': 'int'},
# Ixtiyoriy maydon (Schema Evolution uchun default shart!)
{'name': 'izoh', 'type': ['null', 'string'], 'default': None}
]
}
parsed_schema = fastavro.parse_schema(schema)
# 2. Saqlash uchun ma'lumotlar
records = [
{'id': 1, 'ism': 'Ali Aliyev', 'baho': 95, 'izoh': "A'lo"},
{'id': 2, 'ism': 'Vali Valiyev', 'baho': 82, 'izoh': None}
]
# 3. Faylga yozamiz (Snappy siqish bilan)
with open('data/oquvchilar.avro', 'wb') as out:
fastavro.writer(out, parsed_schema, records, codec='snappy')
# 4. Faylni o'qiymiz
with open('data/oquvchilar.avro', 'rb') as f:
reader = fastavro.reader(f)
print("Sxema:", reader.writer_schema['name'])
for r in reader:
print(r['ism'], "->", r['baho'])
Bosing va bilib oling
Yangi ustun qo'shilganda yoki eskilari o'chirilganda, eski va yangi dasturlar o'rtasidagi uzluksiz moslikni ta'minlash qobiliyati.
Bosing va bilib oling
Kafka ekotizimida barcha Avro sxemalarini markaziy saqlovchi server. Xabarlarda faqat 4 baytlik ID raqam yuboriladi.
Nima uchun Apache Kafka va real-time oqimlarida Parquet o'rniga Avro formati keng qo'llaniladi?
5 ta maydondan iborat Avro sxemasini JSON formatida yozing va sintaksisini tekshiring.
10 daqiqa10 000 ta yozuvni JSON va Avro formatida saqlab, hajm farqini konsolga chiqaring.
15 daqiqaMavjud Avro faylini yangi ixtiyoriy maydon qo'shilgan yangi sxema bilan o'qib, moslikni isbotlang.
20 daqiqa