[{"data":1,"prerenderedAt":1425},["ShallowReactive",2],{"tutorial-bruin-templates":3,"content-query-ypMAZIgPmD":416,"content-query-x7eameAQjh":704},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"category":11,"module":12,"isModuleIndex":13,"prerequisites":14,"resources":16,"heroGif":26,"author":27,"body":31,"_type":410,"_id":411,"_source":412,"_file":413,"_stem":414,"_extension":415},"/tutorials/bruin-templates","tutorials",false,"","Using Bruin Templates","Learn how to use Bruin templates to quickly scaffold data pipelines with pre-configured assets, connections, and transformations.","2026-04-15","Module","bruin-templates",true,[15],"\u003Ca href=\"https://getbruin.com/docs/bruin/getting-started/introduction/installation.html\">Bruin CLI\u003C/a> installed",[17,20,23],{"label":18,"url":19},"Bruin CLI documentation","https://getbruin.com/docs/bruin/overview.html",{"label":21,"url":22},"Bruin init command","https://getbruin.com/docs/bruin/commands/init.html",{"label":24,"url":25},"Tutorial video on Bruin templates","https://youtu.be/8RuVoSCNHQI","/img/learn/tutorials/init-wizard.gif",{"name":28,"role":29,"image":30},"Bruin Team","Bruin Data","/bruin-logo-2025.svg",{"type":32,"children":33,"toc":397},"root",[34,48,67,77,88,92,99,109,112,118,123,130,135,141,146,174,179,184,213,234,240,245,308,313,319,324,348,353,359,364,370,391],{"type":35,"tag":36,"props":37,"children":38},"element","p",{},[39,46],{"type":35,"tag":40,"props":41,"children":42},"strong",{},[43],{"type":44,"value":45},"text","What is this?",{"type":44,"value":47}," A hands-on tutorial on using Bruin templates - ready-made blueprints that let you scaffold a complete data pipeline in seconds. Instead of writing boilerplate configuration and setup files from scratch, templates give you a working project structure with pre-configured assets, connections, and transformations.",{"type":35,"tag":36,"props":49,"children":50},{},[51,56,58,65],{"type":35,"tag":40,"props":52,"children":53},{},[54],{"type":44,"value":55},"What you'll learn:",{"type":44,"value":57}," How to browse and select templates using ",{"type":35,"tag":59,"props":60,"children":62},"code",{"className":61},[],[63],{"type":44,"value":64},"bruin init",{"type":44,"value":66},", how template projects are structured, and how to run a templated pipeline end-to-end.",{"type":35,"tag":36,"props":68,"children":69},{},[70,75],{"type":35,"tag":40,"props":71,"children":72},{},[73],{"type":44,"value":74},"What you'll build:",{"type":44,"value":76}," A working pipeline from the Frankfurter template that ingests foreign exchange rate data and transforms it with SQL - all set up in under a minute.",{"type":35,"tag":36,"props":78,"children":79},{},[80],{"type":35,"tag":81,"props":82,"children":85},"a",{"href":83,"style":84},"/learn/bruin-templates/initialize-template","display:inline-block;background:#111827;color:#fff;padding:0.625rem 1.25rem;border-radius:0.5rem;font-weight:500;text-decoration:none;font-size:0.875rem;margin-top:0.5rem;",[86],{"type":44,"value":87},"Start tutorial →",{"type":35,"tag":89,"props":90,"children":91},"hr",{},[],{"type":35,"tag":93,"props":94,"children":96},"h2",{"id":95},"video-walkthrough",[97],{"type":44,"value":98},"Video walkthrough",{"type":35,"tag":100,"props":101,"children":108},"iframe",{"width":102,"height":103,"src":104,"title":105,"frameBorder":106,"allow":107,"allowFullScreen":13},"100%",400,"https://www.youtube.com/embed/8RuVoSCNHQI","Tutorial on Bruin templates","0","accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",[],{"type":35,"tag":89,"props":110,"children":111},{},[],{"type":35,"tag":93,"props":113,"children":115},{"id":114},"full-tutorial",[116],{"type":44,"value":117},"Full tutorial",{"type":35,"tag":36,"props":119,"children":120},{},[121],{"type":44,"value":122},"Below is the complete tutorial you can read through, or use the step-by-step version above.",{"type":35,"tag":124,"props":125,"children":127},"h3",{"id":126},"what-are-templates",[128],{"type":44,"value":129},"What are templates?",{"type":35,"tag":36,"props":131,"children":132},{},[133],{"type":44,"value":134},"Setting up a data pipeline from scratch can be tedious - lots of boilerplate configurations and setup steps. Bruin simplifies this with templates: ready-made blueprints that help you get started fast. Templates define the structure and essential files for a pipeline and allow you to quickly set up pipelines without starting from scratch.",{"type":35,"tag":124,"props":136,"children":138},{"id":137},"initialize-from-a-template",[139],{"type":44,"value":140},"Initialize from a template",{"type":35,"tag":36,"props":142,"children":143},{},[144],{"type":44,"value":145},"Navigate to the folder where you want to set up your pipeline and run:",{"type":35,"tag":147,"props":148,"children":152},"pre",{"className":149,"code":150,"language":151,"meta":7,"style":7},"language-bash shiki shiki-themes github-dark","bruin init\n","bash",[153],{"type":35,"tag":59,"props":154,"children":155},{"__ignoreMap":7},[156],{"type":35,"tag":157,"props":158,"children":161},"span",{"class":159,"line":160},"line",1,[162,168],{"type":35,"tag":157,"props":163,"children":165},{"style":164},"--shiki-default:#B392F0",[166],{"type":44,"value":167},"bruin",{"type":35,"tag":157,"props":169,"children":171},{"style":170},"--shiki-default:#9ECBFF",[172],{"type":44,"value":173}," init\n",{"type":35,"tag":36,"props":175,"children":176},{},[177],{"type":44,"value":178},"You'll see an interactive menu. Use the arrow keys to browse through the available templates and hit enter to select one. Once selected, Bruin sets up your project folder with the correct structure and files.",{"type":35,"tag":36,"props":180,"children":181},{},[182],{"type":44,"value":183},"Alternatively, you can skip the interactive menu and specify the template and folder name directly:",{"type":35,"tag":147,"props":185,"children":187},{"className":149,"code":186,"language":151,"meta":7,"style":7},"bruin init frankfurter FXmetrics\n",[188],{"type":35,"tag":59,"props":189,"children":190},{"__ignoreMap":7},[191],{"type":35,"tag":157,"props":192,"children":193},{"class":159,"line":160},[194,198,203,208],{"type":35,"tag":157,"props":195,"children":196},{"style":164},[197],{"type":44,"value":167},{"type":35,"tag":157,"props":199,"children":200},{"style":170},[201],{"type":44,"value":202}," init",{"type":35,"tag":157,"props":204,"children":205},{"style":170},[206],{"type":44,"value":207}," frankfurter",{"type":35,"tag":157,"props":209,"children":210},{"style":170},[211],{"type":44,"value":212}," FXmetrics\n",{"type":35,"tag":36,"props":214,"children":215},{},[216,218,224,226,232],{"type":44,"value":217},"This creates a project called ",{"type":35,"tag":59,"props":219,"children":221},{"className":220},[],[222],{"type":44,"value":223},"FXmetrics",{"type":44,"value":225}," from the ",{"type":35,"tag":59,"props":227,"children":229},{"className":228},[],[230],{"type":44,"value":231},"frankfurter",{"type":44,"value":233}," template.",{"type":35,"tag":124,"props":235,"children":237},{"id":236},"explore-the-template-structure",[238],{"type":44,"value":239},"Explore the template structure",{"type":35,"tag":36,"props":241,"children":242},{},[243],{"type":44,"value":244},"The Frankfurter template includes everything you need:",{"type":35,"tag":246,"props":247,"children":248},"ul",{},[249,264,278,288,298],{"type":35,"tag":250,"props":251,"children":252},"li",{},[253,262],{"type":35,"tag":40,"props":254,"children":255},{},[256],{"type":35,"tag":59,"props":257,"children":259},{"className":258},[],[260],{"type":44,"value":261},".bruin.yml",{"type":44,"value":263}," — Configuration file with environment and connection settings",{"type":35,"tag":250,"props":265,"children":266},{},[267,276],{"type":35,"tag":40,"props":268,"children":269},{},[270],{"type":35,"tag":59,"props":271,"children":273},{"className":272},[],[274],{"type":44,"value":275},"pipeline.yml",{"type":44,"value":277}," — Pipeline configuration with name and default connections",{"type":35,"tag":250,"props":279,"children":280},{},[281,286],{"type":35,"tag":40,"props":282,"children":283},{},[284],{"type":44,"value":285},"Ingestr assets",{"type":44,"value":287}," — YAML files that define data ingestion from the Frankfurter API (foreign exchange rates)",{"type":35,"tag":250,"props":289,"children":290},{},[291,296],{"type":35,"tag":40,"props":292,"children":293},{},[294],{"type":44,"value":295},"SQL assets",{"type":44,"value":297}," — SQL files that transform and process the ingested data",{"type":35,"tag":250,"props":299,"children":300},{},[301,306],{"type":35,"tag":40,"props":302,"children":303},{},[304],{"type":44,"value":305},"Documentation",{"type":44,"value":307}," — README with template-specific instructions",{"type":35,"tag":36,"props":309,"children":310},{},[311],{"type":44,"value":312},"The ingestr assets pull exchange rate data from the Frankfurter API, and the SQL assets process that data into useful views - for example, presenting exchange rate trends over the last 30 days.",{"type":35,"tag":124,"props":314,"children":316},{"id":315},"run-the-pipeline",[317],{"type":44,"value":318},"Run the pipeline",{"type":35,"tag":36,"props":320,"children":321},{},[322],{"type":44,"value":323},"Run the pipeline to ingest and transform the data:",{"type":35,"tag":147,"props":325,"children":327},{"className":149,"code":326,"language":151,"meta":7,"style":7},"bruin run .\n",[328],{"type":35,"tag":59,"props":329,"children":330},{"__ignoreMap":7},[331],{"type":35,"tag":157,"props":332,"children":333},{"class":159,"line":160},[334,338,343],{"type":35,"tag":157,"props":335,"children":336},{"style":164},[337],{"type":44,"value":167},{"type":35,"tag":157,"props":339,"children":340},{"style":170},[341],{"type":44,"value":342}," run",{"type":35,"tag":157,"props":344,"children":345},{"style":170},[346],{"type":44,"value":347}," .\n",{"type":35,"tag":36,"props":349,"children":350},{},[351],{"type":44,"value":352},"Bruin executes the ingestr assets first to fetch the data, then runs the SQL transformations that depend on them.",{"type":35,"tag":124,"props":354,"children":356},{"id":355},"explore-the-results",[357],{"type":44,"value":358},"Explore the results",{"type":35,"tag":36,"props":360,"children":361},{},[362],{"type":44,"value":363},"After the pipeline runs, you can explore the data. The SQL asset contains a query that presents exchange rate data over the last 30 days, giving you a ready-to-use analytical view of currency movements.",{"type":35,"tag":124,"props":365,"children":367},{"id":366},"available-templates",[368],{"type":44,"value":369},"Available templates",{"type":35,"tag":36,"props":371,"children":372},{},[373,375,380,382,389],{"type":44,"value":374},"Bruin ships with several templates for common use cases. Run ",{"type":35,"tag":59,"props":376,"children":378},{"className":377},[],[379],{"type":44,"value":64},{"type":44,"value":381}," to see the full list, or check the ",{"type":35,"tag":81,"props":383,"children":386},{"href":19,"rel":384},[385],"nofollow",[387],{"type":44,"value":388},"Bruin documentation",{"type":44,"value":390}," for details on each one. Templates are available for DuckDB, BigQuery, PostgreSQL, Oracle, and more.",{"type":35,"tag":392,"props":393,"children":394},"style",{},[395],{"type":44,"value":396},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":7,"searchDepth":398,"depth":398,"links":399},2,[400,401],{"id":95,"depth":398,"text":98},{"id":114,"depth":398,"text":117,"children":402},[403,405,406,407,408,409],{"id":126,"depth":404,"text":129},3,{"id":137,"depth":404,"text":140},{"id":236,"depth":404,"text":239},{"id":315,"depth":404,"text":318},{"id":355,"depth":404,"text":358},{"id":366,"depth":404,"text":369},"markdown","content:tutorials:bruin-templates:index.md","content","tutorials/bruin-templates/index.md","tutorials/bruin-templates/index","md",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"category":11,"module":12,"isModuleIndex":13,"prerequisites":417,"resources":418,"heroGif":26,"author":422,"body":423,"_type":410,"_id":411,"_source":412,"_file":413,"_stem":414,"_extension":415},[15],[419,420,421],{"label":18,"url":19},{"label":21,"url":22},{"label":24,"url":25},{"name":28,"role":29,"image":30},{"type":32,"children":424,"toc":693},[425,433,447,455,462,465,469,472,475,479,483,487,491,495,499,516,520,524,549,565,569,573,624,628,632,636,657,661,665,669,673,689],{"type":35,"tag":36,"props":426,"children":427},{},[428,432],{"type":35,"tag":40,"props":429,"children":430},{},[431],{"type":44,"value":45},{"type":44,"value":47},{"type":35,"tag":36,"props":434,"children":435},{},[436,440,441,446],{"type":35,"tag":40,"props":437,"children":438},{},[439],{"type":44,"value":55},{"type":44,"value":57},{"type":35,"tag":59,"props":442,"children":444},{"className":443},[],[445],{"type":44,"value":64},{"type":44,"value":66},{"type":35,"tag":36,"props":448,"children":449},{},[450,454],{"type":35,"tag":40,"props":451,"children":452},{},[453],{"type":44,"value":74},{"type":44,"value":76},{"type":35,"tag":36,"props":456,"children":457},{},[458],{"type":35,"tag":81,"props":459,"children":460},{"href":83,"style":84},[461],{"type":44,"value":87},{"type":35,"tag":89,"props":463,"children":464},{},[],{"type":35,"tag":93,"props":466,"children":467},{"id":95},[468],{"type":44,"value":98},{"type":35,"tag":100,"props":470,"children":471},{"width":102,"height":103,"src":104,"title":105,"frameBorder":106,"allow":107,"allowFullScreen":13},[],{"type":35,"tag":89,"props":473,"children":474},{},[],{"type":35,"tag":93,"props":476,"children":477},{"id":114},[478],{"type":44,"value":117},{"type":35,"tag":36,"props":480,"children":481},{},[482],{"type":44,"value":122},{"type":35,"tag":124,"props":484,"children":485},{"id":126},[486],{"type":44,"value":129},{"type":35,"tag":36,"props":488,"children":489},{},[490],{"type":44,"value":134},{"type":35,"tag":124,"props":492,"children":493},{"id":137},[494],{"type":44,"value":140},{"type":35,"tag":36,"props":496,"children":497},{},[498],{"type":44,"value":145},{"type":35,"tag":147,"props":500,"children":501},{"className":149,"code":150,"language":151,"meta":7,"style":7},[502],{"type":35,"tag":59,"props":503,"children":504},{"__ignoreMap":7},[505],{"type":35,"tag":157,"props":506,"children":507},{"class":159,"line":160},[508,512],{"type":35,"tag":157,"props":509,"children":510},{"style":164},[511],{"type":44,"value":167},{"type":35,"tag":157,"props":513,"children":514},{"style":170},[515],{"type":44,"value":173},{"type":35,"tag":36,"props":517,"children":518},{},[519],{"type":44,"value":178},{"type":35,"tag":36,"props":521,"children":522},{},[523],{"type":44,"value":183},{"type":35,"tag":147,"props":525,"children":526},{"className":149,"code":186,"language":151,"meta":7,"style":7},[527],{"type":35,"tag":59,"props":528,"children":529},{"__ignoreMap":7},[530],{"type":35,"tag":157,"props":531,"children":532},{"class":159,"line":160},[533,537,541,545],{"type":35,"tag":157,"props":534,"children":535},{"style":164},[536],{"type":44,"value":167},{"type":35,"tag":157,"props":538,"children":539},{"style":170},[540],{"type":44,"value":202},{"type":35,"tag":157,"props":542,"children":543},{"style":170},[544],{"type":44,"value":207},{"type":35,"tag":157,"props":546,"children":547},{"style":170},[548],{"type":44,"value":212},{"type":35,"tag":36,"props":550,"children":551},{},[552,553,558,559,564],{"type":44,"value":217},{"type":35,"tag":59,"props":554,"children":556},{"className":555},[],[557],{"type":44,"value":223},{"type":44,"value":225},{"type":35,"tag":59,"props":560,"children":562},{"className":561},[],[563],{"type":44,"value":231},{"type":44,"value":233},{"type":35,"tag":124,"props":566,"children":567},{"id":236},[568],{"type":44,"value":239},{"type":35,"tag":36,"props":570,"children":571},{},[572],{"type":44,"value":244},{"type":35,"tag":246,"props":574,"children":575},{},[576,588,600,608,616],{"type":35,"tag":250,"props":577,"children":578},{},[579,587],{"type":35,"tag":40,"props":580,"children":581},{},[582],{"type":35,"tag":59,"props":583,"children":585},{"className":584},[],[586],{"type":44,"value":261},{"type":44,"value":263},{"type":35,"tag":250,"props":589,"children":590},{},[591,599],{"type":35,"tag":40,"props":592,"children":593},{},[594],{"type":35,"tag":59,"props":595,"children":597},{"className":596},[],[598],{"type":44,"value":275},{"type":44,"value":277},{"type":35,"tag":250,"props":601,"children":602},{},[603,607],{"type":35,"tag":40,"props":604,"children":605},{},[606],{"type":44,"value":285},{"type":44,"value":287},{"type":35,"tag":250,"props":609,"children":610},{},[611,615],{"type":35,"tag":40,"props":612,"children":613},{},[614],{"type":44,"value":295},{"type":44,"value":297},{"type":35,"tag":250,"props":617,"children":618},{},[619,623],{"type":35,"tag":40,"props":620,"children":621},{},[622],{"type":44,"value":305},{"type":44,"value":307},{"type":35,"tag":36,"props":625,"children":626},{},[627],{"type":44,"value":312},{"type":35,"tag":124,"props":629,"children":630},{"id":315},[631],{"type":44,"value":318},{"type":35,"tag":36,"props":633,"children":634},{},[635],{"type":44,"value":323},{"type":35,"tag":147,"props":637,"children":638},{"className":149,"code":326,"language":151,"meta":7,"style":7},[639],{"type":35,"tag":59,"props":640,"children":641},{"__ignoreMap":7},[642],{"type":35,"tag":157,"props":643,"children":644},{"class":159,"line":160},[645,649,653],{"type":35,"tag":157,"props":646,"children":647},{"style":164},[648],{"type":44,"value":167},{"type":35,"tag":157,"props":650,"children":651},{"style":170},[652],{"type":44,"value":342},{"type":35,"tag":157,"props":654,"children":655},{"style":170},[656],{"type":44,"value":347},{"type":35,"tag":36,"props":658,"children":659},{},[660],{"type":44,"value":352},{"type":35,"tag":124,"props":662,"children":663},{"id":355},[664],{"type":44,"value":358},{"type":35,"tag":36,"props":666,"children":667},{},[668],{"type":44,"value":363},{"type":35,"tag":124,"props":670,"children":671},{"id":366},[672],{"type":44,"value":369},{"type":35,"tag":36,"props":674,"children":675},{},[676,677,682,683,688],{"type":44,"value":374},{"type":35,"tag":59,"props":678,"children":680},{"className":679},[],[681],{"type":44,"value":64},{"type":44,"value":381},{"type":35,"tag":81,"props":684,"children":686},{"href":19,"rel":685},[385],[687],{"type":44,"value":388},{"type":44,"value":390},{"type":35,"tag":392,"props":690,"children":691},{},[692],{"type":44,"value":396},{"title":7,"searchDepth":398,"depth":398,"links":694},[695,696],{"id":95,"depth":398,"text":98},{"id":114,"depth":398,"text":117,"children":697},[698,699,700,701,702,703],{"id":126,"depth":404,"text":129},{"id":137,"depth":404,"text":140},{"id":236,"depth":404,"text":239},{"id":315,"depth":404,"text":318},{"id":355,"depth":404,"text":358},{"id":366,"depth":404,"text":369},[705,1163],{"_path":706,"_dir":12,"_draft":6,"_partial":6,"_locale":7,"title":707,"description":708,"date":10,"readingTime":709,"category":710,"tags":711,"difficulty":713,"module":12,"step":160,"subSteps":13,"learnMore":714,"author":719,"body":720,"_type":410,"_id":1160,"_source":412,"_file":1161,"_stem":1162,"_extension":415},"/tutorials/bruin-templates/initialize-template","Initialize from a Template","Use bruin init to scaffold a pipeline from a template - either interactively or by specifying the template name directly.",4,"Tutorial",[712],"Bruin CLI","Beginner",[715,716],{"label":21,"url":22},{"label":717,"url":718},"Bruin project structure (docs)","https://getbruin.com/docs/bruin/core-concepts/project.html",{"name":28,"role":29,"image":30},{"type":32,"children":721,"toc":1149},[722,728,740,746,751,757,763,771,776,793,798,803,809,817,822,847,864,870,875,885,890,952,958,970,1072,1083,1134,1140,1145],{"type":35,"tag":93,"props":723,"children":725},{"id":724},"what-youll-do",[726],{"type":44,"value":727},"What you'll do",{"type":35,"tag":36,"props":729,"children":730},{},[731,733,738],{"type":44,"value":732},"Use ",{"type":35,"tag":59,"props":734,"children":736},{"className":735},[],[737],{"type":44,"value":64},{"type":44,"value":739}," to create a new pipeline project from a template, then explore the generated project structure.",{"type":35,"tag":93,"props":741,"children":743},{"id":742},"why-this-step-matters",[744],{"type":44,"value":745},"Why this step matters",{"type":35,"tag":36,"props":747,"children":748},{},[749],{"type":44,"value":750},"Templates eliminate boilerplate. Instead of manually creating configuration files, asset definitions, and pipeline configs, a single command gives you a working project with everything wired up. Understanding how to pick and use templates is the fastest way to start building with Bruin.",{"type":35,"tag":93,"props":752,"children":754},{"id":753},"instructions",[755],{"type":44,"value":756},"Instructions",{"type":35,"tag":124,"props":758,"children":760},{"id":759},"_1-browse-available-templates",[761],{"type":44,"value":762},"1) Browse available templates",{"type":35,"tag":36,"props":764,"children":765},{},[766],{"type":35,"tag":767,"props":768,"children":770},"img",{"alt":769,"src":26},"bruin init interactive wizard",[],{"type":35,"tag":36,"props":772,"children":773},{},[774],{"type":44,"value":775},"Navigate to the folder where you want to create your project and run:",{"type":35,"tag":147,"props":777,"children":778},{"className":149,"code":150,"language":151,"meta":7,"style":7},[779],{"type":35,"tag":59,"props":780,"children":781},{"__ignoreMap":7},[782],{"type":35,"tag":157,"props":783,"children":784},{"class":159,"line":160},[785,789],{"type":35,"tag":157,"props":786,"children":787},{"style":164},[788],{"type":44,"value":167},{"type":35,"tag":157,"props":790,"children":791},{"style":170},[792],{"type":44,"value":173},{"type":35,"tag":36,"props":794,"children":795},{},[796],{"type":44,"value":797},"You'll see an interactive menu listing all available templates. Use the arrow keys to browse through them and press Enter to select one.",{"type":35,"tag":36,"props":799,"children":800},{},[801],{"type":44,"value":802},"Each template is designed for a specific use case - some pull data from APIs, others connect to databases like Oracle or PostgreSQL.",{"type":35,"tag":124,"props":804,"children":806},{"id":805},"_2-initialize-with-a-specific-template",[807],{"type":44,"value":808},"2) Initialize with a specific template",{"type":35,"tag":36,"props":810,"children":811},{},[812],{"type":35,"tag":767,"props":813,"children":816},{"alt":814,"src":815},"bruin init with template name","/img/learn/tutorials/init.gif",[],{"type":35,"tag":36,"props":818,"children":819},{},[820],{"type":44,"value":821},"If you already know which template you want, skip the interactive menu by specifying the template name and folder directly:",{"type":35,"tag":147,"props":823,"children":824},{"className":149,"code":186,"language":151,"meta":7,"style":7},[825],{"type":35,"tag":59,"props":826,"children":827},{"__ignoreMap":7},[828],{"type":35,"tag":157,"props":829,"children":830},{"class":159,"line":160},[831,835,839,843],{"type":35,"tag":157,"props":832,"children":833},{"style":164},[834],{"type":44,"value":167},{"type":35,"tag":157,"props":836,"children":837},{"style":170},[838],{"type":44,"value":202},{"type":35,"tag":157,"props":840,"children":841},{"style":170},[842],{"type":44,"value":207},{"type":35,"tag":157,"props":844,"children":845},{"style":170},[846],{"type":44,"value":212},{"type":35,"tag":36,"props":848,"children":849},{},[850,851,856,857,862],{"type":44,"value":217},{"type":35,"tag":59,"props":852,"children":854},{"className":853},[],[855],{"type":44,"value":223},{"type":44,"value":225},{"type":35,"tag":59,"props":858,"children":860},{"className":859},[],[861],{"type":44,"value":231},{"type":44,"value":863}," template. The Frankfurter template ingests foreign exchange rate data from the open Frankfurter API - no credentials needed.",{"type":35,"tag":124,"props":865,"children":867},{"id":866},"_3-explore-the-project-structure",[868],{"type":44,"value":869},"3) Explore the project structure",{"type":35,"tag":36,"props":871,"children":872},{},[873],{"type":44,"value":874},"After initialization, your project looks like this:",{"type":35,"tag":147,"props":876,"children":880},{"className":877,"code":879,"language":44},[878],"language-text","FXmetrics/\n├── assets/\n│   ├── fx_rates.asset.yml        # ingestr: fetches exchange rate data\n│   └── exchange_rate_summary.sql # SQL: transforms the raw data\n├── .bruin.yml                     # connections and environment config\n├── pipeline.yml                   # pipeline name and defaults\n└── README.md                      # template documentation\n",[881],{"type":35,"tag":59,"props":882,"children":883},{"__ignoreMap":7},[884],{"type":44,"value":879},{"type":35,"tag":36,"props":886,"children":887},{},[888],{"type":44,"value":889},"Key files:",{"type":35,"tag":246,"props":891,"children":892},{},[893,906,919,936],{"type":35,"tag":250,"props":894,"children":895},{},[896,904],{"type":35,"tag":40,"props":897,"children":898},{},[899],{"type":35,"tag":59,"props":900,"children":902},{"className":901},[],[903],{"type":44,"value":261},{"type":44,"value":905}," — Defines your connections and environments. The template pre-fills this with sensible defaults.",{"type":35,"tag":250,"props":907,"children":908},{},[909,917],{"type":35,"tag":40,"props":910,"children":911},{},[912],{"type":35,"tag":59,"props":913,"children":915},{"className":914},[],[916],{"type":44,"value":275},{"type":44,"value":918}," — Sets the pipeline name and links it to the default connections.",{"type":35,"tag":250,"props":920,"children":921},{},[922,926,928,934],{"type":35,"tag":40,"props":923,"children":924},{},[925],{"type":44,"value":285},{"type":44,"value":927}," (",{"type":35,"tag":59,"props":929,"children":931},{"className":930},[],[932],{"type":44,"value":933},".asset.yml",{"type":44,"value":935},") — Define where to pull data from and where to store it.",{"type":35,"tag":250,"props":937,"children":938},{},[939,943,944,950],{"type":35,"tag":40,"props":940,"children":941},{},[942],{"type":44,"value":295},{"type":44,"value":927},{"type":35,"tag":59,"props":945,"children":947},{"className":946},[],[948],{"type":44,"value":949},".sql",{"type":44,"value":951},") — Transform the ingested data into analytical views.",{"type":35,"tag":124,"props":953,"children":955},{"id":954},"_4-review-the-configuration",[956],{"type":44,"value":957},"4) Review the configuration",{"type":35,"tag":36,"props":959,"children":960},{},[961,963,968],{"type":44,"value":962},"Open ",{"type":35,"tag":59,"props":964,"children":966},{"className":965},[],[967],{"type":44,"value":261},{"type":44,"value":969}," to see the pre-configured connections. The Frankfurter template typically sets up a DuckDB connection for local storage:",{"type":35,"tag":147,"props":971,"children":975},{"className":972,"code":973,"language":974,"meta":7,"style":7},"language-yaml shiki shiki-themes github-dark","environments:\n  default:\n    connections:\n      duckdb:\n        - name: \"duckdb-default\"\n          path: \"fx.db\"\n","yaml",[976],{"type":35,"tag":59,"props":977,"children":978},{"__ignoreMap":7},[979,994,1006,1018,1030,1054],{"type":35,"tag":157,"props":980,"children":981},{"class":159,"line":160},[982,988],{"type":35,"tag":157,"props":983,"children":985},{"style":984},"--shiki-default:#85E89D",[986],{"type":44,"value":987},"environments",{"type":35,"tag":157,"props":989,"children":991},{"style":990},"--shiki-default:#E1E4E8",[992],{"type":44,"value":993},":\n",{"type":35,"tag":157,"props":995,"children":996},{"class":159,"line":398},[997,1002],{"type":35,"tag":157,"props":998,"children":999},{"style":984},[1000],{"type":44,"value":1001},"  default",{"type":35,"tag":157,"props":1003,"children":1004},{"style":990},[1005],{"type":44,"value":993},{"type":35,"tag":157,"props":1007,"children":1008},{"class":159,"line":404},[1009,1014],{"type":35,"tag":157,"props":1010,"children":1011},{"style":984},[1012],{"type":44,"value":1013},"    connections",{"type":35,"tag":157,"props":1015,"children":1016},{"style":990},[1017],{"type":44,"value":993},{"type":35,"tag":157,"props":1019,"children":1020},{"class":159,"line":709},[1021,1026],{"type":35,"tag":157,"props":1022,"children":1023},{"style":984},[1024],{"type":44,"value":1025},"      duckdb",{"type":35,"tag":157,"props":1027,"children":1028},{"style":990},[1029],{"type":44,"value":993},{"type":35,"tag":157,"props":1031,"children":1033},{"class":159,"line":1032},5,[1034,1039,1044,1049],{"type":35,"tag":157,"props":1035,"children":1036},{"style":990},[1037],{"type":44,"value":1038},"        - ",{"type":35,"tag":157,"props":1040,"children":1041},{"style":984},[1042],{"type":44,"value":1043},"name",{"type":35,"tag":157,"props":1045,"children":1046},{"style":990},[1047],{"type":44,"value":1048},": ",{"type":35,"tag":157,"props":1050,"children":1051},{"style":170},[1052],{"type":44,"value":1053},"\"duckdb-default\"\n",{"type":35,"tag":157,"props":1055,"children":1057},{"class":159,"line":1056},6,[1058,1063,1067],{"type":35,"tag":157,"props":1059,"children":1060},{"style":984},[1061],{"type":44,"value":1062},"          path",{"type":35,"tag":157,"props":1064,"children":1065},{"style":990},[1066],{"type":44,"value":1048},{"type":35,"tag":157,"props":1068,"children":1069},{"style":170},[1070],{"type":44,"value":1071},"\"fx.db\"\n",{"type":35,"tag":36,"props":1073,"children":1074},{},[1075,1076,1081],{"type":44,"value":962},{"type":35,"tag":59,"props":1077,"children":1079},{"className":1078},[],[1080],{"type":44,"value":275},{"type":44,"value":1082}," to see the pipeline configuration:",{"type":35,"tag":147,"props":1084,"children":1086},{"className":972,"code":1085,"language":974,"meta":7,"style":7},"name: FXmetrics\ndefault_connections:\n  duckdb: \"duckdb-default\"\n",[1087],{"type":35,"tag":59,"props":1088,"children":1089},{"__ignoreMap":7},[1090,1106,1118],{"type":35,"tag":157,"props":1091,"children":1092},{"class":159,"line":160},[1093,1097,1101],{"type":35,"tag":157,"props":1094,"children":1095},{"style":984},[1096],{"type":44,"value":1043},{"type":35,"tag":157,"props":1098,"children":1099},{"style":990},[1100],{"type":44,"value":1048},{"type":35,"tag":157,"props":1102,"children":1103},{"style":170},[1104],{"type":44,"value":1105},"FXmetrics\n",{"type":35,"tag":157,"props":1107,"children":1108},{"class":159,"line":398},[1109,1114],{"type":35,"tag":157,"props":1110,"children":1111},{"style":984},[1112],{"type":44,"value":1113},"default_connections",{"type":35,"tag":157,"props":1115,"children":1116},{"style":990},[1117],{"type":44,"value":993},{"type":35,"tag":157,"props":1119,"children":1120},{"class":159,"line":404},[1121,1126,1130],{"type":35,"tag":157,"props":1122,"children":1123},{"style":984},[1124],{"type":44,"value":1125},"  duckdb",{"type":35,"tag":157,"props":1127,"children":1128},{"style":990},[1129],{"type":44,"value":1048},{"type":35,"tag":157,"props":1131,"children":1132},{"style":170},[1133],{"type":44,"value":1053},{"type":35,"tag":93,"props":1135,"children":1137},{"id":1136},"what-just-happened",[1138],{"type":44,"value":1139},"What just happened",{"type":35,"tag":36,"props":1141,"children":1142},{},[1143],{"type":44,"value":1144},"You scaffolded a complete pipeline project from a template. The project has pre-configured connections, ingestr assets for data ingestion, and SQL assets for transformation. Next, you'll run the pipeline and explore the results.",{"type":35,"tag":392,"props":1146,"children":1147},{},[1148],{"type":44,"value":396},{"title":7,"searchDepth":398,"depth":398,"links":1150},[1151,1152,1153,1159],{"id":724,"depth":398,"text":727},{"id":742,"depth":398,"text":745},{"id":753,"depth":398,"text":756,"children":1154},[1155,1156,1157,1158],{"id":759,"depth":404,"text":762},{"id":805,"depth":404,"text":808},{"id":866,"depth":404,"text":869},{"id":954,"depth":404,"text":957},{"id":1136,"depth":398,"text":1139},"content:tutorials:bruin-templates:initialize-template.md","tutorials/bruin-templates/initialize-template.md","tutorials/bruin-templates/initialize-template",{"_path":1164,"_dir":12,"_draft":6,"_partial":6,"_locale":7,"title":1165,"description":1166,"date":10,"readingTime":709,"category":710,"tags":1167,"difficulty":713,"module":12,"step":398,"subSteps":13,"learnMore":1168,"author":1176,"body":1177,"_type":410,"_id":1422,"_source":412,"_file":1423,"_stem":1424,"_extension":415},"/tutorials/bruin-templates/explore-run","Explore & Run","Run the templated pipeline and explore the ingested and transformed data.",[712],[1169,1172,1175],{"label":1170,"url":1171},"Bruin run command","https://getbruin.com/docs/bruin/commands/run.html",{"label":1173,"url":1174},"Bruin query command","https://getbruin.com/docs/bruin/commands/query.html",{"label":24,"url":25},{"name":28,"role":29,"image":30},{"type":32,"children":1178,"toc":1411},[1179,1183,1188,1192,1197,1201,1207,1212,1221,1230,1235,1241,1246,1267,1272,1286,1291,1297,1302,1342,1347,1353,1358,1393,1398,1402,1407],{"type":35,"tag":93,"props":1180,"children":1181},{"id":724},[1182],{"type":44,"value":727},{"type":35,"tag":36,"props":1184,"children":1185},{},[1186],{"type":44,"value":1187},"Run the pipeline to ingest and transform exchange rate data, then explore the results.",{"type":35,"tag":93,"props":1189,"children":1190},{"id":742},[1191],{"type":44,"value":745},{"type":35,"tag":36,"props":1193,"children":1194},{},[1195],{"type":44,"value":1196},"Running the pipeline is where the template pays off. A single command executes the full ingestion and transformation workflow that the template set up for you. The result is queryable data in DuckDB, ready for analysis.",{"type":35,"tag":93,"props":1198,"children":1199},{"id":753},[1200],{"type":44,"value":756},{"type":35,"tag":124,"props":1202,"children":1204},{"id":1203},"_1-understand-the-assets",[1205],{"type":44,"value":1206},"1) Understand the assets",{"type":35,"tag":36,"props":1208,"children":1209},{},[1210],{"type":44,"value":1211},"Before running, take a look at what the template created:",{"type":35,"tag":36,"props":1213,"children":1214},{},[1215,1219],{"type":35,"tag":40,"props":1216,"children":1217},{},[1218],{"type":44,"value":285},{"type":44,"value":1220}," pull exchange rate data from the Frankfurter API. These are YAML files that tell Bruin what data to fetch and where to store it.",{"type":35,"tag":36,"props":1222,"children":1223},{},[1224,1228],{"type":35,"tag":40,"props":1225,"children":1226},{},[1227],{"type":44,"value":295},{"type":44,"value":1229}," transform the raw ingested data. For example, the template includes a SQL query that presents exchange rate trends over the last 30 days.",{"type":35,"tag":36,"props":1231,"children":1232},{},[1233],{"type":44,"value":1234},"The SQL assets depend on the ingestr assets, so Bruin automatically runs ingestion first, then transformation.",{"type":35,"tag":124,"props":1236,"children":1238},{"id":1237},"_2-run-the-pipeline",[1239],{"type":44,"value":1240},"2) Run the pipeline",{"type":35,"tag":36,"props":1242,"children":1243},{},[1244],{"type":44,"value":1245},"Execute the entire pipeline:",{"type":35,"tag":147,"props":1247,"children":1248},{"className":149,"code":326,"language":151,"meta":7,"style":7},[1249],{"type":35,"tag":59,"props":1250,"children":1251},{"__ignoreMap":7},[1252],{"type":35,"tag":157,"props":1253,"children":1254},{"class":159,"line":160},[1255,1259,1263],{"type":35,"tag":157,"props":1256,"children":1257},{"style":164},[1258],{"type":44,"value":167},{"type":35,"tag":157,"props":1260,"children":1261},{"style":170},[1262],{"type":44,"value":342},{"type":35,"tag":157,"props":1264,"children":1265},{"style":170},[1266],{"type":44,"value":347},{"type":35,"tag":36,"props":1268,"children":1269},{},[1270],{"type":44,"value":1271},"Bruin resolves the dependency graph and runs assets in the correct order:",{"type":35,"tag":1273,"props":1274,"children":1275},"ol",{},[1276,1281],{"type":35,"tag":250,"props":1277,"children":1278},{},[1279],{"type":44,"value":1280},"First, the ingestr assets fetch exchange rate data from the Frankfurter API",{"type":35,"tag":250,"props":1282,"children":1283},{},[1284],{"type":44,"value":1285},"Then, the SQL assets transform the raw data into analytical views",{"type":35,"tag":36,"props":1287,"children":1288},{},[1289],{"type":44,"value":1290},"You'll see progress output as each asset completes.",{"type":35,"tag":124,"props":1292,"children":1294},{"id":1293},"_3-query-the-results",[1295],{"type":44,"value":1296},"3) Query the results",{"type":35,"tag":36,"props":1298,"children":1299},{},[1300],{"type":44,"value":1301},"After the pipeline finishes, query the transformed data:",{"type":35,"tag":147,"props":1303,"children":1305},{"className":149,"code":1304,"language":151,"meta":7,"style":7},"bruin query --c duckdb-default --q \"SELECT * FROM exchange_rate_summary LIMIT 10;\"\n",[1306],{"type":35,"tag":59,"props":1307,"children":1308},{"__ignoreMap":7},[1309],{"type":35,"tag":157,"props":1310,"children":1311},{"class":159,"line":160},[1312,1316,1321,1327,1332,1337],{"type":35,"tag":157,"props":1313,"children":1314},{"style":164},[1315],{"type":44,"value":167},{"type":35,"tag":157,"props":1317,"children":1318},{"style":170},[1319],{"type":44,"value":1320}," query",{"type":35,"tag":157,"props":1322,"children":1324},{"style":1323},"--shiki-default:#79B8FF",[1325],{"type":44,"value":1326}," --c",{"type":35,"tag":157,"props":1328,"children":1329},{"style":170},[1330],{"type":44,"value":1331}," duckdb-default",{"type":35,"tag":157,"props":1333,"children":1334},{"style":1323},[1335],{"type":44,"value":1336}," --q",{"type":35,"tag":157,"props":1338,"children":1339},{"style":170},[1340],{"type":44,"value":1341}," \"SELECT * FROM exchange_rate_summary LIMIT 10;\"\n",{"type":35,"tag":36,"props":1343,"children":1344},{},[1345],{"type":44,"value":1346},"You should see exchange rate data with dates, currency pairs, and rates - a clean analytical view created by the SQL transformation.",{"type":35,"tag":124,"props":1348,"children":1350},{"id":1349},"_4-explore-further",[1351],{"type":44,"value":1352},"4) Explore further",{"type":35,"tag":36,"props":1354,"children":1355},{},[1356],{"type":44,"value":1357},"Try querying the raw ingested data to see what the ingestr asset pulled:",{"type":35,"tag":147,"props":1359,"children":1361},{"className":149,"code":1360,"language":151,"meta":7,"style":7},"bruin query --c duckdb-default --q \"SELECT * FROM fx_rates LIMIT 10;\"\n",[1362],{"type":35,"tag":59,"props":1363,"children":1364},{"__ignoreMap":7},[1365],{"type":35,"tag":157,"props":1366,"children":1367},{"class":159,"line":160},[1368,1372,1376,1380,1384,1388],{"type":35,"tag":157,"props":1369,"children":1370},{"style":164},[1371],{"type":44,"value":167},{"type":35,"tag":157,"props":1373,"children":1374},{"style":170},[1375],{"type":44,"value":1320},{"type":35,"tag":157,"props":1377,"children":1378},{"style":1323},[1379],{"type":44,"value":1326},{"type":35,"tag":157,"props":1381,"children":1382},{"style":170},[1383],{"type":44,"value":1331},{"type":35,"tag":157,"props":1385,"children":1386},{"style":1323},[1387],{"type":44,"value":1336},{"type":35,"tag":157,"props":1389,"children":1390},{"style":170},[1391],{"type":44,"value":1392}," \"SELECT * FROM fx_rates LIMIT 10;\"\n",{"type":35,"tag":36,"props":1394,"children":1395},{},[1396],{"type":44,"value":1397},"You can modify the SQL asset to create different views, add new currencies, or change the date range. The template is a starting point - customize it to fit your needs.",{"type":35,"tag":93,"props":1399,"children":1400},{"id":1136},[1401],{"type":44,"value":1139},{"type":35,"tag":36,"props":1403,"children":1404},{},[1405],{"type":44,"value":1406},"You ran a complete pipeline that was set up entirely from a template. Data was fetched from the Frankfurter API, loaded into DuckDB, and transformed into an analytical view - all with minimal configuration. Templates let you skip the boilerplate and get straight to working with data.",{"type":35,"tag":392,"props":1408,"children":1409},{},[1410],{"type":44,"value":396},{"title":7,"searchDepth":398,"depth":398,"links":1412},[1413,1414,1415,1421],{"id":724,"depth":398,"text":727},{"id":742,"depth":398,"text":745},{"id":753,"depth":398,"text":756,"children":1416},[1417,1418,1419,1420],{"id":1203,"depth":404,"text":1206},{"id":1237,"depth":404,"text":1240},{"id":1293,"depth":404,"text":1296},{"id":1349,"depth":404,"text":1352},{"id":1136,"depth":398,"text":1139},"content:tutorials:bruin-templates:explore-run.md","tutorials/bruin-templates/explore-run.md","tutorials/bruin-templates/explore-run",1776427824362]