تخطَّ إلى المحتوى
ططارق الوليديAI Developer Tools Directory
D

DuckDB

نشط ومستقريعمل محلياً ✓بدون اشتراك API

قاعدة بيانات تحليلية مدمجة تستعلم عن ملفات CSV وParquet وJSON مباشرةً باستخدام SQL، دون تشغيل خادم مستقل.

$pip install duckdb
💡

الاستخدام المثالي لهذه الأداة

تناسب المحلل أو المطور أو الفريق الصغير عندما يحتاج إلى فحص ملفات بيانات كبيرة وربطها وإعادة تشغيل التحليل محليًا. تضيف SQL قابلًا للحفظ والمراجعة دون إعداد خادم. لا تناسب قاعدة معاملات متعددة المستخدمين تحتاج عمليات كتابة صغيرة ومتزامنة من عمليات كثيرة.

التفاصيل والميزات المصورة

إذا كانت بياناتك موزعة بين ملفات CSV وParquet وJSON، فغالبًا تبدأ كل عملية تحليل بنقلها إلى Excel أو استيرادها إلى قاعدة بيانات وتشغيل خادم. DuckDB يختصر هذه الطبقة: قاعدة بيانات تحليلية تعمل داخل جهازك أو تطبيقك، وتستطيع الاستعلام عن الملفات مباشرة بلغة SQL. فائدتها العملية أنك تبدأ من الملف الموجود، تنفذ التصفية والتجميع والربط، ثم تحفظ النتيجة أو تصدرها دون تجهيز خدمة مركزية.

🧭 ما DuckDB؟

DuckDB نظام إدارة قواعد بيانات تحليلي مدمج in-process؛ أي أنه يعمل داخل البرنامج أو العملية نفسها بدل تشغيل خادم مستقل. يتوفر كتطبيق سطر أوامر، وكمكتبة لـPython وR وJava وGo وNode.js وRust وWebAssembly وغيرها. صُمم للأحمال التحليلية التي تقرأ عددًا كبيرًا من الصفوف وتنفذ تجميعات وربط جداول، وليس ليكون قاعدة معاملات ويب تستقبل آلاف التحديثات الصغيرة المتزامنة.

يمكنه العمل في الذاكرة لجلسة مؤقتة، أو حفظ قاعدة كاملة في ملف واحد مثل analysis.duckdb. كما يستطيع قراءة CSV وParquet وJSON مباشرة، ويمكنه الاستعلام عن DataFrames في Python وR دون إنشاء خادم قاعدة بيانات.

رسم يوضح انتقال ملفات CSV وParquet وJSON إلى DuckDB ثم نتائج SQL
رسم يوضح انتقال ملفات CSV وParquet وJSON إلى DuckDB ثم نتائج SQL

رسم توضيحي أصلي لطريقة عمل DuckDB، وليس لقطة من واجهة المنتج.

🎯 كيف سيفيدك؟

تخيل أنك تريد تحليل ملف مواعيد كبير مع ملف منفصل للفروع والمعالجين. بالطريقة اليدوية قد تستورد الملفات إلى برنامج جداول، تنظف الأعمدة، تنشئ صيغًا أو Pivot Tables، ثم تعيد العملية عند وصول نسخة جديدة. مع DuckDB تستطيع إبقاء الملفات كما هي وكتابة استعلام واضح يربطها ويحسب عدد المواعيد والإيراد ونسبة الإلغاء لكل فرع.

القيمة المضافة هنا ليست مجرد السرعة؛ بل أن خطوات التحليل تصبح نص SQL قابلًا للحفظ والمراجعة وإعادة التشغيل. هذا يناسب الفرد أو الفريق الصغير الذي يحتاج تحليلًا متكررًا دون تكلفة خادم. ولا يناسب من يحتاج نظام معاملات متعدد المستخدمين مع كتابة متزامنة من عمليات كثيرة؛ عندها استخدم PostgreSQL أو قاعدة خادم مناسبة، ويمكن إبقاء DuckDB للتحليل.

🌟 الميزات والقدرات الرئيسية

1. استعلام مباشر عن الملفات دون استيراد مسبق

يقرأ DuckDB ملفات CSV وParquet وJSON من عبارة FROM نفسها. في أبسط حالة تستطيع كتابة:

SELECT branch, count(*) AS appointments
FROM 'appointments.parquet'
GROUP BY branch
ORDER BY appointments DESC;
  • أين تجدها: في CLI أو أي عميل DuckDB مثل Python.
  • كيف تستخدمها: ضع مسار الملف داخل الاستعلام، ثم طبّق WHERE أو GROUP BY أو JOIN كأي جدول.
  • مثال توضيحي: جمع عدد المواعيد حسب الفرع من ملف Parquet.
  • الفائدة: لا تحتاج خطوة تحميل إلى قاعدة منفصلة قبل بدء التحليل.
  • ما ينبغي الانتباه إليه: يجب أن تكون الملفات موثوقة؛ نموذج أمان DuckDB يفترض أن SQL وبنية الملفات من مصدر موثوق.
استعلام SQL مباشر على ملف Parquet مع نتيجة مجمعة
استعلام SQL مباشر على ملف Parquet مع نتيجة مجمعة

رسم توضيحي للاستعلام المباشر؛ القيم المعروضة مثال وليست بيانات حقيقية.

2. تشغيل محلي مؤقت أو قاعدة دائمة في ملف واحد

تشغيل duckdb بلا اسم ملف يفتح قاعدة مؤقتة في الذاكرة. أما duckdb analysis.duckdb فيفتح أو ينشئ قاعدة دائمة. هذا يجعل التجربة بسيطة: ابدأ بتحليل سريع، ثم انتقل إلى ملف قاعدة واحد عندما تحتاج حفظ الجداول أو إعادة استخدامها.

يمكن للمطور تضمين DuckDB داخل تطبيق Python أو R أو Go أو Java أو Node.js. في Python مثلًا، تثبّت الحزمة ثم تستدعي SQL من الكود، ويمكنك الاستعلام مباشرة عن DataFrame. لا توجد خدمة منفصلة تحتاج إدارة مستخدمين أو منفذ شبكة لكي تبدأ.

  • الفائدة: نفس المحرك يعمل من الطرفية أو داخل سكربت التحليل.
  • القيد: قاعدة الملف المحلي ليست بديلًا تلقائيًا لخادم فريق متعدد الكتّاب.
واجهة CLI وPython تتصلان بقاعدة مؤقتة أو ملف DuckDB واحد
واجهة CLI وPython تتصلان بقاعدة مؤقتة أو ملف DuckDB واحد

رسم توضيحي لطرق الاتصال الرسمية؛ لا يمثل واجهة رسومية.

3. SQL تحليلي وتصدير النتائج

يدعم DuckDB استعلامات SQL تحليلية متقدمة، مثل النوافذ والتجميعات والأنواع المركبة والربط. تستطيع تحويل نتيجة الاستعلام إلى جدول داخل قاعدة DuckDB أو تصديرها إلى CSV وParquet. هذا يتيح سير عمل صغيرًا ومتكررًا: اقرأ الملفات الخام، نظف القيم، اربط الجداول، ثم صدّر ملفًا جاهزًا للتقرير أو لوحة البيانات.

مثال توضيحي:

COPY (
  SELECT branch,
         count(*) AS visits,
         sum(amount) AS revenue
  FROM 'appointments.csv'
  WHERE status = 'completed'
  GROUP BY branch
) TO 'branch-summary.parquet' (FORMAT parquet);

لا يدعي هذا المثال أن DuckDB أصلح جودة البيانات تلقائيًا. يجب عليك تعريف القيم الصحيحة، التعامل مع الفراغات والتكرار، وفحص الناتج.

4. تكاملات وإضافات مع حدود أمان واضحة

تضيف الامتدادات دعم تنسيقات وموصلات مثل Parquet وJSON وHTTP/S3. يمكن لـDuckDB تثبيت بعض الإضافات الأساسية وتحميلها تلقائيًا عند الحاجة، كما توجد إضافات مجتمعية. لكن الإضافة كود أصلي يعمل بصلاحيات عملية DuckDB، لذلك لا تثبت إضافة مجتمعية أو غير موقعة دون مراجعة مصدرها.

يوفر CLI وضعًا آمنًا -safe يمنع الوصول إلى الملفات الخارجية غير ملف قاعدة البيانات. ويمكن تعطيل الوصول الخارجي والتثبيت والتحميل التلقائي للإضافات في البيئات الحساسة. هذه الإعدادات مهمة إذا كان الاستعلام مصدره مستخدم آخر أو وكيل ذكاء اصطناعي.

حدود الأمان بين الملفات الموثوقة وDuckDB والإضافات والوصول الخارجي
حدود الأمان بين الملفات الموثوقة وDuckDB والإضافات والوصول الخارجي

رسم توضيحي لنموذج الصلاحيات؛ لا يغني عن عزل نظام التشغيل عند تنفيذ SQL غير موثوق.

🪜 مثال عملي خطوة بخطوة

مثال توضيحي لم أنفذه على بياناتك: لديك appointments.csv وtherapists.csv وتريد تقريرًا شهريًا.

  1. ثبّت عميل Python داخل بيئة افتراضية: pip install duckdb.
  2. افتح Python أو Notebook واستورد الحزمة.
  3. افحص عينة صغيرة من الملف قبل التحليل الكامل.
  4. اكتب استعلامًا يقرأ المواعيد ويربطها بملف المعالجين عبر معرّف ثابت.
  5. أضف قواعد واضحة للحالات الملغاة والمبالغ المفقودة بدل تركها للتخمين.
  6. نفّذ تجميعًا حسب الشهر والفرع والمعالج.
  7. راجع المجاميع مقابل عينة أو مصدر مالي مستقل.
  8. صدّر النتيجة إلى Parquet أو CSV، واحتفظ باستعلام SQL بجوار التقرير لإعادة تشغيله عند وصول ملف جديد.

مثال Python بسيط:

import duckdb

result = duckdb.sql("""
    SELECT branch, count(*) AS completed_visits
    FROM 'appointments.csv'
    WHERE status = 'completed'
    GROUP BY branch
    ORDER BY completed_visits DESC
""")

result.show()

⚖️ ماذا تضيف مقارنة بالطريقة اليدوية؟

عمل يدوي في ملفات الجداولباستخدام DuckDB
تستورد الملف ثم تعيد الاستيراد عند كل تحديثتستعلم عن الملف مباشرة ويمكن إعادة تشغيل SQL
خطوات التنظيف موزعة بين نقرات وصيغالقواعد مكتوبة في استعلام قابل للمراجعة
ربط ملفات كبيرة قد يصبح ثقيلًاJOIN وتجميعات مصممة لأحمال تحليلية
تحتاج خادم قاعدة لتجربة SQLتعمل محليًا في الذاكرة أو في ملف واحد
مشاركة النتيجة لا تشرح كيف أُنتجتيمكن مشاركة SQL وملف القاعدة أو الناتج

هذه مقارنة لسير العمل، وليست وعدًا بأن كل ملف سيكون أسرع أو أن النتائج صحيحة تلقائيًا.

⚙️ الإعدادات المهمة

  • الذاكرة: استخدم memory_limit لتحديد ذاكرة DuckDB عندما تعمل على جهاز مشترك أو ملف كبير.
  • المجلد المؤقت: قد يكتب DuckDB ملفات مؤقتة عند تجاوز الذاكرة؛ تأكد من وجود مساحة وموقع مناسب للبيانات الحساسة.
  • الخيوط: يتحكم threads في عدد خيوط التنفيذ.
  • الوصول الخارجي: enable_external_access يسمح بالوصول إلى الملفات والشبكة وتحميل الإضافات؛ قيّده في البيئات غير الموثوقة.
  • الإضافات: عطّل autoload_known_extensions وautoinstall_known_extensions إذا أردت اعتمادًا صريحًا لكل إضافة.
  • الوضع الآمن: استخدم duckdb -safe database.duckdb عندما تحتاج تقييد قراءة الملفات الخارجية من CLI.

🚀 التثبيت والبدء

لـPython وفق الوثائق الرسمية، يتطلب الإصدار الحالي Python 3.9 أو أحدث:

pip install duckdb

ثم تحقق:

import duckdb
print(duckdb.sql("SELECT version()"))

يتوفر CLI كملف تنفيذي واحد جاهز لـWindows وmacOS وLinux. صفحة التثبيت الرسمية تعرض الملفات المناسبة للنظام. يوجد أيضًا سكربت تثبيت رسمي، لكن راجع أي سكربت بعيد قبل تمريره إلى shell. لم أنفذ التثبيت أو المثال في هذه البطاقة.

🔗 التكاملات والتوافق

  • الأنظمة: Windows وmacOS وLinux على x86_64 وARM64 مدعومة رسميًا للبنيات الأساسية.
  • العملاء: CLI وC وC++ وGo وJava وNode.js وODBC وPython وR وRust وWebAssembly، بدرجات دعم موثقة مختلفة.
  • البيانات: CSV وJSON وParquet، مع تكاملات Arrow وPandas وdplyr، وامتدادات لمصادر أخرى.
  • التشغيل: ذاكرة مؤقتة، ملف قاعدة دائم، أو تضمين داخل تطبيق. يوجد Docker رسمي، لكنه ليس مطلوبًا للاستخدام المحلي البسيط.

تحقق من توافق نسخة العميل مع نسخة قاعدة البيانات والإضافات، خصوصًا عند مشاركة ملف DuckDB بين أجهزة أو لغات مختلفة.

💰 التكلفة والتشغيل المحلي

DuckDB مفتوح المصدر برخصة MIT ولا يتطلب اشتراكًا أو API مدفوعًا للاستخدام المحلي. يحتفظ بالبيانات في الذاكرة أو في الملفات التي تحددها. لا يرسل ملفك إلى خدمة سحابية لمجرد تنفيذ استعلام محلي.

مع ذلك، يمكن للاستعلام أن يفتح روابط HTTP/S3 أو يثبت إضافات عبر الشبكة إذا سمحت الإعدادات بذلك. لذلك «محلي» لا يعني «دون شبكة» في كل تكوين. الخدمات التجارية أو التخزين السحابي الذي تربطه بالأداة قد تكون له تكلفة وسياسة خصوصية منفصلة.

⚠️ الحدود ومتى لا تستخدمها

  • ليست الخيار الافتراضي لتطبيق معاملات متعدد المستخدمين يحتاج عمليات كتابة صغيرة ومتزامنة من عمليات كثيرة.
  • نموذج الكتابة التقليدي يركز على عملية واحدة تكتب إلى ملف القاعدة؛ يمكن لعمليات متعددة القراءة بوضع read-only. توجد خيارات أحدث مثل Quack وDuckLake، لكن لا تجعلها افتراضًا بسيطًا بلا مراجعة نضجها ومتطلباتك.
  • SQL غير الموثوق قادر على قراءة وكتابة ملفات واستهلاك CPU والذاكرة والوصول للشبكة وفق الصلاحيات؛ عامله ككود.
  • ملف CSV أو Parquet كبير أو تالف قد يستهلك موارد كثيرة. ضع حدودًا للذاكرة والوقت وافحص مصدر البيانات.
  • تحليل البيانات لا يعالج تلقائيًا أخطاء التعريفات أو التكرار أو القيم المفقودة؛ جودة النتيجة تعتمد على قواعدك والتحقق منها.

🔐 الأمان والصلاحيات

DuckDB يعمل بصلاحيات المستخدم أو التطبيق المضيف. لذلك يستطيع الاستعلام الوصول إلى الملفات التي يستطيع ذلك المستخدم الوصول إليها، وقد تتمكن الإضافات من الشبكة والنظام. لا تمنح وكيلًا أو مستخدمًا خارجيًا تنفيذ SQL حرًا على جهازك دون عزل.

للاستخدام الحساس:

  1. شغّل DuckDB بحساب محدود الصلاحيات أو داخل حاوية/VM عند التعامل مع SQL غير موثوق.
  2. استخدم -safe في CLI عندما يناسب الحالة.
  3. عطّل الوصول الخارجي والتحميل التلقائي للإضافات إن لم تكن مطلوبة.
  4. لا تفتح ملفات DuckDB أو Parquet أو CSV مجهولة المصدر على افتراض أنها مستندات آمنة.
  5. راجع مسار الملفات المؤقتة والنسخ الناتجة لأنها قد تحتوي بيانات شخصية.

📚 المصادر وتاريخ التحقق

تم التحقق في 2 أكتوبر 2026. أحدث إصدار مستقر تحققنا منه هو v1.5.6 الصادر في 28 سبتمبر 2026. عرض GitHub وقت الفحص نحو 41.9 ألف نجمة و3.8 آلاف تفرع؛ هذه مؤشرات انتشار متغيرة وليست تقييمًا للجودة أو الأمان. لم أنفذ التثبيت أو المثال على بيانات حقيقية.