§

تنسيق استعلامات SQL

اللهجة
المسافة البادئة
حالة الكلمات المفتاحية
سطر جديد قبل الجملة
§

الصق SQL

§

SQL المُنسَّق

تعتمد فرق هندسة البيانات في كريم دبي مُنسِّق SQL معيارًا مدمجًا في خطوط dbt لضمان توحيد أسلوب الاستعلامات قبل إدراجها في مستودع BigQuery. حين يعمل مهندس بيانات على نموذج CTE يمتد لمئتي سطر ثم يلصقه زميل آخر في سطر واحد، تتضخم الفروق بالضوضاء وتختفي التغييرات الجوهرية. تُنسِّق Talabat Kuwait استعلاماتها على BigQuery بمساعدة sql-formatter قبل كل commit لتبقى مراجعات الكود محصورة في التغييرات المنطقية دون تشويش المسافات. وفي Vezeeta القاهرة تُعدّ قاعدة PostgreSQL مرجعًا للبيانات الصحية؛ يُجري الفريق اختبارات dbt ويُنسِّق الاستعلامات تلقائيًا قبل كل عملية دفع لضمان قراءة السجلات الطبية في الفروق بوضوح تام.

كيف يعمل تنسيق SQL

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

  1. اختر اللهجة. علامات الاقتباس الخلفية في MySQL، وإسقاطات :: في PostgreSQL، ومسارات الجداول المنقّطة في BigQuery، ومعرّفات الأقواس المربعة في T-SQL — كلٌّ منها يحتاج إلى محلل مُعجمي يعرفها. يختار محدد اللهجة القواعد المُطبَّقة.
  2. تحليل الإدخال معجميًا. يُقسِّم المُنسِّق الاستعلام إلى تدفق من الرموز: كلمات مفتاحية (SELECT، JOIN)، ومعرّفات، وقيم حرفية، وعوامل، وأقواس، وتعليقات. تُمرَّر القيم الحرفية للسلاسل والمعرّفات المقتبسة دون تعديل للحفاظ على صحة بناء الجملة الخاص باللهجة.
  3. تطبيق قواعد التخطيط. جمل المستوى الأعلى (SELECT، FROM، WHERE، GROUP BY، ORDER BY) تبدأ في سطرها الخاص. كل تعبير مفصول بفاصلة في قائمة التحديد وقوائم الأعمدة يحصل على سطر مُبادَر بالمسافة البادئة المختارة.
  4. تطبيق حالة الكلمات المفتاحية. يُعيد تبديل حالة الكلمات المفتاحية كتابة الكلمات المفتاحية المعروفة إلى حالة كبيرة أو صغيرة أو يحافظ على الحالة الأصلية للإدخال. المعرّفات لا تُمسّ أبدًا — تظل أسماء الأعمدة والجداول كما كُتبت.
  5. إصدار السلسلة المُنسَّقة. يُدمج تدفق الرموز مجددًا في سلسلة واحدة مع حرف المسافة البادئة (مسافتان، 4 مسافات، أو جدولة) وقاعدة السطر الجديد المُهيَّأة. يُعيد الوضع المباشر تشغيل خط الأنابيب كاملًا مع تأخير 200 مللي ثانية أثناء الكتابة.

لماذا تطبع SQL بشكل مرتب

  • قابلية قراءة فروق طلبات السحب. تحويل CTE من 200 سطر إلى سطر واحد يُحيل مراجعة الكود إلى لعبة تخمين. يُبقي التنسيق المتسق الفرق محصورًا في التغيير الذي أجريته فعلًا — عمود جديد، أو JOIN إضافي، أو شرط WHERE مختلف — ليتمكن المراجع من رؤيته دون فكّ تشابك المسافات.
  • تصحيح أخطاء أسهل. حين يُعيد استعلام عدد صفوف خاطئًا، أول ما تفعله هو قراءته سطرًا بسطر. يضع SQL المُنسَّق كل JOIN في سطره ويُصطفّ شروط WHERE لتبرز AND المفقودة أو OR المتسللة بنظرة واحدة.
  • أسلوب فريق متسق. تعتمد معظم الفرق دليلًا لأسلوب SQL (dbt Labs وGitLab وMode Analytics تنشر أدلتها الخاصة) وتريد كل استعلام مُودَع أن يتبعه. المُنسِّق الذي يُشغَّل قبل الإيداع يُزيل النقاش حول الأسلوب من المراجعة ولا يُبقي سوى المنطق للمناقشة.
  • مشاركة SQL في التوثيق. كتيبات التشغيل ومراجعات الحوادث ومستندات Notion تستفيد جميعها من SQL يُقرأ من أعلى إلى أسفل. يُلصق SQL المُنسَّق بنظافة في كتلة كود محاطة بأسيجة ويُطبع بشكل متوقع في مصدّرات PDF دون التفاف محرج في منتصف كلمة مفتاحية.

التطبيقات الشائعة

يظهر تنسيق SQL في هندسة التحليلات وتطوير الخلفية وعمليات التشغيل في كل مرة يجب فيها قراءة استعلام من قِبل شخص لم يكتبه.

  • هندسة التحليلات: خطّاف ما قبل الإيداع في مشروع dbt يُعيد تنسيق كل ملف نموذج لكي تبقى فروق طلبات السحب محصورة في تغييرات المنطق لا اضطراب المسافات.
  • إدارة قواعد البيانات: الصق إدخال سجل استعلام بطيء في سطر واحد، ونسِّقه، وتتبّع ترتيب الصلة أثناء كتابة مراجعة الحادثة.
  • التوثيق: خذ استعلامًا من Looker explore أو Tableau workbook، ونسِّقه لكتيب تشغيل، وأدرجه كمثال قابل للنسخ واللصق لدورة المناوبة.

مثال عملي

الصق SELECT u.id,u.email,COUNT(o.id) FROM users u LEFT JOIN orders o ON o.user_id=u.id WHERE u.created_at > '2024-01-01' GROUP BY u.id,u.email ORDER BY u.id; في جزء الإدخال مع ضبط اللهجة على PostgreSQL والمسافة البادئة مسافتان وحالة الكلمات المفتاحية UPPER. يضع الناتج SELECT وFROM وLEFT JOIN وWHERE وGROUP BY وORDER BY كل واحدة في سطرها؛ كل عمود في قائمة التحديد وقائمة التجميع يحصل على سطر مُبادَر؛ وشرط ON يقع عميقًا بمسافة بادئة واحدة أكثر من كلمة JOIN التي ينتمي إليها.

FAQ

ما لهجات SQL المدعومة؟

تغطي القائمة المنسدلة للهجة: SQL القياسي، MySQL، PostgreSQL، SQLite، MariaDB، Transact-SQL (SQL Server / Azure SQL)، BigQuery، Snowflake، وRedshift. تتعرف مكتبة sql-formatter الأساسية أيضًا على DuckDB وSpark SQL وHive وTrino وDb2 وN1QL وPL/SQL وClickHouse وTiDB وSingleStoreDB — اختيار أقرب لهجة يُنتج ناتجًا معقولًا حتى حين لا تكون البيئة الهدف الدقيقة في القائمة. المعرّفات والقيم الحرفية للسلاسل والعوامل الخاصة باللهجة (PostgreSQL @>، بادئات BigQuery SAFE.) تُحفظ كما هي.

هل تُدقِّق هذه الأداة SQL الخاص بي؟

لا. المُنسِّق مُعيد كتابة معجمي وليس مُحلِّل دلالي. يُحلِّل المُدخَل معجميًا ويُطبِّق قواعد التخطيط ويُصدر النتيجة؛ لا يتحقق مما إذا كان الاستعلام صحيحًا دلاليًا أو ما إذا كانت الجداول المُشار إليها موجودة أو ما إذا كانت البنية قانونية في اللهجة المختارة. شغِّل الناتج المُنسَّق في قاعدة البيانات الفعلية (أو في محلل SQL مثل SQLFluff) للحصول على فحص صحة حقيقي.

لماذا تُحوَّل كلماتي المفتاحية إلى حروف كبيرة؟

حالة الكلمة المفتاحية في القائمة المنسدلة تُعيَّن افتراضيًا على UPPER، وهي الاصطلاح في معظم أدلة أسلوب SQL المنشورة (dbt Labs وMode وGitLab). بدِّل إلى lower إذا كان فريقك يكتب select / from بحروف صغيرة، أو Preserve إذا أردت أن يحتفظ الناتج بالحالة التي كتبتها. المعرّفات لا تتأثر أبدًا — فقط مجموعة الكلمات المفتاحية المعروفة تُعاد كتابتها.

هل يُرفَع استعلامي إلى أي مكان؟

لا. تعمل مكتبة sql-formatter المُدرجة داخل متصفحك، ويحدث التنسيق محليًا على جهازك، ولا يعبر نص الاستعلام الشبكة قط. الطلبات الخارجية الوحيدة التي تُجريها هذه الصفحة هي نفس طلبات التحليلات والإعلانات المشتركة التي تُجريها كل صفحة على tools.ultim8soft.com؛ نص SQL ليس جزءًا من أي منها.

يتوقف طباعة SQL بشكل مرتب عن كونها حجة أسلوبية حين يتولى المُنسِّق الأمر. تعمل الأداة بالكامل داخل متصفحك، لا يغادر الاستعلام الصفحة أبدًا، ونفس المحلل المعجمي الواعي باللهجة الذي يُشغِّل حزمة sql-formatter npm يتولى إعادة الكتابة.