Row group — ustunli fayl yoki analitik saqlash formatida ma’lum miqdordagi ketma-ket satrlarni bir fizik boshqaruv birligiga birlashtiruvchi bo‘limdir. Row group ichida har ustunning qiymatlari alohida column chunk sifatida saqlanadi. Shu tuzilma bir tomondan satrlar oralig‘ini, ikkinchi tomondan kerakli ustunlarni tanlab o‘qishga imkon beradi. Parquet va o‘xshash formatlarda u siqish, statistika va parallel skan rejasining asosiy chegaralaridan biridir.
Ichki tashkil etish
Masalan, jadvalda yuz million satr bo‘lsa, fayl ularni har biri bir million satrdan iborat row grouplarga ajratishi mumkin. Birinchi guruhdagi id, date va amount qiymatlari uchta alohida ustun bo‘lagida turadi, ammo ularning satr pozitsiyalari bir-biriga mos keladi. So‘rov date va amountni talab qilsa, id chunkini o‘qimasligi mumkin.
Column chunk keyinchalik sahifalarga bo‘linadi. Sahifa encoding, compression va nazorat summasining kichikroq birligi bo‘lishi mumkin. Row group metadata esa ustun turi, joylashuvi, siqilgan hajmi, qiymatlar soni va statistikalarni ko‘rsatadi.
Data skipping
Har row group uchun ustun minimumi va maksimumi saqlansa, date >= '2026-07-01' predikatiga mos kelmaydigan guruhlar ochilmaydi. Null soni, distinct taxmini yoki Bloom filter ham qarorni yaxshilashi mumkin. Bu imkoniyat ma’lumot yozilishdan oldin foydali tartibda saralangan bo‘lsa kuchliroq ishlaydi. Tasodifiy aralash sana qiymatlarida har guruhning minimum–maksimum oralig‘i keng bo‘lib, deyarli hech biri chetlanmaydi.
Statistika xavfsiz talqin qilinishi kerak. Kesilgan satr prefiksi, NaN qiymati, kollatsiya yoki eski yozuvchi xatosi noto‘g‘ri pruningga sabab bo‘lmasligi lozim. Dvigatel ishonchsiz statistikani optimizatsiya uchun ishlatmasdan, ma’lumotni o‘qib tekshirishi afzal.
Hajm tanlovi
Katta row group ko‘proq qiymatni birga ko‘rib, dictionary va umumiy kompressiyadan yaxshiroq foyda oladi. Metadata ulushi kamayadi va ketma-ket analitik skan samarali bo‘ladi. Biroq selektiv so‘rov bir nechta satr uchun katta chunkni o‘qishi, yozuvchi esa ko‘proq xotira yig‘ishi mumkin.
Kichik guruh pruning va parallelizmni mayda boshqaradi, lekin ko‘p metadata, ko‘p seek va kichik siqish bloklari hosil qiladi. Juda ko‘p mayda fayl bilan birga bu rejalashtirish yukini keskin oshiradi. Optimal hajm saqlash tizimining blok o‘lchami, so‘rov selektivligi, ustun kengligi va ishchi xotiraga bog‘liq.
Parallel o‘qish va yozish
So‘rov dvigateli row grouplarni workerlar orasida taqsimlashi mumkin. Guruhlar juda kam bo‘lsa, katta klaster to‘liq band bo‘lmaydi; juda ko‘p bo‘lsa, vazifa yaratish xarajati ortadi. Bir fayldagi guruhlar mustaqil o‘qilsa ham, obyekt saqlashdagi masofaviy range requestlar soni va kechikishi hisobga olinadi.
Yozuvchi row group tugaguncha statistika va lug‘at quradi, keyin metadata bilan yopadi. Faylga keyin satr qo‘shish formatga bog‘liq; ko‘p o‘zgarmas formatlarda yangi fayl yaratish odatiy. Compaction mayda fayllarni birlashtirib, row group chegaralarini qayta shakllantirishi mumkin.
Xotira va projection
Reader butun row groupni xotiraga olishga majbur emas. U tanlangan ustun sahifalarini navbat bilan dekodlab, batchlar shaklida operatorlarga uzatishi mumkin. Shunga qaramay, ko‘p ustunli keng projection, katta dictionary va murakkab nested schema peak memoryni oshiradi. Dvigatel row group hajmi, parallel tasklar va batch o‘lchamini umumiy memory limitga moslaydi; limit buzilsa spill yoki taskni kamaytirish ishlatiladi.
Bog‘liq tushunchalar
Columnar storage, Column chunk, Parquet, Predicate pushdown, Partition pruning, Dictionary encoding, Data skipping