┐─ تحليل الملف ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── ┌
│ المطور : مؤسسة Apache للبرمجيات
│ الفئة : بيانات
│ نوع MIME : application/vnd.apache.parquet
│ بايتات : 50415231
┘ ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── └
ما هو ملف Parquet؟
Apache Parquet هو صيغة تخزين عمودية مفتوحة المصدر طوّرتها Twitter وCloudera مجتمعتَين وتبرعتا بها لـ Apache عام 2013. على خلاف الصيغ القائمة على الصفوف (CSV، Avro)، يُخزِّن Parquet بيانات العمود الواحد معاً بدلاً من بيانات الصف الواحد معاً.
هذا التصميم يُحقق ميزتين رئيسيتين: أولاً، يُمكِّن من ضغط استثنائي لأن بيانات العمود الواحد متشابهة النوع ومتقاربة القيم. ثانياً، عند استعلام يقرأ 3 أعمدة فقط من جدول بـ 100 عمود، يقرأ Parquet تلك الأعمدة الثلاثة فقط دون لمس الباقي — فتبادل قرصي هائل.
أصبح Parquet المعيار الصناعي للتحليلات في بيئات البيانات الضخمة.
كيفية فتح ملفات Parquet
- DuckDB (ويندوز، ماك، لينكس) —
SELECT * FROM 'file.parquet'مجاني وسريع جداً - Python pandas —
pd.read_parquet('file.parquet')(يتطلبpyarrowأوfastparquet) - Apache Spark — للمعالجة الموزعة على مليارات السجلات
- AWS Athena / Google BigQuery — استعلامات SQL مباشرة على Parquet في S3/GCS
- ParquetViewer (ويندوز) — عارض رسومي مجاني
- VS Code مع إضافة Parquet Visualizer — عرض داخل المحرر
المواصفات التقنية
| الخاصية | القيمة |
|---|---|
| البايتات السحرية | 50 41 52 31 (PAR1) في البداية والنهاية |
| نوع التخزين | عمودي (Column-oriented) |
| الضغط | Snappy (افتراضي)، Gzip، LZ4، Zstd، Brotli |
| الترميز | Dictionary، RLE، Delta، PLAIN |
| المخطط | وصف ذاتي (مضمن في الملف) |
| أنواع البيانات | جميع الأنواع الأساسية + أنواع منطقية معقدة |
| الأعمدة المتداخلة | ✅ Dremel encoding |
الاستخدامات الشائعة
- بحيرات البيانات (Data Lakes): التنسيق القياسي لتخزين بيانات التحليل في S3 وAzure Data Lake وGCS
- خطوط أنابيب ETL والتحويل: تمرير البيانات المعالجة بين مراحل خط الأنابيب بكفاءة
- مخازن الميزات للتعلم الآلي: تخزين ميزات التدريب بضغط عالٍ مع استعلام سريع
- ذكاء الأعمال والتقارير: الاستعلامات التحليلية (GROUP BY، AVG، SUM) أسرع بمراحل من CSV
- Apache Iceberg / Delta Lake: صيغة التخزين الافتراضية لجداول مستودعات البيانات الحديثة
Parquet مقابل CSV مقابل Avro
| الميزة | Parquet | CSV | Avro |
|---|---|---|---|
| حجم الملف | ✅ صغير جداً | كبير | متوسط |
| الاستعلامات التحليلية | ✅ ممتازة | بطيء | متوسط |
| قابل للقراءة البشرية | ❌ | ✅ | ❌ |
| تطور المخطط | جيد | ❌ | ✅ ممتاز |
| البث في Kafka | غير مناسب | يُستخدم | ✅ |
| سهولة التبادل | متوسطة | ✅ | متوسطة |
قراءة Parquet بـ Python
import pandas as pd
import pyarrow.parquet as pq
# قراءة كاملة
df = pd.read_parquet("data.parquet")
# قراءة أعمدة محددة فقط (أسرع بكثير)
df = pd.read_parquet("data.parquet", columns=["name", "sales"])
# كتابة ملف Parquet مضغوط
df.to_parquet("output.parquet", compression="snappy", index=False)
# الاستعلام مباشرة بـ DuckDB
import duckdb
result = duckdb.sql("SELECT AVG(sales) FROM 'data.parquet' WHERE year = 2024").df()