[{"data":1,"prerenderedAt":1939},["ShallowReactive",2],{"tutorial-chess-duckdb":3,"content-query-QiDqr757tq":638,"content-query-q9sTnJ7t0D":1123},{"_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":632,"_id":633,"_source":634,"_file":635,"_stem":636,"_extension":637},"/tutorials/chess-duckdb","tutorials",false,"","Chess Data to DuckDB","Build your first Bruin pipeline by ingesting chess API data and storing it in DuckDB - no credentials needed.","2026-04-15","Module","chess-duckdb",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},"DuckDB platform docs","https://getbruin.com/docs/bruin/platforms/duckdb.html",{"label":24,"url":25},"Ingestr asset type","https://getbruin.com/docs/bruin/assets/ingestr.html","/img/learn/tutorials/chesspipeline.gif",{"name":28,"role":29,"image":30},"Bruin Team","Bruin Data","/bruin-logo-2025.svg",{"type":32,"children":33,"toc":622},"root",[34,48,58,68,79,83,90,95,102,107,141,146,156,162,175,393,399,404,439,445,458,525,531,536,560,566,571,611,616],{"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 beginner-friendly tutorial where you build a complete data pipeline that pulls chess game data from a public API and loads it into DuckDB for analysis. No API keys or database credentials needed - the chess API is completely open and DuckDB runs locally.",{"type":35,"tag":36,"props":49,"children":50},{},[51,56],{"type":35,"tag":40,"props":52,"children":53},{},[54],{"type":44,"value":55},"What you'll learn:",{"type":44,"value":57}," How to initialize a Bruin project from a template, configure environments and connections, understand asset types (ingestr and SQL), and run a pipeline end-to-end.",{"type":35,"tag":36,"props":59,"children":60},{},[61,66],{"type":35,"tag":40,"props":62,"children":63},{},[64],{"type":44,"value":65},"What you'll build:",{"type":44,"value":67}," A pipeline that ingests chess games and player profiles for top grandmasters, then creates a summary table with player statistics including total games and win rates.",{"type":35,"tag":36,"props":69,"children":70},{},[71],{"type":35,"tag":72,"props":73,"children":76},"a",{"href":74,"style":75},"/learn/chess-duckdb/initialize-project","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;",[77],{"type":44,"value":78},"Start tutorial →",{"type":35,"tag":80,"props":81,"children":82},"hr",{},[],{"type":35,"tag":84,"props":85,"children":87},"h2",{"id":86},"full-tutorial",[88],{"type":44,"value":89},"Full tutorial",{"type":35,"tag":36,"props":91,"children":92},{},[93],{"type":44,"value":94},"Below is the complete tutorial you can read through, or use the step-by-step version above.",{"type":35,"tag":96,"props":97,"children":99},"h3",{"id":98},"initialize-the-project",[100],{"type":44,"value":101},"Initialize the project",{"type":35,"tag":36,"props":103,"children":104},{},[105],{"type":44,"value":106},"Run the following command to scaffold a new project using the built-in chess template:",{"type":35,"tag":108,"props":109,"children":113},"pre",{"className":110,"code":111,"language":112,"meta":7,"style":7},"language-bash shiki shiki-themes github-dark","bruin init chess\n","bash",[114],{"type":35,"tag":115,"props":116,"children":117},"code",{"__ignoreMap":7},[118],{"type":35,"tag":119,"props":120,"children":123},"span",{"class":121,"line":122},"line",1,[124,130,136],{"type":35,"tag":119,"props":125,"children":127},{"style":126},"--shiki-default:#B392F0",[128],{"type":44,"value":129},"bruin",{"type":35,"tag":119,"props":131,"children":133},{"style":132},"--shiki-default:#9ECBFF",[134],{"type":44,"value":135}," init",{"type":35,"tag":119,"props":137,"children":138},{"style":132},[139],{"type":44,"value":140}," chess\n",{"type":35,"tag":36,"props":142,"children":143},{},[144],{"type":44,"value":145},"This creates a folder structure with pre-configured assets and pipeline files:",{"type":35,"tag":108,"props":147,"children":151},{"className":148,"code":150,"language":44},[149],"language-text","chess/\n├── assets/\n│   ├── chess_games.asset.yml\n│   ├── chess_profiles.asset.yml\n│   └── player_summary.sql\n├── .bruin.yml\n├── pipeline.yml\n└── .gitignore\n",[152],{"type":35,"tag":115,"props":153,"children":154},{"__ignoreMap":7},[155],{"type":44,"value":150},{"type":35,"tag":96,"props":157,"children":159},{"id":158},"configure-the-environment",[160],{"type":44,"value":161},"Configure the environment",{"type":35,"tag":36,"props":163,"children":164},{},[165,167,173],{"type":44,"value":166},"Open ",{"type":35,"tag":115,"props":168,"children":170},{"className":169},[],[171],{"type":44,"value":172},".bruin.yml",{"type":44,"value":174}," and configure your environment with DuckDB and Chess API connections. Specify the list of chess players you want to track:",{"type":35,"tag":108,"props":176,"children":180},{"className":177,"code":178,"language":179,"meta":7,"style":7},"language-yaml shiki shiki-themes github-dark","environments:\n  default:\n    connections:\n      duckdb:\n        - name: \"duckdb-default\"\n          path: \"chess.db\"\n      chess:\n        - name: \"chess-default\"\n          players:\n            - \"FabianoCaruana\"\n            - \"Hikaru\"\n            - \"MagnusCarlsen\"\n            - \"GarryKasparov\"\n            - \"Firouzja2003\"\n","yaml",[181],{"type":35,"tag":115,"props":182,"children":183},{"__ignoreMap":7},[184,199,212,225,238,262,280,293,314,327,341,354,367,380],{"type":35,"tag":119,"props":185,"children":186},{"class":121,"line":122},[187,193],{"type":35,"tag":119,"props":188,"children":190},{"style":189},"--shiki-default:#85E89D",[191],{"type":44,"value":192},"environments",{"type":35,"tag":119,"props":194,"children":196},{"style":195},"--shiki-default:#E1E4E8",[197],{"type":44,"value":198},":\n",{"type":35,"tag":119,"props":200,"children":202},{"class":121,"line":201},2,[203,208],{"type":35,"tag":119,"props":204,"children":205},{"style":189},[206],{"type":44,"value":207},"  default",{"type":35,"tag":119,"props":209,"children":210},{"style":195},[211],{"type":44,"value":198},{"type":35,"tag":119,"props":213,"children":215},{"class":121,"line":214},3,[216,221],{"type":35,"tag":119,"props":217,"children":218},{"style":189},[219],{"type":44,"value":220},"    connections",{"type":35,"tag":119,"props":222,"children":223},{"style":195},[224],{"type":44,"value":198},{"type":35,"tag":119,"props":226,"children":228},{"class":121,"line":227},4,[229,234],{"type":35,"tag":119,"props":230,"children":231},{"style":189},[232],{"type":44,"value":233},"      duckdb",{"type":35,"tag":119,"props":235,"children":236},{"style":195},[237],{"type":44,"value":198},{"type":35,"tag":119,"props":239,"children":241},{"class":121,"line":240},5,[242,247,252,257],{"type":35,"tag":119,"props":243,"children":244},{"style":195},[245],{"type":44,"value":246},"        - ",{"type":35,"tag":119,"props":248,"children":249},{"style":189},[250],{"type":44,"value":251},"name",{"type":35,"tag":119,"props":253,"children":254},{"style":195},[255],{"type":44,"value":256},": ",{"type":35,"tag":119,"props":258,"children":259},{"style":132},[260],{"type":44,"value":261},"\"duckdb-default\"\n",{"type":35,"tag":119,"props":263,"children":265},{"class":121,"line":264},6,[266,271,275],{"type":35,"tag":119,"props":267,"children":268},{"style":189},[269],{"type":44,"value":270},"          path",{"type":35,"tag":119,"props":272,"children":273},{"style":195},[274],{"type":44,"value":256},{"type":35,"tag":119,"props":276,"children":277},{"style":132},[278],{"type":44,"value":279},"\"chess.db\"\n",{"type":35,"tag":119,"props":281,"children":283},{"class":121,"line":282},7,[284,289],{"type":35,"tag":119,"props":285,"children":286},{"style":189},[287],{"type":44,"value":288},"      chess",{"type":35,"tag":119,"props":290,"children":291},{"style":195},[292],{"type":44,"value":198},{"type":35,"tag":119,"props":294,"children":296},{"class":121,"line":295},8,[297,301,305,309],{"type":35,"tag":119,"props":298,"children":299},{"style":195},[300],{"type":44,"value":246},{"type":35,"tag":119,"props":302,"children":303},{"style":189},[304],{"type":44,"value":251},{"type":35,"tag":119,"props":306,"children":307},{"style":195},[308],{"type":44,"value":256},{"type":35,"tag":119,"props":310,"children":311},{"style":132},[312],{"type":44,"value":313},"\"chess-default\"\n",{"type":35,"tag":119,"props":315,"children":317},{"class":121,"line":316},9,[318,323],{"type":35,"tag":119,"props":319,"children":320},{"style":189},[321],{"type":44,"value":322},"          players",{"type":35,"tag":119,"props":324,"children":325},{"style":195},[326],{"type":44,"value":198},{"type":35,"tag":119,"props":328,"children":330},{"class":121,"line":329},10,[331,336],{"type":35,"tag":119,"props":332,"children":333},{"style":195},[334],{"type":44,"value":335},"            - ",{"type":35,"tag":119,"props":337,"children":338},{"style":132},[339],{"type":44,"value":340},"\"FabianoCaruana\"\n",{"type":35,"tag":119,"props":342,"children":344},{"class":121,"line":343},11,[345,349],{"type":35,"tag":119,"props":346,"children":347},{"style":195},[348],{"type":44,"value":335},{"type":35,"tag":119,"props":350,"children":351},{"style":132},[352],{"type":44,"value":353},"\"Hikaru\"\n",{"type":35,"tag":119,"props":355,"children":357},{"class":121,"line":356},12,[358,362],{"type":35,"tag":119,"props":359,"children":360},{"style":195},[361],{"type":44,"value":335},{"type":35,"tag":119,"props":363,"children":364},{"style":132},[365],{"type":44,"value":366},"\"MagnusCarlsen\"\n",{"type":35,"tag":119,"props":368,"children":370},{"class":121,"line":369},13,[371,375],{"type":35,"tag":119,"props":372,"children":373},{"style":195},[374],{"type":44,"value":335},{"type":35,"tag":119,"props":376,"children":377},{"style":132},[378],{"type":44,"value":379},"\"GarryKasparov\"\n",{"type":35,"tag":119,"props":381,"children":383},{"class":121,"line":382},14,[384,388],{"type":35,"tag":119,"props":385,"children":386},{"style":195},[387],{"type":44,"value":335},{"type":35,"tag":119,"props":389,"children":390},{"style":132},[391],{"type":44,"value":392},"\"Firouzja2003\"\n",{"type":35,"tag":96,"props":394,"children":396},{"id":395},"review-the-assets",[397],{"type":44,"value":398},"Review the assets",{"type":35,"tag":36,"props":400,"children":401},{},[402],{"type":44,"value":403},"The template includes three pre-configured assets:",{"type":35,"tag":405,"props":406,"children":407},"ul",{},[408,419,429],{"type":35,"tag":409,"props":410,"children":411},"li",{},[412,417],{"type":35,"tag":40,"props":413,"children":414},{},[415],{"type":44,"value":416},"chess_games.asset.yml",{"type":44,"value":418}," — An ingestr asset that fetches game data for each player from the Chess.com API.",{"type":35,"tag":409,"props":420,"children":421},{},[422,427],{"type":35,"tag":40,"props":423,"children":424},{},[425],{"type":44,"value":426},"chess_profiles.asset.yml",{"type":44,"value":428}," — An ingestr asset that fetches player profile information.",{"type":35,"tag":409,"props":430,"children":431},{},[432,437],{"type":35,"tag":40,"props":433,"children":434},{},[435],{"type":44,"value":436},"player_summary.sql",{"type":44,"value":438}," — A SQL asset that joins games and profiles to create a summary table with statistics like total games and win rates.",{"type":35,"tag":96,"props":440,"children":442},{"id":441},"examine-the-pipeline",[443],{"type":44,"value":444},"Examine the pipeline",{"type":35,"tag":36,"props":446,"children":447},{},[448,450,456],{"type":44,"value":449},"The ",{"type":35,"tag":115,"props":451,"children":453},{"className":452},[],[454],{"type":44,"value":455},"pipeline.yml",{"type":44,"value":457}," file defines the pipeline name and default connections:",{"type":35,"tag":108,"props":459,"children":461},{"className":177,"code":460,"language":179,"meta":7,"style":7},"name: chess\ndefault_connections:\n  duckdb: \"duckdb-default\"\n  chess: \"chess-default\"\n",[462],{"type":35,"tag":115,"props":463,"children":464},{"__ignoreMap":7},[465,481,493,509],{"type":35,"tag":119,"props":466,"children":467},{"class":121,"line":122},[468,472,476],{"type":35,"tag":119,"props":469,"children":470},{"style":189},[471],{"type":44,"value":251},{"type":35,"tag":119,"props":473,"children":474},{"style":195},[475],{"type":44,"value":256},{"type":35,"tag":119,"props":477,"children":478},{"style":132},[479],{"type":44,"value":480},"chess\n",{"type":35,"tag":119,"props":482,"children":483},{"class":121,"line":201},[484,489],{"type":35,"tag":119,"props":485,"children":486},{"style":189},[487],{"type":44,"value":488},"default_connections",{"type":35,"tag":119,"props":490,"children":491},{"style":195},[492],{"type":44,"value":198},{"type":35,"tag":119,"props":494,"children":495},{"class":121,"line":214},[496,501,505],{"type":35,"tag":119,"props":497,"children":498},{"style":189},[499],{"type":44,"value":500},"  duckdb",{"type":35,"tag":119,"props":502,"children":503},{"style":195},[504],{"type":44,"value":256},{"type":35,"tag":119,"props":506,"children":507},{"style":132},[508],{"type":44,"value":261},{"type":35,"tag":119,"props":510,"children":511},{"class":121,"line":227},[512,517,521],{"type":35,"tag":119,"props":513,"children":514},{"style":189},[515],{"type":44,"value":516},"  chess",{"type":35,"tag":119,"props":518,"children":519},{"style":195},[520],{"type":44,"value":256},{"type":35,"tag":119,"props":522,"children":523},{"style":132},[524],{"type":44,"value":313},{"type":35,"tag":96,"props":526,"children":528},{"id":527},"run-the-pipeline",[529],{"type":44,"value":530},"Run the pipeline",{"type":35,"tag":36,"props":532,"children":533},{},[534],{"type":44,"value":535},"Execute the pipeline to ingest data:",{"type":35,"tag":108,"props":537,"children":539},{"className":110,"code":538,"language":112,"meta":7,"style":7},"bruin run ./chess/pipeline.yml\n",[540],{"type":35,"tag":115,"props":541,"children":542},{"__ignoreMap":7},[543],{"type":35,"tag":119,"props":544,"children":545},{"class":121,"line":122},[546,550,555],{"type":35,"tag":119,"props":547,"children":548},{"style":126},[549],{"type":44,"value":129},{"type":35,"tag":119,"props":551,"children":552},{"style":132},[553],{"type":44,"value":554}," run",{"type":35,"tag":119,"props":556,"children":557},{"style":132},[558],{"type":44,"value":559}," ./chess/pipeline.yml\n",{"type":35,"tag":96,"props":561,"children":563},{"id":562},"query-the-results",[564],{"type":44,"value":565},"Query the results",{"type":35,"tag":36,"props":567,"children":568},{},[569],{"type":44,"value":570},"Once the pipeline completes, query the results to verify everything worked:",{"type":35,"tag":108,"props":572,"children":574},{"className":110,"code":573,"language":112,"meta":7,"style":7},"bruin query --c duckdb-default --q \"SELECT * FROM chess_playground.player_summary LIMIT 10;\"\n",[575],{"type":35,"tag":115,"props":576,"children":577},{"__ignoreMap":7},[578],{"type":35,"tag":119,"props":579,"children":580},{"class":121,"line":122},[581,585,590,596,601,606],{"type":35,"tag":119,"props":582,"children":583},{"style":126},[584],{"type":44,"value":129},{"type":35,"tag":119,"props":586,"children":587},{"style":132},[588],{"type":44,"value":589}," query",{"type":35,"tag":119,"props":591,"children":593},{"style":592},"--shiki-default:#79B8FF",[594],{"type":44,"value":595}," --c",{"type":35,"tag":119,"props":597,"children":598},{"style":132},[599],{"type":44,"value":600}," duckdb-default",{"type":35,"tag":119,"props":602,"children":603},{"style":592},[604],{"type":44,"value":605}," --q",{"type":35,"tag":119,"props":607,"children":608},{"style":132},[609],{"type":44,"value":610}," \"SELECT * FROM chess_playground.player_summary LIMIT 10;\"\n",{"type":35,"tag":36,"props":612,"children":613},{},[614],{"type":44,"value":615},"You should see a table with player statistics including usernames, total games, wins, losses, and win rates.",{"type":35,"tag":617,"props":618,"children":619},"style",{},[620],{"type":44,"value":621},"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":201,"depth":201,"links":623},[624],{"id":86,"depth":201,"text":89,"children":625},[626,627,628,629,630,631],{"id":98,"depth":214,"text":101},{"id":158,"depth":214,"text":161},{"id":395,"depth":214,"text":398},{"id":441,"depth":214,"text":444},{"id":527,"depth":214,"text":530},{"id":562,"depth":214,"text":565},"markdown","content:tutorials:chess-duckdb:index.md","content","tutorials/chess-duckdb/index.md","tutorials/chess-duckdb/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":639,"resources":640,"heroGif":26,"author":644,"body":645,"_type":632,"_id":633,"_source":634,"_file":635,"_stem":636,"_extension":637},[15],[641,642,643],{"label":18,"url":19},{"label":21,"url":22},{"label":24,"url":25},{"name":28,"role":29,"image":30},{"type":32,"children":646,"toc":1113},[647,655,663,671,678,681,685,689,693,697,718,722,730,734,744,924,928,932,959,963,973,1035,1039,1043,1064,1068,1072,1105,1109],{"type":35,"tag":36,"props":648,"children":649},{},[650,654],{"type":35,"tag":40,"props":651,"children":652},{},[653],{"type":44,"value":45},{"type":44,"value":47},{"type":35,"tag":36,"props":656,"children":657},{},[658,662],{"type":35,"tag":40,"props":659,"children":660},{},[661],{"type":44,"value":55},{"type":44,"value":57},{"type":35,"tag":36,"props":664,"children":665},{},[666,670],{"type":35,"tag":40,"props":667,"children":668},{},[669],{"type":44,"value":65},{"type":44,"value":67},{"type":35,"tag":36,"props":672,"children":673},{},[674],{"type":35,"tag":72,"props":675,"children":676},{"href":74,"style":75},[677],{"type":44,"value":78},{"type":35,"tag":80,"props":679,"children":680},{},[],{"type":35,"tag":84,"props":682,"children":683},{"id":86},[684],{"type":44,"value":89},{"type":35,"tag":36,"props":686,"children":687},{},[688],{"type":44,"value":94},{"type":35,"tag":96,"props":690,"children":691},{"id":98},[692],{"type":44,"value":101},{"type":35,"tag":36,"props":694,"children":695},{},[696],{"type":44,"value":106},{"type":35,"tag":108,"props":698,"children":699},{"className":110,"code":111,"language":112,"meta":7,"style":7},[700],{"type":35,"tag":115,"props":701,"children":702},{"__ignoreMap":7},[703],{"type":35,"tag":119,"props":704,"children":705},{"class":121,"line":122},[706,710,714],{"type":35,"tag":119,"props":707,"children":708},{"style":126},[709],{"type":44,"value":129},{"type":35,"tag":119,"props":711,"children":712},{"style":132},[713],{"type":44,"value":135},{"type":35,"tag":119,"props":715,"children":716},{"style":132},[717],{"type":44,"value":140},{"type":35,"tag":36,"props":719,"children":720},{},[721],{"type":44,"value":145},{"type":35,"tag":108,"props":723,"children":725},{"className":724,"code":150,"language":44},[149],[726],{"type":35,"tag":115,"props":727,"children":728},{"__ignoreMap":7},[729],{"type":44,"value":150},{"type":35,"tag":96,"props":731,"children":732},{"id":158},[733],{"type":44,"value":161},{"type":35,"tag":36,"props":735,"children":736},{},[737,738,743],{"type":44,"value":166},{"type":35,"tag":115,"props":739,"children":741},{"className":740},[],[742],{"type":44,"value":172},{"type":44,"value":174},{"type":35,"tag":108,"props":745,"children":746},{"className":177,"code":178,"language":179,"meta":7,"style":7},[747],{"type":35,"tag":115,"props":748,"children":749},{"__ignoreMap":7},[750,761,772,783,794,813,828,839,858,869,880,891,902,913],{"type":35,"tag":119,"props":751,"children":752},{"class":121,"line":122},[753,757],{"type":35,"tag":119,"props":754,"children":755},{"style":189},[756],{"type":44,"value":192},{"type":35,"tag":119,"props":758,"children":759},{"style":195},[760],{"type":44,"value":198},{"type":35,"tag":119,"props":762,"children":763},{"class":121,"line":201},[764,768],{"type":35,"tag":119,"props":765,"children":766},{"style":189},[767],{"type":44,"value":207},{"type":35,"tag":119,"props":769,"children":770},{"style":195},[771],{"type":44,"value":198},{"type":35,"tag":119,"props":773,"children":774},{"class":121,"line":214},[775,779],{"type":35,"tag":119,"props":776,"children":777},{"style":189},[778],{"type":44,"value":220},{"type":35,"tag":119,"props":780,"children":781},{"style":195},[782],{"type":44,"value":198},{"type":35,"tag":119,"props":784,"children":785},{"class":121,"line":227},[786,790],{"type":35,"tag":119,"props":787,"children":788},{"style":189},[789],{"type":44,"value":233},{"type":35,"tag":119,"props":791,"children":792},{"style":195},[793],{"type":44,"value":198},{"type":35,"tag":119,"props":795,"children":796},{"class":121,"line":240},[797,801,805,809],{"type":35,"tag":119,"props":798,"children":799},{"style":195},[800],{"type":44,"value":246},{"type":35,"tag":119,"props":802,"children":803},{"style":189},[804],{"type":44,"value":251},{"type":35,"tag":119,"props":806,"children":807},{"style":195},[808],{"type":44,"value":256},{"type":35,"tag":119,"props":810,"children":811},{"style":132},[812],{"type":44,"value":261},{"type":35,"tag":119,"props":814,"children":815},{"class":121,"line":264},[816,820,824],{"type":35,"tag":119,"props":817,"children":818},{"style":189},[819],{"type":44,"value":270},{"type":35,"tag":119,"props":821,"children":822},{"style":195},[823],{"type":44,"value":256},{"type":35,"tag":119,"props":825,"children":826},{"style":132},[827],{"type":44,"value":279},{"type":35,"tag":119,"props":829,"children":830},{"class":121,"line":282},[831,835],{"type":35,"tag":119,"props":832,"children":833},{"style":189},[834],{"type":44,"value":288},{"type":35,"tag":119,"props":836,"children":837},{"style":195},[838],{"type":44,"value":198},{"type":35,"tag":119,"props":840,"children":841},{"class":121,"line":295},[842,846,850,854],{"type":35,"tag":119,"props":843,"children":844},{"style":195},[845],{"type":44,"value":246},{"type":35,"tag":119,"props":847,"children":848},{"style":189},[849],{"type":44,"value":251},{"type":35,"tag":119,"props":851,"children":852},{"style":195},[853],{"type":44,"value":256},{"type":35,"tag":119,"props":855,"children":856},{"style":132},[857],{"type":44,"value":313},{"type":35,"tag":119,"props":859,"children":860},{"class":121,"line":316},[861,865],{"type":35,"tag":119,"props":862,"children":863},{"style":189},[864],{"type":44,"value":322},{"type":35,"tag":119,"props":866,"children":867},{"style":195},[868],{"type":44,"value":198},{"type":35,"tag":119,"props":870,"children":871},{"class":121,"line":329},[872,876],{"type":35,"tag":119,"props":873,"children":874},{"style":195},[875],{"type":44,"value":335},{"type":35,"tag":119,"props":877,"children":878},{"style":132},[879],{"type":44,"value":340},{"type":35,"tag":119,"props":881,"children":882},{"class":121,"line":343},[883,887],{"type":35,"tag":119,"props":884,"children":885},{"style":195},[886],{"type":44,"value":335},{"type":35,"tag":119,"props":888,"children":889},{"style":132},[890],{"type":44,"value":353},{"type":35,"tag":119,"props":892,"children":893},{"class":121,"line":356},[894,898],{"type":35,"tag":119,"props":895,"children":896},{"style":195},[897],{"type":44,"value":335},{"type":35,"tag":119,"props":899,"children":900},{"style":132},[901],{"type":44,"value":366},{"type":35,"tag":119,"props":903,"children":904},{"class":121,"line":369},[905,909],{"type":35,"tag":119,"props":906,"children":907},{"style":195},[908],{"type":44,"value":335},{"type":35,"tag":119,"props":910,"children":911},{"style":132},[912],{"type":44,"value":379},{"type":35,"tag":119,"props":914,"children":915},{"class":121,"line":382},[916,920],{"type":35,"tag":119,"props":917,"children":918},{"style":195},[919],{"type":44,"value":335},{"type":35,"tag":119,"props":921,"children":922},{"style":132},[923],{"type":44,"value":392},{"type":35,"tag":96,"props":925,"children":926},{"id":395},[927],{"type":44,"value":398},{"type":35,"tag":36,"props":929,"children":930},{},[931],{"type":44,"value":403},{"type":35,"tag":405,"props":933,"children":934},{},[935,943,951],{"type":35,"tag":409,"props":936,"children":937},{},[938,942],{"type":35,"tag":40,"props":939,"children":940},{},[941],{"type":44,"value":416},{"type":44,"value":418},{"type":35,"tag":409,"props":944,"children":945},{},[946,950],{"type":35,"tag":40,"props":947,"children":948},{},[949],{"type":44,"value":426},{"type":44,"value":428},{"type":35,"tag":409,"props":952,"children":953},{},[954,958],{"type":35,"tag":40,"props":955,"children":956},{},[957],{"type":44,"value":436},{"type":44,"value":438},{"type":35,"tag":96,"props":960,"children":961},{"id":441},[962],{"type":44,"value":444},{"type":35,"tag":36,"props":964,"children":965},{},[966,967,972],{"type":44,"value":449},{"type":35,"tag":115,"props":968,"children":970},{"className":969},[],[971],{"type":44,"value":455},{"type":44,"value":457},{"type":35,"tag":108,"props":974,"children":975},{"className":177,"code":460,"language":179,"meta":7,"style":7},[976],{"type":35,"tag":115,"props":977,"children":978},{"__ignoreMap":7},[979,994,1005,1020],{"type":35,"tag":119,"props":980,"children":981},{"class":121,"line":122},[982,986,990],{"type":35,"tag":119,"props":983,"children":984},{"style":189},[985],{"type":44,"value":251},{"type":35,"tag":119,"props":987,"children":988},{"style":195},[989],{"type":44,"value":256},{"type":35,"tag":119,"props":991,"children":992},{"style":132},[993],{"type":44,"value":480},{"type":35,"tag":119,"props":995,"children":996},{"class":121,"line":201},[997,1001],{"type":35,"tag":119,"props":998,"children":999},{"style":189},[1000],{"type":44,"value":488},{"type":35,"tag":119,"props":1002,"children":1003},{"style":195},[1004],{"type":44,"value":198},{"type":35,"tag":119,"props":1006,"children":1007},{"class":121,"line":214},[1008,1012,1016],{"type":35,"tag":119,"props":1009,"children":1010},{"style":189},[1011],{"type":44,"value":500},{"type":35,"tag":119,"props":1013,"children":1014},{"style":195},[1015],{"type":44,"value":256},{"type":35,"tag":119,"props":1017,"children":1018},{"style":132},[1019],{"type":44,"value":261},{"type":35,"tag":119,"props":1021,"children":1022},{"class":121,"line":227},[1023,1027,1031],{"type":35,"tag":119,"props":1024,"children":1025},{"style":189},[1026],{"type":44,"value":516},{"type":35,"tag":119,"props":1028,"children":1029},{"style":195},[1030],{"type":44,"value":256},{"type":35,"tag":119,"props":1032,"children":1033},{"style":132},[1034],{"type":44,"value":313},{"type":35,"tag":96,"props":1036,"children":1037},{"id":527},[1038],{"type":44,"value":530},{"type":35,"tag":36,"props":1040,"children":1041},{},[1042],{"type":44,"value":535},{"type":35,"tag":108,"props":1044,"children":1045},{"className":110,"code":538,"language":112,"meta":7,"style":7},[1046],{"type":35,"tag":115,"props":1047,"children":1048},{"__ignoreMap":7},[1049],{"type":35,"tag":119,"props":1050,"children":1051},{"class":121,"line":122},[1052,1056,1060],{"type":35,"tag":119,"props":1053,"children":1054},{"style":126},[1055],{"type":44,"value":129},{"type":35,"tag":119,"props":1057,"children":1058},{"style":132},[1059],{"type":44,"value":554},{"type":35,"tag":119,"props":1061,"children":1062},{"style":132},[1063],{"type":44,"value":559},{"type":35,"tag":96,"props":1065,"children":1066},{"id":562},[1067],{"type":44,"value":565},{"type":35,"tag":36,"props":1069,"children":1070},{},[1071],{"type":44,"value":570},{"type":35,"tag":108,"props":1073,"children":1074},{"className":110,"code":573,"language":112,"meta":7,"style":7},[1075],{"type":35,"tag":115,"props":1076,"children":1077},{"__ignoreMap":7},[1078],{"type":35,"tag":119,"props":1079,"children":1080},{"class":121,"line":122},[1081,1085,1089,1093,1097,1101],{"type":35,"tag":119,"props":1082,"children":1083},{"style":126},[1084],{"type":44,"value":129},{"type":35,"tag":119,"props":1086,"children":1087},{"style":132},[1088],{"type":44,"value":589},{"type":35,"tag":119,"props":1090,"children":1091},{"style":592},[1092],{"type":44,"value":595},{"type":35,"tag":119,"props":1094,"children":1095},{"style":132},[1096],{"type":44,"value":600},{"type":35,"tag":119,"props":1098,"children":1099},{"style":592},[1100],{"type":44,"value":605},{"type":35,"tag":119,"props":1102,"children":1103},{"style":132},[1104],{"type":44,"value":610},{"type":35,"tag":36,"props":1106,"children":1107},{},[1108],{"type":44,"value":615},{"type":35,"tag":617,"props":1110,"children":1111},{},[1112],{"type":44,"value":621},{"title":7,"searchDepth":201,"depth":201,"links":1114},[1115],{"id":86,"depth":201,"text":89,"children":1116},[1117,1118,1119,1120,1121,1122],{"id":98,"depth":214,"text":101},{"id":158,"depth":214,"text":161},{"id":395,"depth":214,"text":398},{"id":441,"depth":214,"text":444},{"id":527,"depth":214,"text":530},{"id":562,"depth":214,"text":565},[1124,1620],{"_path":1125,"_dir":12,"_draft":6,"_partial":6,"_locale":7,"title":1126,"description":1127,"date":10,"readingTime":240,"category":1128,"tags":1129,"difficulty":1132,"module":12,"step":122,"subSteps":13,"learnMore":1133,"author":1139,"body":1140,"_type":632,"_id":1617,"_source":634,"_file":1618,"_stem":1619,"_extension":637},"/tutorials/chess-duckdb/initialize-project","Initialize & Configure","Scaffold a chess data project from a template and configure your DuckDB and Chess API connections.","Tutorial",[1130,1131],"Bruin CLI","DuckDB","Beginner",[1134,1137],{"label":1135,"url":1136},"Bruin project structure (docs)","https://getbruin.com/docs/bruin/core-concepts/project.html",{"label":1138,"url":22},"DuckDB connection reference",{"name":28,"role":29,"image":30},{"type":32,"children":1141,"toc":1606},[1142,1148,1153,1159,1164,1170,1176,1185,1190,1211,1216,1225,1230,1236,1247,1427,1447,1453,1466,1475,1484,1493,1499,1510,1572,1591,1597,1602],{"type":35,"tag":84,"props":1143,"children":1145},{"id":1144},"what-youll-do",[1146],{"type":44,"value":1147},"What you'll do",{"type":35,"tag":36,"props":1149,"children":1150},{},[1151],{"type":44,"value":1152},"Scaffold a new Bruin project using the built-in chess template, then configure the environment with DuckDB and Chess API connections.",{"type":35,"tag":84,"props":1154,"children":1156},{"id":1155},"why-this-step-matters",[1157],{"type":44,"value":1158},"Why this step matters",{"type":35,"tag":36,"props":1160,"children":1161},{},[1162],{"type":44,"value":1163},"The chess template gives you a working pipeline out of the box - no API keys or database setup required. It's the fastest way to see Bruin in action and understand how projects, pipelines, and assets fit together.",{"type":35,"tag":84,"props":1165,"children":1167},{"id":1166},"instructions",[1168],{"type":44,"value":1169},"Instructions",{"type":35,"tag":96,"props":1171,"children":1173},{"id":1172},"_1-initialize-the-project",[1174],{"type":44,"value":1175},"1) Initialize the project",{"type":35,"tag":36,"props":1177,"children":1178},{},[1179],{"type":35,"tag":1180,"props":1181,"children":1184},"img",{"alt":1182,"src":1183},"bruin init command","/img/learn/tutorials/init.gif",[],{"type":35,"tag":36,"props":1186,"children":1187},{},[1188],{"type":44,"value":1189},"Run the following command to create a new project from the chess template:",{"type":35,"tag":108,"props":1191,"children":1192},{"className":110,"code":111,"language":112,"meta":7,"style":7},[1193],{"type":35,"tag":115,"props":1194,"children":1195},{"__ignoreMap":7},[1196],{"type":35,"tag":119,"props":1197,"children":1198},{"class":121,"line":122},[1199,1203,1207],{"type":35,"tag":119,"props":1200,"children":1201},{"style":126},[1202],{"type":44,"value":129},{"type":35,"tag":119,"props":1204,"children":1205},{"style":132},[1206],{"type":44,"value":135},{"type":35,"tag":119,"props":1208,"children":1209},{"style":132},[1210],{"type":44,"value":140},{"type":35,"tag":36,"props":1212,"children":1213},{},[1214],{"type":44,"value":1215},"This scaffolds a complete project with the following structure:",{"type":35,"tag":108,"props":1217,"children":1220},{"className":1218,"code":1219,"language":44},[149],"chess/\n├── assets/\n│   ├── chess_games.asset.yml\n│   ├── chess_profiles.asset.yml\n│   └── player_summary.sql\n├── .bruin.yml\n├── pipeline.yml\n├── .gitignore\n└── README.md\n",[1221],{"type":35,"tag":115,"props":1222,"children":1223},{"__ignoreMap":7},[1224],{"type":44,"value":1219},{"type":35,"tag":36,"props":1226,"children":1227},{},[1228],{"type":44,"value":1229},"The template includes everything you need: ingestion assets for chess data, a SQL transformation, and configuration files.",{"type":35,"tag":96,"props":1231,"children":1233},{"id":1232},"_2-configure-the-environment",[1234],{"type":44,"value":1235},"2) Configure the environment",{"type":35,"tag":36,"props":1237,"children":1238},{},[1239,1240,1245],{"type":44,"value":166},{"type":35,"tag":115,"props":1241,"children":1243},{"className":1242},[],[1244],{"type":44,"value":172},{"type":44,"value":1246}," in your editor. This file defines your environments and connections. Configure it with DuckDB as your local warehouse and the Chess API as your data source:",{"type":35,"tag":108,"props":1248,"children":1249},{"className":177,"code":178,"language":179,"meta":7,"style":7},[1250],{"type":35,"tag":115,"props":1251,"children":1252},{"__ignoreMap":7},[1253,1264,1275,1286,1297,1316,1331,1342,1361,1372,1383,1394,1405,1416],{"type":35,"tag":119,"props":1254,"children":1255},{"class":121,"line":122},[1256,1260],{"type":35,"tag":119,"props":1257,"children":1258},{"style":189},[1259],{"type":44,"value":192},{"type":35,"tag":119,"props":1261,"children":1262},{"style":195},[1263],{"type":44,"value":198},{"type":35,"tag":119,"props":1265,"children":1266},{"class":121,"line":201},[1267,1271],{"type":35,"tag":119,"props":1268,"children":1269},{"style":189},[1270],{"type":44,"value":207},{"type":35,"tag":119,"props":1272,"children":1273},{"style":195},[1274],{"type":44,"value":198},{"type":35,"tag":119,"props":1276,"children":1277},{"class":121,"line":214},[1278,1282],{"type":35,"tag":119,"props":1279,"children":1280},{"style":189},[1281],{"type":44,"value":220},{"type":35,"tag":119,"props":1283,"children":1284},{"style":195},[1285],{"type":44,"value":198},{"type":35,"tag":119,"props":1287,"children":1288},{"class":121,"line":227},[1289,1293],{"type":35,"tag":119,"props":1290,"children":1291},{"style":189},[1292],{"type":44,"value":233},{"type":35,"tag":119,"props":1294,"children":1295},{"style":195},[1296],{"type":44,"value":198},{"type":35,"tag":119,"props":1298,"children":1299},{"class":121,"line":240},[1300,1304,1308,1312],{"type":35,"tag":119,"props":1301,"children":1302},{"style":195},[1303],{"type":44,"value":246},{"type":35,"tag":119,"props":1305,"children":1306},{"style":189},[1307],{"type":44,"value":251},{"type":35,"tag":119,"props":1309,"children":1310},{"style":195},[1311],{"type":44,"value":256},{"type":35,"tag":119,"props":1313,"children":1314},{"style":132},[1315],{"type":44,"value":261},{"type":35,"tag":119,"props":1317,"children":1318},{"class":121,"line":264},[1319,1323,1327],{"type":35,"tag":119,"props":1320,"children":1321},{"style":189},[1322],{"type":44,"value":270},{"type":35,"tag":119,"props":1324,"children":1325},{"style":195},[1326],{"type":44,"value":256},{"type":35,"tag":119,"props":1328,"children":1329},{"style":132},[1330],{"type":44,"value":279},{"type":35,"tag":119,"props":1332,"children":1333},{"class":121,"line":282},[1334,1338],{"type":35,"tag":119,"props":1335,"children":1336},{"style":189},[1337],{"type":44,"value":288},{"type":35,"tag":119,"props":1339,"children":1340},{"style":195},[1341],{"type":44,"value":198},{"type":35,"tag":119,"props":1343,"children":1344},{"class":121,"line":295},[1345,1349,1353,1357],{"type":35,"tag":119,"props":1346,"children":1347},{"style":195},[1348],{"type":44,"value":246},{"type":35,"tag":119,"props":1350,"children":1351},{"style":189},[1352],{"type":44,"value":251},{"type":35,"tag":119,"props":1354,"children":1355},{"style":195},[1356],{"type":44,"value":256},{"type":35,"tag":119,"props":1358,"children":1359},{"style":132},[1360],{"type":44,"value":313},{"type":35,"tag":119,"props":1362,"children":1363},{"class":121,"line":316},[1364,1368],{"type":35,"tag":119,"props":1365,"children":1366},{"style":189},[1367],{"type":44,"value":322},{"type":35,"tag":119,"props":1369,"children":1370},{"style":195},[1371],{"type":44,"value":198},{"type":35,"tag":119,"props":1373,"children":1374},{"class":121,"line":329},[1375,1379],{"type":35,"tag":119,"props":1376,"children":1377},{"style":195},[1378],{"type":44,"value":335},{"type":35,"tag":119,"props":1380,"children":1381},{"style":132},[1382],{"type":44,"value":340},{"type":35,"tag":119,"props":1384,"children":1385},{"class":121,"line":343},[1386,1390],{"type":35,"tag":119,"props":1387,"children":1388},{"style":195},[1389],{"type":44,"value":335},{"type":35,"tag":119,"props":1391,"children":1392},{"style":132},[1393],{"type":44,"value":353},{"type":35,"tag":119,"props":1395,"children":1396},{"class":121,"line":356},[1397,1401],{"type":35,"tag":119,"props":1398,"children":1399},{"style":195},[1400],{"type":44,"value":335},{"type":35,"tag":119,"props":1402,"children":1403},{"style":132},[1404],{"type":44,"value":366},{"type":35,"tag":119,"props":1406,"children":1407},{"class":121,"line":369},[1408,1412],{"type":35,"tag":119,"props":1409,"children":1410},{"style":195},[1411],{"type":44,"value":335},{"type":35,"tag":119,"props":1413,"children":1414},{"style":132},[1415],{"type":44,"value":379},{"type":35,"tag":119,"props":1417,"children":1418},{"class":121,"line":382},[1419,1423],{"type":35,"tag":119,"props":1420,"children":1421},{"style":195},[1422],{"type":44,"value":335},{"type":35,"tag":119,"props":1424,"children":1425},{"style":132},[1426],{"type":44,"value":392},{"type":35,"tag":36,"props":1428,"children":1429},{},[1430,1431,1437,1439,1445],{"type":44,"value":449},{"type":35,"tag":115,"props":1432,"children":1434},{"className":1433},[],[1435],{"type":44,"value":1436},"duckdb-default",{"type":44,"value":1438}," connection creates a local DuckDB file. The ",{"type":35,"tag":115,"props":1440,"children":1442},{"className":1441},[],[1443],{"type":44,"value":1444},"chess-default",{"type":44,"value":1446}," connection specifies which chess players to track - feel free to add or change the usernames.",{"type":35,"tag":96,"props":1448,"children":1450},{"id":1449},"_3-review-the-assets",[1451],{"type":44,"value":1452},"3) Review the assets",{"type":35,"tag":36,"props":1454,"children":1455},{},[1456,1458,1464],{"type":44,"value":1457},"The template includes three pre-configured assets in the ",{"type":35,"tag":115,"props":1459,"children":1461},{"className":1460},[],[1462],{"type":44,"value":1463},"assets/",{"type":44,"value":1465}," folder:",{"type":35,"tag":36,"props":1467,"children":1468},{},[1469,1473],{"type":35,"tag":40,"props":1470,"children":1471},{},[1472],{"type":44,"value":416},{"type":44,"value":1474}," — An ingestr asset that fetches game history for each player from the Chess.com API.",{"type":35,"tag":36,"props":1476,"children":1477},{},[1478,1482],{"type":35,"tag":40,"props":1479,"children":1480},{},[1481],{"type":44,"value":426},{"type":44,"value":1483}," — An ingestr asset that fetches player profile information including ratings and account details.",{"type":35,"tag":36,"props":1485,"children":1486},{},[1487,1491],{"type":35,"tag":40,"props":1488,"children":1489},{},[1490],{"type":44,"value":436},{"type":44,"value":1492}," — A SQL asset that joins games and profiles to produce a summary table. This asset depends on the two ingestr assets, so Bruin knows to run it after them.",{"type":35,"tag":96,"props":1494,"children":1496},{"id":1495},"_4-examine-the-pipeline-config",[1497],{"type":44,"value":1498},"4) Examine the pipeline config",{"type":35,"tag":36,"props":1500,"children":1501},{},[1502,1503,1508],{"type":44,"value":166},{"type":35,"tag":115,"props":1504,"children":1506},{"className":1505},[],[1507],{"type":44,"value":455},{"type":44,"value":1509}," to see how the pipeline is configured:",{"type":35,"tag":108,"props":1511,"children":1512},{"className":177,"code":460,"language":179,"meta":7,"style":7},[1513],{"type":35,"tag":115,"props":1514,"children":1515},{"__ignoreMap":7},[1516,1531,1542,1557],{"type":35,"tag":119,"props":1517,"children":1518},{"class":121,"line":122},[1519,1523,1527],{"type":35,"tag":119,"props":1520,"children":1521},{"style":189},[1522],{"type":44,"value":251},{"type":35,"tag":119,"props":1524,"children":1525},{"style":195},[1526],{"type":44,"value":256},{"type":35,"tag":119,"props":1528,"children":1529},{"style":132},[1530],{"type":44,"value":480},{"type":35,"tag":119,"props":1532,"children":1533},{"class":121,"line":201},[1534,1538],{"type":35,"tag":119,"props":1535,"children":1536},{"style":189},[1537],{"type":44,"value":488},{"type":35,"tag":119,"props":1539,"children":1540},{"style":195},[1541],{"type":44,"value":198},{"type":35,"tag":119,"props":1543,"children":1544},{"class":121,"line":214},[1545,1549,1553],{"type":35,"tag":119,"props":1546,"children":1547},{"style":189},[1548],{"type":44,"value":500},{"type":35,"tag":119,"props":1550,"children":1551},{"style":195},[1552],{"type":44,"value":256},{"type":35,"tag":119,"props":1554,"children":1555},{"style":132},[1556],{"type":44,"value":261},{"type":35,"tag":119,"props":1558,"children":1559},{"class":121,"line":227},[1560,1564,1568],{"type":35,"tag":119,"props":1561,"children":1562},{"style":189},[1563],{"type":44,"value":516},{"type":35,"tag":119,"props":1565,"children":1566},{"style":195},[1567],{"type":44,"value":256},{"type":35,"tag":119,"props":1569,"children":1570},{"style":132},[1571],{"type":44,"value":313},{"type":35,"tag":36,"props":1573,"children":1574},{},[1575,1577,1582,1584,1589],{"type":44,"value":1576},"This links the pipeline to the connections you defined in ",{"type":35,"tag":115,"props":1578,"children":1580},{"className":1579},[],[1581],{"type":44,"value":172},{"type":44,"value":1583},". The ",{"type":35,"tag":115,"props":1585,"children":1587},{"className":1586},[],[1588],{"type":44,"value":488},{"type":44,"value":1590}," tell Bruin which connection to use for each asset type.",{"type":35,"tag":84,"props":1592,"children":1594},{"id":1593},"what-just-happened",[1595],{"type":44,"value":1596},"What just happened",{"type":35,"tag":36,"props":1598,"children":1599},{},[1600],{"type":44,"value":1601},"You now have a fully configured chess data project with DuckDB as the destination and the Chess.com API as the source. The pipeline is ready to run - next, you'll execute it and query the results.",{"type":35,"tag":617,"props":1603,"children":1604},{},[1605],{"type":44,"value":621},{"title":7,"searchDepth":201,"depth":201,"links":1607},[1608,1609,1610,1616],{"id":1144,"depth":201,"text":1147},{"id":1155,"depth":201,"text":1158},{"id":1166,"depth":201,"text":1169,"children":1611},[1612,1613,1614,1615],{"id":1172,"depth":214,"text":1175},{"id":1232,"depth":214,"text":1235},{"id":1449,"depth":214,"text":1452},{"id":1495,"depth":214,"text":1498},{"id":1593,"depth":201,"text":1596},"content:tutorials:chess-duckdb:initialize-project.md","tutorials/chess-duckdb/initialize-project.md","tutorials/chess-duckdb/initialize-project",{"_path":1621,"_dir":12,"_draft":6,"_partial":6,"_locale":7,"title":1622,"description":1623,"date":10,"readingTime":214,"category":1128,"tags":1624,"difficulty":1132,"module":12,"step":201,"subSteps":13,"learnMore":1625,"stepGif":26,"author":1632,"body":1633,"_type":632,"_id":1936,"_source":634,"_file":1937,"_stem":1938,"_extension":637},"/tutorials/chess-duckdb/run-pipeline","Run & Query","Execute the chess pipeline and query the results in DuckDB to verify your data.",[1130,1131],[1626,1629],{"label":1627,"url":1628},"Bruin run command","https://getbruin.com/docs/bruin/commands/run.html",{"label":1630,"url":1631},"Bruin query command","https://getbruin.com/docs/bruin/commands/query.html",{"name":28,"role":29,"image":30},{"type":32,"children":1634,"toc":1926},[1635,1639,1644,1648,1653,1657,1663,1668,1689,1694,1720,1725,1733,1739,1744,1777,1827,1833,1838,1873,1878,1913,1917,1922],{"type":35,"tag":84,"props":1636,"children":1637},{"id":1144},[1638],{"type":44,"value":1147},{"type":35,"tag":36,"props":1640,"children":1641},{},[1642],{"type":44,"value":1643},"Run the pipeline to ingest chess data, then query DuckDB to verify the results.",{"type":35,"tag":84,"props":1645,"children":1646},{"id":1155},[1647],{"type":44,"value":1158},{"type":35,"tag":36,"props":1649,"children":1650},{},[1651],{"type":44,"value":1652},"Running the pipeline is where everything comes together. Bruin resolves dependencies between assets, executes ingestors first, then runs the SQL transformation. Querying the output confirms your pipeline works end-to-end.",{"type":35,"tag":84,"props":1654,"children":1655},{"id":1166},[1656],{"type":44,"value":1169},{"type":35,"tag":96,"props":1658,"children":1660},{"id":1659},"_1-run-the-pipeline",[1661],{"type":44,"value":1662},"1) Run the pipeline",{"type":35,"tag":36,"props":1664,"children":1665},{},[1666],{"type":44,"value":1667},"Execute the entire pipeline with a single command:",{"type":35,"tag":108,"props":1669,"children":1670},{"className":110,"code":538,"language":112,"meta":7,"style":7},[1671],{"type":35,"tag":115,"props":1672,"children":1673},{"__ignoreMap":7},[1674],{"type":35,"tag":119,"props":1675,"children":1676},{"class":121,"line":122},[1677,1681,1685],{"type":35,"tag":119,"props":1678,"children":1679},{"style":126},[1680],{"type":44,"value":129},{"type":35,"tag":119,"props":1682,"children":1683},{"style":132},[1684],{"type":44,"value":554},{"type":35,"tag":119,"props":1686,"children":1687},{"style":132},[1688],{"type":44,"value":559},{"type":35,"tag":36,"props":1690,"children":1691},{},[1692],{"type":44,"value":1693},"Bruin will:",{"type":35,"tag":1695,"props":1696,"children":1697},"ol",{},[1698,1703,1708],{"type":35,"tag":409,"props":1699,"children":1700},{},[1701],{"type":44,"value":1702},"Fetch chess games for each player from the Chess.com API",{"type":35,"tag":409,"props":1704,"children":1705},{},[1706],{"type":44,"value":1707},"Fetch player profiles",{"type":35,"tag":409,"props":1709,"children":1710},{},[1711,1713,1718],{"type":44,"value":1712},"Run the ",{"type":35,"tag":115,"props":1714,"children":1716},{"className":1715},[],[1717],{"type":44,"value":436},{"type":44,"value":1719}," transformation to create the summary table",{"type":35,"tag":36,"props":1721,"children":1722},{},[1723],{"type":44,"value":1724},"You'll see progress output as each asset completes. You can also view the pipeline lineage to see how assets connect:",{"type":35,"tag":36,"props":1726,"children":1727},{},[1728],{"type":35,"tag":1180,"props":1729,"children":1732},{"alt":1730,"src":1731},"Pipeline lineage in the CLI","/img/learn/tutorials/lineage-cli.gif",[],{"type":35,"tag":96,"props":1734,"children":1736},{"id":1735},"_2-query-the-results",[1737],{"type":44,"value":1738},"2) Query the results",{"type":35,"tag":36,"props":1740,"children":1741},{},[1742],{"type":44,"value":1743},"Once the pipeline finishes, verify the data by querying DuckDB:",{"type":35,"tag":108,"props":1745,"children":1746},{"className":110,"code":573,"language":112,"meta":7,"style":7},[1747],{"type":35,"tag":115,"props":1748,"children":1749},{"__ignoreMap":7},[1750],{"type":35,"tag":119,"props":1751,"children":1752},{"class":121,"line":122},[1753,1757,1761,1765,1769,1773],{"type":35,"tag":119,"props":1754,"children":1755},{"style":126},[1756],{"type":44,"value":129},{"type":35,"tag":119,"props":1758,"children":1759},{"style":132},[1760],{"type":44,"value":589},{"type":35,"tag":119,"props":1762,"children":1763},{"style":592},[1764],{"type":44,"value":595},{"type":35,"tag":119,"props":1766,"children":1767},{"style":132},[1768],{"type":44,"value":600},{"type":35,"tag":119,"props":1770,"children":1771},{"style":592},[1772],{"type":44,"value":605},{"type":35,"tag":119,"props":1774,"children":1775},{"style":132},[1776],{"type":44,"value":610},{"type":35,"tag":36,"props":1778,"children":1779},{},[1780,1782,1788,1790,1796,1797,1803,1804,1810,1811,1817,1819,1825],{"type":44,"value":1781},"You should see a table with columns like ",{"type":35,"tag":115,"props":1783,"children":1785},{"className":1784},[],[1786],{"type":44,"value":1787},"username",{"type":44,"value":1789},", ",{"type":35,"tag":115,"props":1791,"children":1793},{"className":1792},[],[1794],{"type":44,"value":1795},"total_games",{"type":44,"value":1789},{"type":35,"tag":115,"props":1798,"children":1800},{"className":1799},[],[1801],{"type":44,"value":1802},"wins",{"type":44,"value":1789},{"type":35,"tag":115,"props":1805,"children":1807},{"className":1806},[],[1808],{"type":44,"value":1809},"losses",{"type":44,"value":1789},{"type":35,"tag":115,"props":1812,"children":1814},{"className":1813},[],[1815],{"type":44,"value":1816},"draws",{"type":44,"value":1818},", and ",{"type":35,"tag":115,"props":1820,"children":1822},{"className":1821},[],[1823],{"type":44,"value":1824},"win_rate",{"type":44,"value":1826},". Each row represents one of the chess players you configured.",{"type":35,"tag":96,"props":1828,"children":1830},{"id":1829},"_3-explore-the-data",[1831],{"type":44,"value":1832},"3) Explore the data",{"type":35,"tag":36,"props":1834,"children":1835},{},[1836],{"type":44,"value":1837},"Try running additional queries to explore the ingested data:",{"type":35,"tag":108,"props":1839,"children":1841},{"className":110,"code":1840,"language":112,"meta":7,"style":7},"bruin query --c duckdb-default --q \"SELECT username, total_games, win_rate FROM chess_playground.player_summary ORDER BY win_rate DESC;\"\n",[1842],{"type":35,"tag":115,"props":1843,"children":1844},{"__ignoreMap":7},[1845],{"type":35,"tag":119,"props":1846,"children":1847},{"class":121,"line":122},[1848,1852,1856,1860,1864,1868],{"type":35,"tag":119,"props":1849,"children":1850},{"style":126},[1851],{"type":44,"value":129},{"type":35,"tag":119,"props":1853,"children":1854},{"style":132},[1855],{"type":44,"value":589},{"type":35,"tag":119,"props":1857,"children":1858},{"style":592},[1859],{"type":44,"value":595},{"type":35,"tag":119,"props":1861,"children":1862},{"style":132},[1863],{"type":44,"value":600},{"type":35,"tag":119,"props":1865,"children":1866},{"style":592},[1867],{"type":44,"value":605},{"type":35,"tag":119,"props":1869,"children":1870},{"style":132},[1871],{"type":44,"value":1872}," \"SELECT username, total_games, win_rate FROM chess_playground.player_summary ORDER BY win_rate DESC;\"\n",{"type":35,"tag":36,"props":1874,"children":1875},{},[1876],{"type":44,"value":1877},"You can also query the raw ingested tables directly:",{"type":35,"tag":108,"props":1879,"children":1881},{"className":110,"code":1880,"language":112,"meta":7,"style":7},"bruin query --c duckdb-default --q \"SELECT * FROM chess_playground.chess_games LIMIT 5;\"\n",[1882],{"type":35,"tag":115,"props":1883,"children":1884},{"__ignoreMap":7},[1885],{"type":35,"tag":119,"props":1886,"children":1887},{"class":121,"line":122},[1888,1892,1896,1900,1904,1908],{"type":35,"tag":119,"props":1889,"children":1890},{"style":126},[1891],{"type":44,"value":129},{"type":35,"tag":119,"props":1893,"children":1894},{"style":132},[1895],{"type":44,"value":589},{"type":35,"tag":119,"props":1897,"children":1898},{"style":592},[1899],{"type":44,"value":595},{"type":35,"tag":119,"props":1901,"children":1902},{"style":132},[1903],{"type":44,"value":600},{"type":35,"tag":119,"props":1905,"children":1906},{"style":592},[1907],{"type":44,"value":605},{"type":35,"tag":119,"props":1909,"children":1910},{"style":132},[1911],{"type":44,"value":1912}," \"SELECT * FROM chess_playground.chess_games LIMIT 5;\"\n",{"type":35,"tag":84,"props":1914,"children":1915},{"id":1593},[1916],{"type":44,"value":1596},{"type":35,"tag":36,"props":1918,"children":1919},{},[1920],{"type":44,"value":1921},"You built and ran your first Bruin pipeline. Chess data was fetched from a public API, loaded into DuckDB, and transformed into a summary table - all with a single command. From here, you can add more players, create additional SQL transformations, or try connecting to a different data warehouse.",{"type":35,"tag":617,"props":1923,"children":1924},{},[1925],{"type":44,"value":621},{"title":7,"searchDepth":201,"depth":201,"links":1927},[1928,1929,1930,1935],{"id":1144,"depth":201,"text":1147},{"id":1155,"depth":201,"text":1158},{"id":1166,"depth":201,"text":1169,"children":1931},[1932,1933,1934],{"id":1659,"depth":214,"text":1662},{"id":1735,"depth":214,"text":1738},{"id":1829,"depth":214,"text":1832},{"id":1593,"depth":201,"text":1596},"content:tutorials:chess-duckdb:run-pipeline.md","tutorials/chess-duckdb/run-pipeline.md","tutorials/chess-duckdb/run-pipeline",1776427824128]