SQL ফরম্যাটিং কীভাবে কাজ করে
SQL ফরম্যাটিং একটি লেক্সার-চালিত পুনর্লিখন প্রক্রিয়া যা কোয়েরির প্রতিটি টোকেন পরিদর্শন করে এবং নির্বাচিত ডায়ালেক্টের নিয়ম অনুযায়ী তার চারপাশে হোয়াইটস্পেস পুনরায় নির্গত করে। কোয়েরির অর্থ কখনও পরিবর্তন হয় না, শুধু বিন্যাস পরিবর্তিত হয়।
- একটি ডায়ালেক্ট বেছে নিন. MySQL ব্যাকটিক, PostgreSQL
::কাস্ট, BigQuery ডটেড টেবিল পাথ, এবং T-SQL স্কোয়ার-ব্র্যাকেট আইডেন্টিফায়ার — প্রতিটির জন্য একটি টোকেনাইজার প্রয়োজন যা সেগুলো সম্পর্কে জানে। ডায়ালেক্ট সিলেক্টর নির্ধারণ করে কোন গ্রামার প্রয়োগ হবে। - ইনপুট টোকেনাইজ করুন. ফরম্যাটার কোয়েরিটিকে টোকেনের একটি স্ট্রিমে বিভক্ত করে: কীওয়ার্ড (
SELECT,JOIN), আইডেন্টিফায়ার, লিটারেল, অপারেটর, প্যারেন্থেসিস এবং কমেন্ট। স্ট্রিং লিটারেল এবং কোটেড আইডেন্টিফায়ার অপরিবর্তিত পাস করা হয় যাতে ডায়ালেক্ট-নির্দিষ্ট সিনট্যাক্স কাজ করে। - লেআউট নিয়ম প্রয়োগ করুন. শীর্ষ-স্তরের ক্লজগুলো (
SELECT,FROM,WHERE,GROUP BY,ORDER BY) নিজস্ব লাইনে শুরু হয়। সিলেক্ট তালিকা এবং কলাম তালিকায় কমা-বিভক্ত এক্সপ্রেশনগুলো প্রতিটি একটি লাইন পায়, নির্বাচিত ইন্ডেন্ট ইউনিট দিয়ে ইন্ডেন্ট করা হয়। - কীওয়ার্ড কেস প্রয়োগ করুন. কীওয়ার্ড-কেস টগল স্বীকৃত SQL কীওয়ার্ডগুলোকে আপারকেস, লোয়ারকেস-এ পুনর্লিখন করে অথবা ইনপুট কেসিং হুবহু রাখে। আইডেন্টিফায়ার কখনও স্পর্শ করা হয় না — কলাম ও টেবিলের নাম সবসময় লেখা অনুযায়ীই থাকে।
- ফরম্যাট করা স্ট্রিং নির্গত করুন. টোকেন স্ট্রিমটি ইন্ডেন্ট অক্ষর (২ স্পেস, ৪ স্পেস বা ট্যাব) এবং কনফিগার করা লাইনব্রেক নিয়ম সহ একটি একক স্ট্রিংয়ে যুক্ত হয়। লাইভ মোড আপনি টাইপ করার সাথে সাথে ২০০ ms ডিবাউন্সে পুরো পাইপলাইন পুনরায় চালায়।
কেন SQL সুন্দরভাবে প্রিন্ট করবেন
- পুল-রিকোয়েস্ট ডিফ পাঠযোগ্যতা. একটি ২০০-লাইনের CTE এক লাইনে পুনর্লিখন করা কোড রিভিউকে অনুমানের খেলায় পরিণত করে। সামঞ্জস্যপূর্ণ ফরম্যাটিং ডিফকে আপনার আসল পরিবর্তনের মধ্যে সীমাবদ্ধ রাখে — একটি নতুন কলাম, একটি অতিরিক্ত
JOIN, একটি ভিন্নWHEREপ্রেডিকেট — যাতে রিভিউয়ার হোয়াইটস্পেস না খুলে দেখতে পারেন। - সহজ ডিবাগিং. যখন কোয়েরি ভুল রো কাউন্ট ফেরত দেয়, প্রথম কাজ হলো লাইন বাই লাইন পড়া। ফরম্যাট করা SQL প্রতিটি
JOIN-কে নিজস্ব লাইনে রাখে এবংWHEREপ্রেডিকেটগুলো সারিবদ্ধ করে যাতে একটি মিসিংANDবা বিভ্রান্তিকরORএক নজরেই ধরা পড়ে। - দলের সামঞ্জস্যপূর্ণ স্টাইল. বেশিরভাগ দল একটি SQL স্টাইল গাইড গ্রহণ করে এবং চায় প্রতিটি কমিট করা কোয়েরি সেটি অনুসরণ করুক। কমিটের আগে ফরম্যাটার চালানো রিভিউ থেকে স্টাইল বিতর্ক সরিয়ে শুধু লজিক আলোচনার জায়গা রাখে।
- ডকুমেন্টে SQL শেয়ার করা. রানবুক, ইনসিডেন্ট রেট্রো এবং Notion ডক সবই SQL থেকে উপকৃত হয় যা উপর থেকে নিচে পড়া যায়। ফরম্যাট করা SQL একটি ফেন্সড কোড ব্লকে পরিষ্কারভাবে পেস্ট হয় এবং PDF এক্সপোর্টে পূর্বানুমানযোগ্যভাবে প্রিন্ট হয়, মিড-কীওয়ার্ড লাইন র্যাপ ছাড়াই।
সাধারণ প্রয়োগ
SQL ফরম্যাটিং অ্যানালিটিক্স ইঞ্জিনিয়ারিং, ব্যাকএন্ড ডেভেলপমেন্ট এবং অপারেশন কাজ জুড়ে দেখা যায় যখনই একটি কোয়েরি এমন কেউ পড়বেন যিনি এটি লেখেননি।
- অ্যানালিটিক্স ইঞ্জিনিয়ারিং: dbt প্রজেক্টে প্রি-কমিট হুক যা প্রতিটি মডেল ফাইল পুনরায় ফরম্যাট করে যাতে PR ডিফ লজিক পরিবর্তনে সীমাবদ্ধ থাকে, হোয়াইটস্পেস চার্নে নয়।
- ডেটাবেস অ্যাডমিনিস্ট্রেশন: একটি এক-লাইন স্লো-কোয়েরি লগ এন্ট্রি পেস্ট করুন, ফরম্যাট করুন এবং ইনসিডেন্ট রেট্রো লেখার সময় জয়েন অর্ডার পরীক্ষা করুন।
- ডকুমেন্টেশন: Looker এক্সপ্লোর বা Tableau ওয়ার্কবুক থেকে কোয়েরি বের করুন, রানবুকের জন্য ফরম্যাট করুন এবং অন-কল রোটেশনের জন্য কপি-পেস্টযোগ্য উদাহরণ হিসেবে এম্বেড করুন।
একটি কাজের উদাহরণ
ইনপুট প্যানে 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 কীওয়ার্ডের চেয়ে এক ইন্ডেন্ট গভীরে থাকবে। একই কোয়েরি BigQuery ডায়ালেক্টে এই ক্ষেত্রে অভিন্ন আউটপুট দেয় তবে কোনো ব্যাকটিক-কোটেড আইডেন্টিফায়ার থাকলে সেগুলো রাখত।
FAQ
কোন SQL ডায়ালেক্টগুলো সমর্থিত?
ডায়ালেক্ট ড্রপডাউনে Standard 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 যাচাই করে?
না। ফরম্যাটার একটি লেক্সিক্যাল রিরাইটার, পার্সার নয়। এটি ইনপুট টোকেনাইজ করে, লেআউট নিয়ম প্রয়োগ করে এবং ফলাফল নির্গত করে; কোয়েরি সিমান্টিক্যালি বৈধ কিনা, রেফারেন্স করা টেবিল বিদ্যমান কিনা বা নির্বাচিত ডায়ালেক্টে সিনট্যাক্স আইনি কিনা তা যাচাই করে না। প্রকৃত সঠিকতা পরীক্ষার জন্য ফরম্যাট করা আউটপুট আসল ডেটাবেস (বা SQLFluff-এর মতো SQL লিন্টার) দিয়ে চালান।
কেন আমার কীওয়ার্ডগুলো আপারকেস হয়ে যাচ্ছে?
কীওয়ার্ড কেস ড্রপডাউন ডিফল্টরূপে UPPER, যা বেশিরভাগ প্রকাশিত SQL স্টাইল গাইডে (dbt Labs, Mode, GitLab) প্রচলিত। যদি আপনার দল select / from লোয়ারকেসে লেখে তাহলে lower-তে পরিবর্তন করুন, অথবা আপনি যা টাইপ করেছেন সেই কেসিং রাখতে চাইলে Preserve বেছে নিন। আইডেন্টিফায়ার কখনও প্রভাবিত হয় না — শুধুমাত্র স্বীকৃত কীওয়ার্ড সেট পুনর্লিখিত হয়।
আমার কোয়েরি কি কোথাও আপলোড হয়?
না। ভেন্ডর করা sql-formatter লাইব্রেরি আপনার ব্রাউজারে চলে, ফরম্যাটিং আপনার মেশিনে স্থানীয়ভাবে হয় এবং কোয়েরি টেক্সট কখনও নেটওয়ার্ক অতিক্রম করে না। এই পেজ শুধুমাত্র সেই একই শেয়ার্ড অ্যানালিটিক্স এবং বিজ্ঞাপন অনুরোধ করে যা tools.ultim8soft.com-এর প্রতিটি পেজ করে; SQL টেক্সট কোনোটিরই অংশ নয়।
একটি ফরম্যাটার থাকলে সুন্দর-প্রিন্টেড SQL আর স্টাইল বিতর্কের বিষয় থাকে না। টুলটি সম্পূর্ণ আপনার ব্রাউজারে চলে, কোয়েরি কখনও পেজ ছেড়ে যায় না, এবং sql-formatter npm প্যাকেজকে শক্তি দেওয়া একই ডায়ালেক্ট-সচেতন টোকেনাইজার পুনর্লিখন করে।