الانتقال إلى الأداة
ViewCSV
الملفات تبقى على جهازك

تحويل CSV إلى Parquet

orders.csv· بيانات نموذجية15 صفًا · 8 أعمدة
أنواع القيم
تُكتب الأعمدة النصية بنوع ⁦UTF-8 STRING⁩. ومع الاكتشاف تُكتب أعمدة ⁦INT64⁩ و⁦DOUBLE⁩ و⁦BOOLEAN⁩ حيث تناسب كل القيم النوع.
orders.csv
#order_idcustomercityproductquantityunit_priceorder_datestatus
1001041عمر القحطانيتونسChair, ergonomic6144.562026-01-24refunded
2001042سارة المصريالدوحةMonitor 27"9161.362026-02-21shipped
3001043خالد الخطيبعمّانDesk lamp5170.882026-03-27shipped
4001044فاطمة الحربيدبيDesk lamp1161.162026-04-24pending
5001045نور الزهرانيعمّانNotebook A51·2026-05-02refunded
6001046هدى الدوسريالدوحةMonitor 27"2211.632026-06-17shipped
7001047 علي القحطاني عمّانCoffee beans 1kg257.052026-07-09shipped
8001048عمر المصريالدار البيضاءDesk lamp9216.892026-08-13shipped
9001049أحمد الحربيالرياضUSB-C cable5133.182026-09-01shipped
10001050يوسف الدوسريعمّانUSB-C cable4242.502026-01-22pending
11001051أحمد الشمريالقاهرةDesk lamp2217.962026-02-06refunded
12001052عمر الحسنجدةDesk lamp612.862026-03-18shipped
13001053أحمد السيددبيUSB-C cable9158.312026-04-13pending
14001054عمر الدوسريالدار البيضاءNotebook A5730.612026-05-07shipped
15001043خالد الخطيبعمّانDesk lamp5170.882026-03-27shipped

15 صفًا · 1 ملف يُكتب الملف في متصفحك بمكتبة Parquet مكتوبة بلغة JavaScript، ولا يُرفع أي شيء.

بعد فتح ملف CSV أو لصقه يكفي اختيار تنزيل Parquet. افتراضيًا يكون كل عمود من نوع ⁦STRING⁩ بترميز UTF-8 ويقبل القيمة الخالية، فتحتفظ معرّفات مثل ⁦000917⁩ بأصفارها، وتصبح الخلايا الفارغة null. ويُختار اكتشاف الأرقام وقيم ⁦true/false⁩ لكتابة أعمدة ⁦INT64⁩ و⁦DOUBLE⁩ و⁦BOOLEAN⁩ حيث تناسب كل القيم النوع. يكتب الملفَ في متصفحك برنامجُ كتابة Parquet بلغة JavaScript، ولا يُرفع أي شيء.

طريقة تحويل CSV إلى Parquet

  1. افتح ملف ⁦.csv⁩ أو ⁦.tsv⁩ أو ⁦.txt⁩، أو أفلته على الأداة، أو الصق الصفوف. راجع الجدول في المدخلات، واضبط عند الحاجة المحدِّد أو صف العناوين أو الترميز من إعدادات الاستيراد.
  2. اختر أنواع القيم والضغط، وحدِّد هل تريد كتابة النص الفارغ بقيمة ⁦null⁩، واضبط عدد الصفوف في كل مجموعة صفوف.
  3. اختر تنزيل Parquet، ثم اقرأ ملف ⁦.parquet⁩ بأداة DuckDB أو pandas أو Polars أو Spark أو أي قارئ Parquet آخر.

لتحويل ملفات كثيرة بالإعدادات نفسها، اختر دفعة واحدة: تحويل عدة ملفات. يصبح كل ملف ملف Parquet مستقلًا، وتُنزَّل الملفات معًا في ملف ZIP واحد. وفي التحويل دفعة واحدة يجب ألا يتجاوز كل ملف 25 ميغابايت.

المخطط وأنواع الأعمدة

تأتي أسماء الأعمدة من صف العناوين كما كُتبت تمامًا. يصبح العنوان الفارغ ⁦Column 3⁩ والمكرر ⁦name (2)⁩، فيكون لكل عمود Parquet اسم فريد. وكل عمود اختياري (يقبل القيمة الخالية).

إبقاء كل القيم نصًاالخيار الافتراضي. كل عمود من نوع ⁦BYTE_ARRAY⁩ موسوم بأنه سلسلة UTF-8، ويحمل كل قيمة بايتًا ببايت، بما في ذلك الأصفار في البداية و⁦1,5⁩ و⁦N/A⁩ وتنسيقات التواريخ.
الأعداد الصحيحة (مع الاكتشاف)⁦INT64⁩ إذا كانت كل القيم غير الفارغة أعدادًا صحيحة بلا أصفار في البداية، من ⁦−9,007,199,254,740,991⁩ إلى ⁦9,007,199,254,740,991⁩. والأعداد الأكبر تُبقي العمود نصًا.
الأعداد العشرية (مع الاكتشاف)⁦DOUBLE⁩ إذا كانت كل القيم أعدادًا عشرية بسيطة لا تتجاوز 15 رقمًا معنويًا، فتبقى سليمة بعد التحويل. والعمود الذي يجمع ⁦12⁩ و⁦2.5⁩ يصبح ⁦DOUBLE⁩.
true / false (مع الاكتشاف)⁦BOOLEAN⁩ إذا كانت كل القيم ⁦true⁩ أو ⁦false⁩ بأي حالة أحرف.
التواريخ والطوابع الزمنيةتبقى ⁦STRING⁩ في الوضعين، مثل ⁦2026-03-01T08:00:00Z⁩. وتُحوَّل أنواعها في محرك الاستعلام، مثل ⁦CAST(reading_at AS TIMESTAMP)⁩ في DuckDB.

في الأعمدة ذات الأنواع تكون الخلية الفارغة دائمًا null. أما في الأعمدة النصية فيحدد خيار كتابة النص الفارغ بقيمة ⁦null⁩ (المفعّل افتراضيًا) هل تصبح الخلية الفارغة null أم سلسلة فارغة ⁦""⁩.

الضغط ومجموعات الصفوف

Snappy (سريع، والخيار الشائع)طريقة الضغط الافتراضية، ويدعمها كل قارئ Parquet شائع.
Gzip (حجم أصغر)يعطي عادةً ملفًا أصغر من Snappy. وبعض القارئات الخفيفة لا تتضمن دعم gzip.
بلا ضغطدون ضغط، لتصحيح الأخطاء أو للأدوات التي لا تملك أداة فك ضغط.
عدد الصفوف في كل مجموعة صفوفالافتراضي 100 ألف، بين ألف ومليون. ولأن مساحة العمل في المتصفح تتسع لـ100 ألف صف على الأكثر، يكتب الإعداد الافتراضي مجموعة صفوف واحدة؛ واضبط قيمة أصغر للحصول على عدة مجموعات صفوف يمكن للقارئات تخطيها أو قراءتها بالتوازي.

ويسجّل الملف أيضًا في بياناته الوصفية اسم برنامج الكتابة (⁦hyparquet⁩) ومفتاح ⁦created_by_app⁩.

مشكلات شائعة في تحويل CSV إلى Parquet

  • عمود رقمي من نوع STRING. إما أن إبقاء كل القيم نصًا مختار، أو أن إحدى القيم ليست رقمًا بسيطًا، مثل ⁦1,234⁩ أو ⁦12 kg⁩ أو ⁦007⁩ أو عدد عشري من 16 رقمًا. ابحث عنها في وصف الأعمدة أو عارض CSV.
  • فقدت المعرّفات أصفارها في أداة أخرى. لا يجعل هذا المحوّل أبدًا عمودًا فيه أصفار في البداية رقميًا. فإذا تغيّرت المعرّفات، فالأرجح أن ملف CSV فُتح وحُفظ في جدول بيانات قبل التحويل؛ راجع الملف المصدر في عارض CSV.
  • البيانات كلها في عمود واحد. خُمِّن المحدِّد خطأً؛ اختره من إعدادات الاستيراد.
  • الملف أكبر من أن تعالجه هذه الأداة. يعمل التحويل إلى Parquet على ملفات حتى 25 ميغابايت و100 ألف صف و250 عمودًا ومليوني خلية. قسّم ملف CSV وحوّل الأجزاء، أو اضغط ملف CSV بصيغة gzip إذا كنت تحتاج فقط إلى ملف أصغر للتنزيل.

الحدود والخصوصية

يجب أن يُفتح ملف CSV في مساحة العمل في المتصفح: حتى 25 ميغابايت و100 ألف صف و250 عمودًا ومليوني خلية. ويُبنى ملف Parquet في الذاكرة في مرور واحد.

برنامج الكتابة هو hyparquet-writer، وهو مكتبة مكتوبة بالكامل بلغة JavaScript لا تُحمَّل إلا عند التحويل؛ فلا WebAssembly ولا خطوة على خادم. ويعمل في عامل خلفي داخل علامة التبويب هذه، فتبقى الصفحة مستجيبة ويوقفه زر إلغاء. ولا يُرسل ملف CSV أبدًا إلى أي خادم. وللحصول على ملف قاعدة بيانات قابل للاستعلام بدلًا من ذلك، استخدم CSV إلى SQLite.

مثال: قراءات مستشعرات تُقرأ من جديد بمكتبة PyArrow

قراءات أجهزة استشعار فيها معرّفات تبدأ بأصفار، وطوابع زمنية بصيغة ISO، وخلايا فارغة، وفاصلة داخل علامتي اقتباس، حُوّلت مع اكتشاف الأرقام وقيم ⁦true/false⁩ وضغط Snappy الافتراضي، ثم قُرئت بمكتبة PyArrow. أصبح temp_c من نوع ⁦DOUBLE⁩ وok من نوع ⁦BOOLEAN⁩؛ وبقي sensor_id وreading_at سلاسل نصية. ومع الخيار الافتراضي إبقاء كل القيم نصًا تكون الأعمدة الخمسة كلها ⁦string⁩ ويحتفظ ok بالقيمة ⁦TRUE⁩ كما كُتبت.

CSV
sensor_id,reading_at,temp_c,ok,site
000917,2026-03-01T08:00:00Z,21.5,true,Lab 2
000918,2026-03-01T08:05:00Z,,false,
000919,2026-03-01T08:10:00Z,-3,TRUE,"Roof, north"
Parquet (مقروء بمكتبة PyArrow)
schema:
  sensor_id: string
  reading_at: string
  temp_c: double
  ok: bool
  site: string
rows: 3, row groups: 1, compression: SNAPPY

{'sensor_id': '000917', 'reading_at': '2026-03-01T08:00:00Z', 'temp_c': 21.5, 'ok': True, 'site': 'Lab 2'}
{'sensor_id': '000918', 'reading_at': '2026-03-01T08:05:00Z', 'temp_c': None, 'ok': False, 'site': None}
{'sensor_id': '000919', 'reading_at': '2026-03-01T08:10:00Z', 'temp_c': -3.0, 'ok': True, 'site': 'Roof, north'}

أسئلة وأجوبة

هل يُرفع ملف CSV لتحويله؟

لا. تكتب ملف Parquet مكتبة JavaScript في عامل خلفي داخل علامة التبويب في متصفحك، ويُنشأ الملف المنزَّل محليًا.

لماذا لا تُكتب التواريخ بنوع DATE أو TIMESTAMP في Parquet؟

تأتي التواريخ في ملفات CSV بتنسيقات ومناطق زمنية كثيرة، وتخمينها دون تنبيه قد يزيح القيم. لذا تُكتب سلاسل نصية كما في الملف تمامًا؛ وتُحوَّل أنواعها في DuckDB أو Spark أو pandas، حيث تختار أنت التنسيق والمنطقة الزمنية.

أي طريقة ضغط أختار؟

يعمل Snappy مع كل قارئات Parquet تقريبًا. واختر gzip إذا كان حجم الملف أهم وكان قارئك يدعمه، و«بلا ضغط» لتصحيح الأخطاء فقط.

المعايير والمراجع