SQL ఫార్మాటింగ్ ఎలా పనిచేస్తుంది
SQL ఫార్మాటింగ్ అనేది లెక్సర్-నడిచే రీరైట్, ఇది క్వెరీలో ప్రతి టోకెన్ నడిచి ఎంచుకున్న డయలెక్ట్ నియమాల ఆధారంగా దాని చుట్టూ వైట్స్పేస్ మళ్ళీ విడుదల చేస్తుంది. క్వెరీ సెమాంటిక్స్ ఎప్పుడూ మారదు, లేఅవుట్ మాత్రమే మారుతుంది.
- డయలెక్ట్ ఎంచుకోండి. MySQL బ్యాక్టిక్లు, PostgreSQL
::కాస్ట్లు, BigQuery డాటెడ్ టేబుల్ పాత్లు, మరియు T-SQL స్క్వేర్-బ్రాకెట్ ఐడెంటిఫయర్లు ఒక్కొక్కటి వాటి గురించి తెలిసిన టోకెనైజర్ అవసరం. డయలెక్ట్ సెలెక్టర్ ఏ గ్రామర్ వర్తింపజేయాలో ఎంచుకుంటుంది. - ఇన్పుట్ టోకెనైజ్ చేయండి. ఫార్మాటర్ క్వెరీని టోకెన్ల స్ట్రీమ్గా విభజిస్తుంది: కీవర్డ్లు (
SELECT,JOIN), ఐడెంటిఫయర్లు, లిటరల్లు, ఆపరేటర్లు, పేరెంథీసెస్, మరియు కామెంట్లు. స్ట్రింగ్ లిటరల్లు మరియు కోటెడ్ ఐడెంటిఫయర్లు తాకబడకుండా పాస్ చేయబడతాయి, తద్వారా డయలెక్ట్-నిర్దిష్ట సింటాక్స్ పనిచేస్తూనే ఉంటుంది. - లేఅవుట్ నియమాలు వర్తింపజేయండి. టాప్-లెవల్ క్లాజ్లు (
SELECT,FROM,WHERE,GROUP BY,ORDER BY) తమ సొంత లైన్పై ప్రారంభమవుతాయి. సెలెక్ట్ లిస్ట్ మరియు కాలమ్ లిస్ట్లలోని కామా-వేరు చేసిన ఎక్స్ప్రెషన్లు ఒక్కొక్కటి ఒక లైన్ పొందుతాయి, ఎంచుకున్న ఇండెంట్ యూనిట్ ద్వారా ఇండెంట్ చేయబడతాయి. - కీవర్డ్ కేసు వర్తింపజేయండి. కీవర్డ్-కేసు టోగుల్ గుర్తించబడిన SQL కీవర్డ్లను అపర్కేసు, లోయర్కేసు కి రీరైట్ చేస్తుంది, లేదా ఇన్పుట్ కేసింగ్ యథాతథంగా భద్రపరుస్తుంది. ఐడెంటిఫయర్లు ఎప్పుడూ తాకబడవు — కాలమ్ మరియు టేబుల్ పేర్లు రాసినట్లే వస్తాయి.
- ఫార్మాట్ చేసిన స్ట్రింగ్ విడుదల చేయండి. టోకెన్ స్ట్రీమ్ ఇండెంట్ అక్షరంతో (2 స్పేస్లు, 4 స్పేస్లు, లేదా ట్యాబ్) మరియు కాన్ఫిగర్ చేసిన లైన్బ్రేక్ నియమంతో ఒక్క స్ట్రింగ్గా తిరిగి జాయిన్ చేయబడుతుంది. లైవ్ మోడ్ మీరు టైప్ చేస్తున్నప్పుడు 200 ms డెబౌన్స్పై పూర్తి పైప్లైన్ మళ్ళీ నడుపుతుంది.
SQL ప్రెట్టీ-ప్రింట్ ఎందుకు చేయాలి
- పుల్-రిక్వెస్ట్ డిఫ్ చదవగలిగేలా చేయడం. 200-లైన్ CTE ఒక్క లైన్గా రీరైట్ చేయడం కోడ్ రివ్యూను ఊహించడంగా మారుస్తుంది. సుసంగత ఫార్మాటింగ్ డిఫ్ను మీరు నిజంగా చేసిన మార్పుకు పరిమితం చేస్తుంది — కొత్త కాలమ్, అదనపు
JOIN, వేరేWHEREప్రిడికేట్ — రివ్యూయర్ వైట్స్పేస్ విప్పకుండా చూడగలుగుతారు. - సులభమైన డీబగ్గింగ్. క్వెరీ తప్పుడు రో కౌంట్ తిరిగి ఇచ్చినప్పుడు, మీరు మొదట చేసేది అది లైన్ బై లైన్ చదవడం. ఫార్మాట్ చేసిన SQL ప్రతి
JOINతన సొంత లైన్పై ఉంచుతుంది మరియుWHEREప్రిడికేట్లు అలైన్ చేస్తుంది, తద్వారా తప్పిపోయినANDలేదా అడ్డుకున్నORఒక్క చూపులో కనిపిస్తుంది. - సుసంగత టీమ్ స్టైల్. చాలా టీమ్లు SQL స్టైల్ గైడ్ అడాప్ట్ చేస్తాయి (dbt Labs, GitLab, Mode Analytics అన్నీ తమవి పబ్లిష్ చేస్తాయి) మరియు ప్రతి కమిట్ చేసిన క్వెరీ దాన్ని పాటించాలని కోరుకుంటాయి. కమిట్ చేయడానికి ముందు ఫార్మాటర్ నడపడం రివ్యూ నుండి స్టైల్ వాదనను తొలగిస్తుంది మరియు చర్చించడానికి లాజిక్ మాత్రమే మిగులుతుంది.
- డాక్స్లో 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 కి సెట్ చేయండి, ఇండెంట్ 2 స్పేస్లు, మరియు కీవర్డ్ కేసు UPPER. అవుట్పుట్ SELECT, FROM, LEFT JOIN, WHERE, GROUP BY, మరియు ORDER BY తమ సొంత లైన్లపై ఉంచుతుంది; సెలెక్ట్ లిస్ట్ మరియు గ్రూప్-బై లిస్ట్లోని ప్రతి కాలమ్ తన సొంత ఇండెంటెడ్ లైన్ పొందుతుంది; మరియు ON ప్రిడికేట్ దానికి చెందిన JOIN కీవర్డ్ కంటే ఒక ఇండెంట్ లోతున కూర్చుంటుంది.
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 కూడా గుర్తిస్తుంది — అత్యంత దగ్గరి డయలెక్ట్ ఎంచుకోవడం సరైన అవుట్పుట్ ఉత్పత్తి చేస్తుంది, సరిగ్గా టార్గెట్ లిస్ట్లో లేకపోయినా. ఐడెంటిఫయర్లు, స్ట్రింగ్ లిటరల్లు, మరియు డయలెక్ట్-నిర్దిష్ట ఆపరేటర్లు యథాతథంగా భద్రపరచబడతాయి.
ఇది నా SQL వాలిడేట్ చేస్తుందా?
లేదు. ఫార్మాటర్ లెక్సికల్ రీరైటర్, పార్సర్ కాదు. ఇది ఇన్పుట్ టోకెనైజ్ చేస్తుంది, లేఅవుట్ నియమాలు వర్తింపజేస్తుంది, మరియు ఫలితం విడుదల చేస్తుంది; క్వెరీ సెమాంటిక్గా చెల్లుబాటు అవుతుందో, రిఫరెన్స్ చేసిన టేబుల్లు ఉన్నాయో, లేదా సింటాక్స్ ఎంచుకున్న డయలెక్ట్లో చట్టబద్ధంగా ఉందో తనిఖీ చేయదు. నిజమైన కరెక్ట్నెస్ చెక్ కోసం ఫార్మాట్ చేసిన అవుట్పుట్ను వాస్తవ డేటాబేస్ ద్వారా (లేదా SQLFluff వంటి SQL లింటర్) నడుపండి.
నా కీవర్డ్లు అపర్కేసుకు ఎందుకు మారుతున్నాయి?
కీవర్డ్ కేసు డ్రాప్డౌన్ UPPER కి డిఫాల్ట్ అవుతుంది, ఇది చాలా పబ్లిష్ చేసిన SQL స్టైల్ గైడ్లలో (dbt Labs, Mode, GitLab) కన్వెన్షన్. మీ టీమ్ select / from లోయర్కేసులో రాస్తే lower కి మారండి, లేదా అవుట్పుట్ మీరు టైప్ చేసిన కేసింగ్ ఉంచాలంటే Preserve. ఐడెంటిఫయర్లు ఎప్పుడూ ప్రభావితం కావు — గుర్తించబడిన కీవర్డ్ సెట్ మాత్రమే రీరైట్ చేయబడుతుంది.
నా క్వెరీ ఎక్కడైనా అప్లోడ్ అవుతుందా?
లేదు. వెండర్ sql-formatter లైబ్రరీ మీ బ్రౌజర్లో నడుస్తుంది, ఫార్మాటింగ్ మీ యంత్రంపై స్థానికంగా జరుగుతుంది, మరియు క్వెరీ టెక్స్ట్ నెట్వర్క్ దాటదు. ఈ పేజీ చేసే ఏకైక అవుట్బౌండ్ రిక్వెస్ట్లు tools.ultim8soft.com లోని ప్రతి పేజీ చేసే అదే షేర్డ్ అనలిటిక్స్ మరియు ప్రకటనల రిక్వెస్ట్లు; SQL టెక్స్ట్ వాటిలో దేనిలోనూ భాగం కాదు.
ప్రెట్టీ-ప్రింటెడ్ SQL ఒక ఫార్మాటర్ దాన్ని నిర్వహించిన తర్వాత స్టైల్ వాదన ఆగిపోతుంది. టూల్ పూర్తిగా మీ బ్రౌజర్లో నడుస్తుంది, క్వెరీ పేజీ వదిలి వెళ్ళదు, మరియు sql-formatter npm ప్యాకేజీకి పవర్ ఇచ్చే అదే డయలెక్ట్-అవేర్ టోకెనైజర్ రీరైట్ చేస్తుంది.