[{"data":1,"prerenderedAt":5888},["ShallowReactive",2],{"tutorial-python-materialization":3,"content-query-0D41BkLb15":2709,"content-query-dPXbmUM8ha":5028},{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"readingTime":11,"category":12,"tags":13,"difficulty":19,"journeys":20,"hidden":6,"author":23,"body":27,"_type":2703,"_id":2704,"_source":2705,"_file":2706,"_stem":2707,"_extension":2708},"/tutorials/python-materialization","tutorials",false,"","Materializing Python Assets into Your Warehouse","Return a DataFrame, let Bruin handle the rest. Learn how to use Python materialization to load data into BigQuery, Snowflake, Postgres, and more - with support for merge, append, and incremental strategies.","2026-04-23",10,"Tutorial",[14,15,16,17,18],"Bruin CLI","Python","BigQuery","Postgres","DuckDB","Beginner",[21,22],"Data Engineer","Data Analyst",{"name":24,"role":25,"image":26},"Bruin Team","Bruin Data","/bruin-logo-2025.svg",{"type":28,"children":29,"toc":2686},"root",[30,39,71,81,89,123,127,133,146,178,183,201,204,210,217,222,547,552,631,637,647,682,687,693,729,742,747,804,816,821,870,881,886,952,964,977,1153,1163,1169,1182,1582,1588,1593,1778,1783,1789,1794,1895,1901,1927,2298,2325,2331,2358,2363,2390,2402,2444,2447,2453,2458,2512,2531,2534,2540,2631,2634,2640,2680],{"type":31,"tag":32,"props":33,"children":35},"element","h2",{"id":34},"overview",[36],{"type":37,"value":38},"text","Overview",{"type":31,"tag":40,"props":41,"children":42},"p",{},[43,49,51,60,62,69],{"type":31,"tag":44,"props":45,"children":46},"strong",{},[47],{"type":37,"value":48},"Goal",{"type":37,"value":50}," - Use ",{"type":31,"tag":52,"props":53,"children":57},"a",{"href":54,"rel":55},"https://getbruin.com/docs/bruin/assets/python.html#materialization",[56],"nofollow",[58],{"type":37,"value":59},"Python materialization",{"type":37,"value":61}," to turn any Python script that returns a DataFrame into a loaded, managed table in your data warehouse. No manual ",{"type":31,"tag":63,"props":64,"children":66},"code",{"className":65},[],[67],{"type":37,"value":68},"to_sql",{"type":37,"value":70},", no credential wiring, no duplicate-handling code.",{"type":31,"tag":40,"props":72,"children":73},{},[74,79],{"type":31,"tag":44,"props":75,"children":76},{},[77],{"type":37,"value":78},"Audience",{"type":37,"value":80}," - Data engineers who want Python assets that behave like SQL assets: typed columns, merge/append/incremental strategies, and quality checks - all driven by the asset's YAML config.",{"type":31,"tag":40,"props":82,"children":83},{},[84],{"type":31,"tag":44,"props":85,"children":86},{},[87],{"type":37,"value":88},"Prerequisites",{"type":31,"tag":90,"props":91,"children":92},"ul",{},[93,105,110],{"type":31,"tag":94,"props":95,"children":96},"li",{},[97,103],{"type":31,"tag":52,"props":98,"children":101},{"href":99,"rel":100},"https://getbruin.com/docs/bruin/getting-started/introduction/installation.html",[56],[102],{"type":37,"value":14},{"type":37,"value":104}," installed",{"type":31,"tag":94,"props":106,"children":107},{},[108],{"type":37,"value":109},"A Bruin project with a configured warehouse connection (BigQuery, Snowflake, Postgres, Redshift, MSSQL, MySQL, DuckDB, etc.)",{"type":31,"tag":94,"props":111,"children":112},{},[113,115,121],{"type":37,"value":114},"Familiarity with Python assets - see ",{"type":31,"tag":52,"props":116,"children":118},{"href":117},"/learn/bruin-python-sdk",[119],{"type":37,"value":120},"Using the Bruin Python SDK",{"type":37,"value":122}," if you're new to them",{"type":31,"tag":124,"props":125,"children":126},"hr",{},[],{"type":31,"tag":32,"props":128,"children":130},{"id":129},"what-is-python-materialization",[131],{"type":37,"value":132},"What is Python materialization?",{"type":31,"tag":40,"props":134,"children":135},{},[136,138,144],{"type":37,"value":137},"In a regular Python asset, you write code and handle storage yourself. With materialization, you return a DataFrame from a ",{"type":31,"tag":63,"props":139,"children":141},{"className":140},[],[142],{"type":37,"value":143},"materialize()",{"type":37,"value":145}," function and Bruin:",{"type":31,"tag":147,"props":148,"children":149},"ol",{},[150,155,160,173],{"type":31,"tag":94,"props":151,"children":152},{},[153],{"type":37,"value":154},"Runs your script",{"type":31,"tag":94,"props":156,"children":157},{},[158],{"type":37,"value":159},"Saves the output to a temporary Apache Arrow file",{"type":31,"tag":94,"props":161,"children":162},{},[163,165,171],{"type":37,"value":164},"Uses ",{"type":31,"tag":63,"props":166,"children":168},{"className":167},[],[169],{"type":37,"value":170},"ingestr",{"type":37,"value":172}," to load it into the destination with your chosen strategy",{"type":31,"tag":94,"props":174,"children":175},{},[176],{"type":37,"value":177},"Cleans up the temporary file",{"type":31,"tag":40,"props":179,"children":180},{},[181],{"type":37,"value":182},"This is how SQL assets already work. Materialization brings the same model to Python: define the target, describe the columns, return the data.",{"type":31,"tag":184,"props":185,"children":186},"blockquote",{},[187],{"type":31,"tag":40,"props":188,"children":189},{},[190,192,199],{"type":37,"value":191},"Materialization is a newer feature. It's stable for production use but if you hit an edge case, ",{"type":31,"tag":52,"props":193,"children":196},{"href":194,"rel":195},"https://github.com/bruin-data/bruin",[56],[197],{"type":37,"value":198},"open an issue",{"type":37,"value":200},".",{"type":31,"tag":124,"props":202,"children":203},{},[],{"type":31,"tag":32,"props":205,"children":207},{"id":206},"steps",[208],{"type":37,"value":209},"Steps",{"type":31,"tag":211,"props":212,"children":214},"h3",{"id":213},"_1-anatomy-of-a-materialized-python-asset",[215],{"type":37,"value":216},"1) Anatomy of a materialized Python asset",{"type":31,"tag":40,"props":218,"children":219},{},[220],{"type":37,"value":221},"Here's the minimal shape:",{"type":31,"tag":223,"props":224,"children":228},"pre",{"className":225,"code":226,"language":227,"meta":7,"style":7},"language-python shiki shiki-themes github-dark","\"\"\"@bruin\nname: tier1.users\nimage: python:3.13\nconnection: my_bigquery\n\nmaterialization:\n  type: table\n  strategy: create+replace\n\ncolumns:\n  - name: id\n    type: integer\n    primary_key: true\n  - name: name\n    type: string\n@bruin\"\"\"\n\nimport pandas as pd\n\ndef materialize():\n    return pd.DataFrame({\n        \"id\": [1, 2, 3],\n        \"name\": [\"Alice\", \"Bob\", \"Charlie\"],\n    })\n","python",[229],{"type":31,"tag":63,"props":230,"children":231},{"__ignoreMap":7},[232,244,253,262,271,281,290,299,308,316,324,333,342,351,360,369,378,386,412,420,440,454,498,538],{"type":31,"tag":233,"props":234,"children":237},"span",{"class":235,"line":236},"line",1,[238],{"type":31,"tag":233,"props":239,"children":241},{"style":240},"--shiki-default:#9ECBFF",[242],{"type":37,"value":243},"\"\"\"@bruin\n",{"type":31,"tag":233,"props":245,"children":247},{"class":235,"line":246},2,[248],{"type":31,"tag":233,"props":249,"children":250},{"style":240},[251],{"type":37,"value":252},"name: tier1.users\n",{"type":31,"tag":233,"props":254,"children":256},{"class":235,"line":255},3,[257],{"type":31,"tag":233,"props":258,"children":259},{"style":240},[260],{"type":37,"value":261},"image: python:3.13\n",{"type":31,"tag":233,"props":263,"children":265},{"class":235,"line":264},4,[266],{"type":31,"tag":233,"props":267,"children":268},{"style":240},[269],{"type":37,"value":270},"connection: my_bigquery\n",{"type":31,"tag":233,"props":272,"children":274},{"class":235,"line":273},5,[275],{"type":31,"tag":233,"props":276,"children":278},{"emptyLinePlaceholder":277},true,[279],{"type":37,"value":280},"\n",{"type":31,"tag":233,"props":282,"children":284},{"class":235,"line":283},6,[285],{"type":31,"tag":233,"props":286,"children":287},{"style":240},[288],{"type":37,"value":289},"materialization:\n",{"type":31,"tag":233,"props":291,"children":293},{"class":235,"line":292},7,[294],{"type":31,"tag":233,"props":295,"children":296},{"style":240},[297],{"type":37,"value":298},"  type: table\n",{"type":31,"tag":233,"props":300,"children":302},{"class":235,"line":301},8,[303],{"type":31,"tag":233,"props":304,"children":305},{"style":240},[306],{"type":37,"value":307},"  strategy: create+replace\n",{"type":31,"tag":233,"props":309,"children":311},{"class":235,"line":310},9,[312],{"type":31,"tag":233,"props":313,"children":314},{"emptyLinePlaceholder":277},[315],{"type":37,"value":280},{"type":31,"tag":233,"props":317,"children":318},{"class":235,"line":11},[319],{"type":31,"tag":233,"props":320,"children":321},{"style":240},[322],{"type":37,"value":323},"columns:\n",{"type":31,"tag":233,"props":325,"children":327},{"class":235,"line":326},11,[328],{"type":31,"tag":233,"props":329,"children":330},{"style":240},[331],{"type":37,"value":332},"  - name: id\n",{"type":31,"tag":233,"props":334,"children":336},{"class":235,"line":335},12,[337],{"type":31,"tag":233,"props":338,"children":339},{"style":240},[340],{"type":37,"value":341},"    type: integer\n",{"type":31,"tag":233,"props":343,"children":345},{"class":235,"line":344},13,[346],{"type":31,"tag":233,"props":347,"children":348},{"style":240},[349],{"type":37,"value":350},"    primary_key: true\n",{"type":31,"tag":233,"props":352,"children":354},{"class":235,"line":353},14,[355],{"type":31,"tag":233,"props":356,"children":357},{"style":240},[358],{"type":37,"value":359},"  - name: name\n",{"type":31,"tag":233,"props":361,"children":363},{"class":235,"line":362},15,[364],{"type":31,"tag":233,"props":365,"children":366},{"style":240},[367],{"type":37,"value":368},"    type: string\n",{"type":31,"tag":233,"props":370,"children":372},{"class":235,"line":371},16,[373],{"type":31,"tag":233,"props":374,"children":375},{"style":240},[376],{"type":37,"value":377},"@bruin\"\"\"\n",{"type":31,"tag":233,"props":379,"children":381},{"class":235,"line":380},17,[382],{"type":31,"tag":233,"props":383,"children":384},{"emptyLinePlaceholder":277},[385],{"type":37,"value":280},{"type":31,"tag":233,"props":387,"children":389},{"class":235,"line":388},18,[390,396,402,407],{"type":31,"tag":233,"props":391,"children":393},{"style":392},"--shiki-default:#F97583",[394],{"type":37,"value":395},"import",{"type":31,"tag":233,"props":397,"children":399},{"style":398},"--shiki-default:#E1E4E8",[400],{"type":37,"value":401}," pandas ",{"type":31,"tag":233,"props":403,"children":404},{"style":392},[405],{"type":37,"value":406},"as",{"type":31,"tag":233,"props":408,"children":409},{"style":398},[410],{"type":37,"value":411}," pd\n",{"type":31,"tag":233,"props":413,"children":415},{"class":235,"line":414},19,[416],{"type":31,"tag":233,"props":417,"children":418},{"emptyLinePlaceholder":277},[419],{"type":37,"value":280},{"type":31,"tag":233,"props":421,"children":423},{"class":235,"line":422},20,[424,429,435],{"type":31,"tag":233,"props":425,"children":426},{"style":392},[427],{"type":37,"value":428},"def",{"type":31,"tag":233,"props":430,"children":432},{"style":431},"--shiki-default:#B392F0",[433],{"type":37,"value":434}," materialize",{"type":31,"tag":233,"props":436,"children":437},{"style":398},[438],{"type":37,"value":439},"():\n",{"type":31,"tag":233,"props":441,"children":443},{"class":235,"line":442},21,[444,449],{"type":31,"tag":233,"props":445,"children":446},{"style":392},[447],{"type":37,"value":448},"    return",{"type":31,"tag":233,"props":450,"children":451},{"style":398},[452],{"type":37,"value":453}," pd.DataFrame({\n",{"type":31,"tag":233,"props":455,"children":457},{"class":235,"line":456},22,[458,463,468,474,479,484,488,493],{"type":31,"tag":233,"props":459,"children":460},{"style":240},[461],{"type":37,"value":462},"        \"id\"",{"type":31,"tag":233,"props":464,"children":465},{"style":398},[466],{"type":37,"value":467},": [",{"type":31,"tag":233,"props":469,"children":471},{"style":470},"--shiki-default:#79B8FF",[472],{"type":37,"value":473},"1",{"type":31,"tag":233,"props":475,"children":476},{"style":398},[477],{"type":37,"value":478},", ",{"type":31,"tag":233,"props":480,"children":481},{"style":470},[482],{"type":37,"value":483},"2",{"type":31,"tag":233,"props":485,"children":486},{"style":398},[487],{"type":37,"value":478},{"type":31,"tag":233,"props":489,"children":490},{"style":470},[491],{"type":37,"value":492},"3",{"type":31,"tag":233,"props":494,"children":495},{"style":398},[496],{"type":37,"value":497},"],\n",{"type":31,"tag":233,"props":499,"children":501},{"class":235,"line":500},23,[502,507,511,516,520,525,529,534],{"type":31,"tag":233,"props":503,"children":504},{"style":240},[505],{"type":37,"value":506},"        \"name\"",{"type":31,"tag":233,"props":508,"children":509},{"style":398},[510],{"type":37,"value":467},{"type":31,"tag":233,"props":512,"children":513},{"style":240},[514],{"type":37,"value":515},"\"Alice\"",{"type":31,"tag":233,"props":517,"children":518},{"style":398},[519],{"type":37,"value":478},{"type":31,"tag":233,"props":521,"children":522},{"style":240},[523],{"type":37,"value":524},"\"Bob\"",{"type":31,"tag":233,"props":526,"children":527},{"style":398},[528],{"type":37,"value":478},{"type":31,"tag":233,"props":530,"children":531},{"style":240},[532],{"type":37,"value":533},"\"Charlie\"",{"type":31,"tag":233,"props":535,"children":536},{"style":398},[537],{"type":37,"value":497},{"type":31,"tag":233,"props":539,"children":541},{"class":235,"line":540},24,[542],{"type":31,"tag":233,"props":543,"children":544},{"style":398},[545],{"type":37,"value":546},"    })\n",{"type":31,"tag":40,"props":548,"children":549},{},[550],{"type":37,"value":551},"Three things to notice:",{"type":31,"tag":90,"props":553,"children":554},{},[555,614,626],{"type":31,"tag":94,"props":556,"children":557},{},[558,560,566,568,574,576,582,584,590,592,598,600,606,608],{"type":37,"value":559},"The ",{"type":31,"tag":63,"props":561,"children":563},{"className":562},[],[564],{"type":37,"value":565},"@bruin",{"type":37,"value":567}," block declares a ",{"type":31,"tag":63,"props":569,"children":571},{"className":570},[],[572],{"type":37,"value":573},"connection",{"type":37,"value":575}," (required when ",{"type":31,"tag":63,"props":577,"children":579},{"className":578},[],[580],{"type":37,"value":581},"materialization.type",{"type":37,"value":583}," is ",{"type":31,"tag":63,"props":585,"children":587},{"className":586},[],[588],{"type":37,"value":589},"table",{"type":37,"value":591},") and a ",{"type":31,"tag":63,"props":593,"children":595},{"className":594},[],[596],{"type":37,"value":597},"materialization",{"type":37,"value":599}," block with a ",{"type":31,"tag":63,"props":601,"children":603},{"className":602},[],[604],{"type":37,"value":605},"type",{"type":37,"value":607}," and ",{"type":31,"tag":63,"props":609,"children":611},{"className":610},[],[612],{"type":37,"value":613},"strategy",{"type":31,"tag":94,"props":615,"children":616},{},[617,619,624],{"type":37,"value":618},"The function is named ",{"type":31,"tag":63,"props":620,"children":622},{"className":621},[],[623],{"type":37,"value":143},{"type":37,"value":625}," - Bruin looks for it specifically",{"type":31,"tag":94,"props":627,"children":628},{},[629],{"type":37,"value":630},"The return value is a DataFrame. Bruin handles the rest",{"type":31,"tag":211,"props":632,"children":634},{"id":633},"_2-return-types-supported",[635],{"type":37,"value":636},"2) Return types supported",{"type":31,"tag":40,"props":638,"children":639},{},[640,645],{"type":31,"tag":63,"props":641,"children":643},{"className":642},[],[644],{"type":37,"value":143},{"type":37,"value":646}," can return any of:",{"type":31,"tag":90,"props":648,"children":649},{},[650,658,666],{"type":31,"tag":94,"props":651,"children":652},{},[653],{"type":31,"tag":44,"props":654,"children":655},{},[656],{"type":37,"value":657},"pandas DataFrame",{"type":31,"tag":94,"props":659,"children":660},{},[661],{"type":31,"tag":44,"props":662,"children":663},{},[664],{"type":37,"value":665},"polars DataFrame",{"type":31,"tag":94,"props":667,"children":668},{},[669,674,676],{"type":31,"tag":44,"props":670,"children":671},{},[672],{"type":37,"value":673},"list of dicts",{"type":37,"value":675}," - e.g. ",{"type":31,"tag":63,"props":677,"children":679},{"className":678},[],[680],{"type":37,"value":681},"[{\"id\": 1, \"name\": \"Alice\"}, ...]",{"type":31,"tag":40,"props":683,"children":684},{},[685],{"type":37,"value":686},"Pick whichever fits your upstream code. Polars is great for larger datasets; pandas has the widest ecosystem; a list of dicts is fine for small API results.",{"type":31,"tag":211,"props":688,"children":690},{"id":689},"_3-choose-a-materialization-strategy",[691],{"type":37,"value":692},"3) Choose a materialization strategy",{"type":31,"tag":40,"props":694,"children":695},{},[696,698,704,706,711,713,719,721,727],{"type":37,"value":697},"Python assets support four strategies. The ",{"type":31,"tag":63,"props":699,"children":701},{"className":700},[],[702],{"type":37,"value":703},"time_interval",{"type":37,"value":705}," strategy is ",{"type":31,"tag":44,"props":707,"children":708},{},[709],{"type":37,"value":710},"not",{"type":37,"value":712}," supported for Python - use ",{"type":31,"tag":63,"props":714,"children":716},{"className":715},[],[717],{"type":37,"value":718},"delete+insert",{"type":37,"value":720}," with an ",{"type":31,"tag":63,"props":722,"children":724},{"className":723},[],[725],{"type":37,"value":726},"incremental_key",{"type":37,"value":728}," instead if you need time-bucketed incremental loads.",{"type":31,"tag":730,"props":731,"children":733},"h4",{"id":732},"createreplace-full-refresh",[734,740],{"type":31,"tag":63,"props":735,"children":737},{"className":736},[],[738],{"type":37,"value":739},"create+replace",{"type":37,"value":741}," - full refresh",{"type":31,"tag":40,"props":743,"children":744},{},[745],{"type":37,"value":746},"Rebuilds the table on every run. Simple, predictable, and expensive for large tables.",{"type":31,"tag":223,"props":748,"children":752},{"className":749,"code":750,"language":751,"meta":7,"style":7},"language-yaml shiki shiki-themes github-dark","materialization:\n  type: table\n  strategy: create+replace\n","yaml",[753],{"type":31,"tag":63,"props":754,"children":755},{"__ignoreMap":7},[756,769,787],{"type":31,"tag":233,"props":757,"children":758},{"class":235,"line":236},[759,764],{"type":31,"tag":233,"props":760,"children":762},{"style":761},"--shiki-default:#85E89D",[763],{"type":37,"value":597},{"type":31,"tag":233,"props":765,"children":766},{"style":398},[767],{"type":37,"value":768},":\n",{"type":31,"tag":233,"props":770,"children":771},{"class":235,"line":246},[772,777,782],{"type":31,"tag":233,"props":773,"children":774},{"style":761},[775],{"type":37,"value":776},"  type",{"type":31,"tag":233,"props":778,"children":779},{"style":398},[780],{"type":37,"value":781},": ",{"type":31,"tag":233,"props":783,"children":784},{"style":240},[785],{"type":37,"value":786},"table\n",{"type":31,"tag":233,"props":788,"children":789},{"class":235,"line":255},[790,795,799],{"type":31,"tag":233,"props":791,"children":792},{"style":761},[793],{"type":37,"value":794},"  strategy",{"type":31,"tag":233,"props":796,"children":797},{"style":398},[798],{"type":37,"value":781},{"type":31,"tag":233,"props":800,"children":801},{"style":240},[802],{"type":37,"value":803},"create+replace\n",{"type":31,"tag":730,"props":805,"children":807},{"id":806},"append-add-only",[808,814],{"type":31,"tag":63,"props":809,"children":811},{"className":810},[],[812],{"type":37,"value":813},"append",{"type":37,"value":815}," - add only",{"type":31,"tag":40,"props":817,"children":818},{},[819],{"type":37,"value":820},"Inserts new rows, never removes. Use for audit logs or event streams where history must be preserved.",{"type":31,"tag":223,"props":822,"children":824},{"className":749,"code":823,"language":751,"meta":7,"style":7},"materialization:\n  type: table\n  strategy: append\n",[825],{"type":31,"tag":63,"props":826,"children":827},{"__ignoreMap":7},[828,839,854],{"type":31,"tag":233,"props":829,"children":830},{"class":235,"line":236},[831,835],{"type":31,"tag":233,"props":832,"children":833},{"style":761},[834],{"type":37,"value":597},{"type":31,"tag":233,"props":836,"children":837},{"style":398},[838],{"type":37,"value":768},{"type":31,"tag":233,"props":840,"children":841},{"class":235,"line":246},[842,846,850],{"type":31,"tag":233,"props":843,"children":844},{"style":761},[845],{"type":37,"value":776},{"type":31,"tag":233,"props":847,"children":848},{"style":398},[849],{"type":37,"value":781},{"type":31,"tag":233,"props":851,"children":852},{"style":240},[853],{"type":37,"value":786},{"type":31,"tag":233,"props":855,"children":856},{"class":235,"line":255},[857,861,865],{"type":31,"tag":233,"props":858,"children":859},{"style":761},[860],{"type":37,"value":794},{"type":31,"tag":233,"props":862,"children":863},{"style":398},[864],{"type":37,"value":781},{"type":31,"tag":233,"props":866,"children":867},{"style":240},[868],{"type":37,"value":869},"append\n",{"type":31,"tag":730,"props":871,"children":873},{"id":872},"deleteinsert-replace-by-key",[874,879],{"type":31,"tag":63,"props":875,"children":877},{"className":876},[],[878],{"type":37,"value":718},{"type":37,"value":880}," - replace by key",{"type":31,"tag":40,"props":882,"children":883},{},[884],{"type":37,"value":885},"Deletes rows matching your incremental key's distinct values, then inserts the new batch. Use for reprocessing a specific partition (e.g. \"today's rows\").",{"type":31,"tag":223,"props":887,"children":889},{"className":749,"code":888,"language":751,"meta":7,"style":7},"materialization:\n  type: table\n  strategy: delete+insert\n  incremental_key: event_date\n",[890],{"type":31,"tag":63,"props":891,"children":892},{"__ignoreMap":7},[893,904,919,935],{"type":31,"tag":233,"props":894,"children":895},{"class":235,"line":236},[896,900],{"type":31,"tag":233,"props":897,"children":898},{"style":761},[899],{"type":37,"value":597},{"type":31,"tag":233,"props":901,"children":902},{"style":398},[903],{"type":37,"value":768},{"type":31,"tag":233,"props":905,"children":906},{"class":235,"line":246},[907,911,915],{"type":31,"tag":233,"props":908,"children":909},{"style":761},[910],{"type":37,"value":776},{"type":31,"tag":233,"props":912,"children":913},{"style":398},[914],{"type":37,"value":781},{"type":31,"tag":233,"props":916,"children":917},{"style":240},[918],{"type":37,"value":786},{"type":31,"tag":233,"props":920,"children":921},{"class":235,"line":255},[922,926,930],{"type":31,"tag":233,"props":923,"children":924},{"style":761},[925],{"type":37,"value":794},{"type":31,"tag":233,"props":927,"children":928},{"style":398},[929],{"type":37,"value":781},{"type":31,"tag":233,"props":931,"children":932},{"style":240},[933],{"type":37,"value":934},"delete+insert\n",{"type":31,"tag":233,"props":936,"children":937},{"class":235,"line":264},[938,943,947],{"type":31,"tag":233,"props":939,"children":940},{"style":761},[941],{"type":37,"value":942},"  incremental_key",{"type":31,"tag":233,"props":944,"children":945},{"style":398},[946],{"type":37,"value":781},{"type":31,"tag":233,"props":948,"children":949},{"style":240},[950],{"type":37,"value":951},"event_date\n",{"type":31,"tag":730,"props":953,"children":955},{"id":954},"merge-upsert",[956,962],{"type":31,"tag":63,"props":957,"children":959},{"className":958},[],[960],{"type":37,"value":961},"merge",{"type":37,"value":963}," - upsert",{"type":31,"tag":40,"props":965,"children":966},{},[967,969,975],{"type":37,"value":968},"Updates existing rows and inserts new ones based on ",{"type":31,"tag":63,"props":970,"children":972},{"className":971},[],[973],{"type":37,"value":974},"primary_key",{"type":37,"value":976},". Use when upstream records can change and you need to keep the latest version.",{"type":31,"tag":223,"props":978,"children":980},{"className":749,"code":979,"language":751,"meta":7,"style":7},"materialization:\n  type: table\n  strategy: merge\n\ncolumns:\n  - name: id\n    type: integer\n    primary_key: true\n  - name: name\n    type: string\n    update_on_merge: true\n",[981],{"type":31,"tag":63,"props":982,"children":983},{"__ignoreMap":7},[984,995,1010,1026,1033,1045,1067,1084,1101,1121,1137],{"type":31,"tag":233,"props":985,"children":986},{"class":235,"line":236},[987,991],{"type":31,"tag":233,"props":988,"children":989},{"style":761},[990],{"type":37,"value":597},{"type":31,"tag":233,"props":992,"children":993},{"style":398},[994],{"type":37,"value":768},{"type":31,"tag":233,"props":996,"children":997},{"class":235,"line":246},[998,1002,1006],{"type":31,"tag":233,"props":999,"children":1000},{"style":761},[1001],{"type":37,"value":776},{"type":31,"tag":233,"props":1003,"children":1004},{"style":398},[1005],{"type":37,"value":781},{"type":31,"tag":233,"props":1007,"children":1008},{"style":240},[1009],{"type":37,"value":786},{"type":31,"tag":233,"props":1011,"children":1012},{"class":235,"line":255},[1013,1017,1021],{"type":31,"tag":233,"props":1014,"children":1015},{"style":761},[1016],{"type":37,"value":794},{"type":31,"tag":233,"props":1018,"children":1019},{"style":398},[1020],{"type":37,"value":781},{"type":31,"tag":233,"props":1022,"children":1023},{"style":240},[1024],{"type":37,"value":1025},"merge\n",{"type":31,"tag":233,"props":1027,"children":1028},{"class":235,"line":264},[1029],{"type":31,"tag":233,"props":1030,"children":1031},{"emptyLinePlaceholder":277},[1032],{"type":37,"value":280},{"type":31,"tag":233,"props":1034,"children":1035},{"class":235,"line":273},[1036,1041],{"type":31,"tag":233,"props":1037,"children":1038},{"style":761},[1039],{"type":37,"value":1040},"columns",{"type":31,"tag":233,"props":1042,"children":1043},{"style":398},[1044],{"type":37,"value":768},{"type":31,"tag":233,"props":1046,"children":1047},{"class":235,"line":283},[1048,1053,1058,1062],{"type":31,"tag":233,"props":1049,"children":1050},{"style":398},[1051],{"type":37,"value":1052},"  - ",{"type":31,"tag":233,"props":1054,"children":1055},{"style":761},[1056],{"type":37,"value":1057},"name",{"type":31,"tag":233,"props":1059,"children":1060},{"style":398},[1061],{"type":37,"value":781},{"type":31,"tag":233,"props":1063,"children":1064},{"style":240},[1065],{"type":37,"value":1066},"id\n",{"type":31,"tag":233,"props":1068,"children":1069},{"class":235,"line":292},[1070,1075,1079],{"type":31,"tag":233,"props":1071,"children":1072},{"style":761},[1073],{"type":37,"value":1074},"    type",{"type":31,"tag":233,"props":1076,"children":1077},{"style":398},[1078],{"type":37,"value":781},{"type":31,"tag":233,"props":1080,"children":1081},{"style":240},[1082],{"type":37,"value":1083},"integer\n",{"type":31,"tag":233,"props":1085,"children":1086},{"class":235,"line":301},[1087,1092,1096],{"type":31,"tag":233,"props":1088,"children":1089},{"style":761},[1090],{"type":37,"value":1091},"    primary_key",{"type":31,"tag":233,"props":1093,"children":1094},{"style":398},[1095],{"type":37,"value":781},{"type":31,"tag":233,"props":1097,"children":1098},{"style":470},[1099],{"type":37,"value":1100},"true\n",{"type":31,"tag":233,"props":1102,"children":1103},{"class":235,"line":310},[1104,1108,1112,1116],{"type":31,"tag":233,"props":1105,"children":1106},{"style":398},[1107],{"type":37,"value":1052},{"type":31,"tag":233,"props":1109,"children":1110},{"style":761},[1111],{"type":37,"value":1057},{"type":31,"tag":233,"props":1113,"children":1114},{"style":398},[1115],{"type":37,"value":781},{"type":31,"tag":233,"props":1117,"children":1118},{"style":240},[1119],{"type":37,"value":1120},"name\n",{"type":31,"tag":233,"props":1122,"children":1123},{"class":235,"line":11},[1124,1128,1132],{"type":31,"tag":233,"props":1125,"children":1126},{"style":761},[1127],{"type":37,"value":1074},{"type":31,"tag":233,"props":1129,"children":1130},{"style":398},[1131],{"type":37,"value":781},{"type":31,"tag":233,"props":1133,"children":1134},{"style":240},[1135],{"type":37,"value":1136},"string\n",{"type":31,"tag":233,"props":1138,"children":1139},{"class":235,"line":326},[1140,1145,1149],{"type":31,"tag":233,"props":1141,"children":1142},{"style":761},[1143],{"type":37,"value":1144},"    update_on_merge",{"type":31,"tag":233,"props":1146,"children":1147},{"style":398},[1148],{"type":37,"value":781},{"type":31,"tag":233,"props":1150,"children":1151},{"style":470},[1152],{"type":37,"value":1100},{"type":31,"tag":40,"props":1154,"children":1155},{},[1156,1161],{"type":31,"tag":63,"props":1157,"children":1159},{"className":1158},[],[1160],{"type":37,"value":961},{"type":37,"value":1162}," is the most common production strategy and is supported on BigQuery, Snowflake, Postgres, MSSQL, MySQL, Athena (Iceberg), Databricks, ClickHouse, Trino, and DuckDB (limited).",{"type":31,"tag":211,"props":1164,"children":1166},{"id":1165},"_4-enforce-column-types",[1167],{"type":37,"value":1168},"4) Enforce column types",{"type":31,"tag":40,"props":1170,"children":1171},{},[1172,1174,1180],{"type":37,"value":1173},"By default, types are inferred from the DataFrame. To enforce them at the destination, set ",{"type":31,"tag":63,"props":1175,"children":1177},{"className":1176},[],[1178],{"type":37,"value":1179},"parameters.enforce_schema: true",{"type":37,"value":1181},":",{"type":31,"tag":223,"props":1183,"children":1185},{"className":225,"code":1184,"language":227,"meta":7,"style":7},"\"\"\"@bruin\nname: tier1.users_api\nimage: python:3.13\nconnection: my_bigquery\n\nmaterialization:\n  type: table\n  strategy: merge\n\nparameters:\n  enforce_schema: true\n\ncolumns:\n  - name: id\n    type: integer\n    primary_key: true\n  - name: name\n    type: string\n  - name: email\n    type: string\n  - name: created_at\n    type: timestamp\n@bruin\"\"\"\n\nimport pandas as pd\n\ndef materialize():\n    return pd.DataFrame({\n        \"id\": [1, 2, 3],\n        \"name\": [\"Alice\", \"Bob\", \"Charlie\"],\n        \"email\": [\"alice@example.com\", \"bob@example.com\", \"charlie@example.com\"],\n        \"created_at\": pd.to_datetime([\"2026-01-01\", \"2026-01-02\", \"2026-01-03\"]),\n    })\n",[1186],{"type":31,"tag":63,"props":1187,"children":1188},{"__ignoreMap":7},[1189,1196,1204,1211,1218,1225,1232,1239,1247,1254,1262,1270,1277,1284,1291,1298,1305,1312,1319,1327,1334,1342,1350,1357,1364,1384,1392,1408,1420,1456,1492,1532,1574],{"type":31,"tag":233,"props":1190,"children":1191},{"class":235,"line":236},[1192],{"type":31,"tag":233,"props":1193,"children":1194},{"style":240},[1195],{"type":37,"value":243},{"type":31,"tag":233,"props":1197,"children":1198},{"class":235,"line":246},[1199],{"type":31,"tag":233,"props":1200,"children":1201},{"style":240},[1202],{"type":37,"value":1203},"name: tier1.users_api\n",{"type":31,"tag":233,"props":1205,"children":1206},{"class":235,"line":255},[1207],{"type":31,"tag":233,"props":1208,"children":1209},{"style":240},[1210],{"type":37,"value":261},{"type":31,"tag":233,"props":1212,"children":1213},{"class":235,"line":264},[1214],{"type":31,"tag":233,"props":1215,"children":1216},{"style":240},[1217],{"type":37,"value":270},{"type":31,"tag":233,"props":1219,"children":1220},{"class":235,"line":273},[1221],{"type":31,"tag":233,"props":1222,"children":1223},{"emptyLinePlaceholder":277},[1224],{"type":37,"value":280},{"type":31,"tag":233,"props":1226,"children":1227},{"class":235,"line":283},[1228],{"type":31,"tag":233,"props":1229,"children":1230},{"style":240},[1231],{"type":37,"value":289},{"type":31,"tag":233,"props":1233,"children":1234},{"class":235,"line":292},[1235],{"type":31,"tag":233,"props":1236,"children":1237},{"style":240},[1238],{"type":37,"value":298},{"type":31,"tag":233,"props":1240,"children":1241},{"class":235,"line":301},[1242],{"type":31,"tag":233,"props":1243,"children":1244},{"style":240},[1245],{"type":37,"value":1246},"  strategy: merge\n",{"type":31,"tag":233,"props":1248,"children":1249},{"class":235,"line":310},[1250],{"type":31,"tag":233,"props":1251,"children":1252},{"emptyLinePlaceholder":277},[1253],{"type":37,"value":280},{"type":31,"tag":233,"props":1255,"children":1256},{"class":235,"line":11},[1257],{"type":31,"tag":233,"props":1258,"children":1259},{"style":240},[1260],{"type":37,"value":1261},"parameters:\n",{"type":31,"tag":233,"props":1263,"children":1264},{"class":235,"line":326},[1265],{"type":31,"tag":233,"props":1266,"children":1267},{"style":240},[1268],{"type":37,"value":1269},"  enforce_schema: true\n",{"type":31,"tag":233,"props":1271,"children":1272},{"class":235,"line":335},[1273],{"type":31,"tag":233,"props":1274,"children":1275},{"emptyLinePlaceholder":277},[1276],{"type":37,"value":280},{"type":31,"tag":233,"props":1278,"children":1279},{"class":235,"line":344},[1280],{"type":31,"tag":233,"props":1281,"children":1282},{"style":240},[1283],{"type":37,"value":323},{"type":31,"tag":233,"props":1285,"children":1286},{"class":235,"line":353},[1287],{"type":31,"tag":233,"props":1288,"children":1289},{"style":240},[1290],{"type":37,"value":332},{"type":31,"tag":233,"props":1292,"children":1293},{"class":235,"line":362},[1294],{"type":31,"tag":233,"props":1295,"children":1296},{"style":240},[1297],{"type":37,"value":341},{"type":31,"tag":233,"props":1299,"children":1300},{"class":235,"line":371},[1301],{"type":31,"tag":233,"props":1302,"children":1303},{"style":240},[1304],{"type":37,"value":350},{"type":31,"tag":233,"props":1306,"children":1307},{"class":235,"line":380},[1308],{"type":31,"tag":233,"props":1309,"children":1310},{"style":240},[1311],{"type":37,"value":359},{"type":31,"tag":233,"props":1313,"children":1314},{"class":235,"line":388},[1315],{"type":31,"tag":233,"props":1316,"children":1317},{"style":240},[1318],{"type":37,"value":368},{"type":31,"tag":233,"props":1320,"children":1321},{"class":235,"line":414},[1322],{"type":31,"tag":233,"props":1323,"children":1324},{"style":240},[1325],{"type":37,"value":1326},"  - name: email\n",{"type":31,"tag":233,"props":1328,"children":1329},{"class":235,"line":422},[1330],{"type":31,"tag":233,"props":1331,"children":1332},{"style":240},[1333],{"type":37,"value":368},{"type":31,"tag":233,"props":1335,"children":1336},{"class":235,"line":442},[1337],{"type":31,"tag":233,"props":1338,"children":1339},{"style":240},[1340],{"type":37,"value":1341},"  - name: created_at\n",{"type":31,"tag":233,"props":1343,"children":1344},{"class":235,"line":456},[1345],{"type":31,"tag":233,"props":1346,"children":1347},{"style":240},[1348],{"type":37,"value":1349},"    type: timestamp\n",{"type":31,"tag":233,"props":1351,"children":1352},{"class":235,"line":500},[1353],{"type":31,"tag":233,"props":1354,"children":1355},{"style":240},[1356],{"type":37,"value":377},{"type":31,"tag":233,"props":1358,"children":1359},{"class":235,"line":540},[1360],{"type":31,"tag":233,"props":1361,"children":1362},{"emptyLinePlaceholder":277},[1363],{"type":37,"value":280},{"type":31,"tag":233,"props":1365,"children":1367},{"class":235,"line":1366},25,[1368,1372,1376,1380],{"type":31,"tag":233,"props":1369,"children":1370},{"style":392},[1371],{"type":37,"value":395},{"type":31,"tag":233,"props":1373,"children":1374},{"style":398},[1375],{"type":37,"value":401},{"type":31,"tag":233,"props":1377,"children":1378},{"style":392},[1379],{"type":37,"value":406},{"type":31,"tag":233,"props":1381,"children":1382},{"style":398},[1383],{"type":37,"value":411},{"type":31,"tag":233,"props":1385,"children":1387},{"class":235,"line":1386},26,[1388],{"type":31,"tag":233,"props":1389,"children":1390},{"emptyLinePlaceholder":277},[1391],{"type":37,"value":280},{"type":31,"tag":233,"props":1393,"children":1395},{"class":235,"line":1394},27,[1396,1400,1404],{"type":31,"tag":233,"props":1397,"children":1398},{"style":392},[1399],{"type":37,"value":428},{"type":31,"tag":233,"props":1401,"children":1402},{"style":431},[1403],{"type":37,"value":434},{"type":31,"tag":233,"props":1405,"children":1406},{"style":398},[1407],{"type":37,"value":439},{"type":31,"tag":233,"props":1409,"children":1411},{"class":235,"line":1410},28,[1412,1416],{"type":31,"tag":233,"props":1413,"children":1414},{"style":392},[1415],{"type":37,"value":448},{"type":31,"tag":233,"props":1417,"children":1418},{"style":398},[1419],{"type":37,"value":453},{"type":31,"tag":233,"props":1421,"children":1423},{"class":235,"line":1422},29,[1424,1428,1432,1436,1440,1444,1448,1452],{"type":31,"tag":233,"props":1425,"children":1426},{"style":240},[1427],{"type":37,"value":462},{"type":31,"tag":233,"props":1429,"children":1430},{"style":398},[1431],{"type":37,"value":467},{"type":31,"tag":233,"props":1433,"children":1434},{"style":470},[1435],{"type":37,"value":473},{"type":31,"tag":233,"props":1437,"children":1438},{"style":398},[1439],{"type":37,"value":478},{"type":31,"tag":233,"props":1441,"children":1442},{"style":470},[1443],{"type":37,"value":483},{"type":31,"tag":233,"props":1445,"children":1446},{"style":398},[1447],{"type":37,"value":478},{"type":31,"tag":233,"props":1449,"children":1450},{"style":470},[1451],{"type":37,"value":492},{"type":31,"tag":233,"props":1453,"children":1454},{"style":398},[1455],{"type":37,"value":497},{"type":31,"tag":233,"props":1457,"children":1459},{"class":235,"line":1458},30,[1460,1464,1468,1472,1476,1480,1484,1488],{"type":31,"tag":233,"props":1461,"children":1462},{"style":240},[1463],{"type":37,"value":506},{"type":31,"tag":233,"props":1465,"children":1466},{"style":398},[1467],{"type":37,"value":467},{"type":31,"tag":233,"props":1469,"children":1470},{"style":240},[1471],{"type":37,"value":515},{"type":31,"tag":233,"props":1473,"children":1474},{"style":398},[1475],{"type":37,"value":478},{"type":31,"tag":233,"props":1477,"children":1478},{"style":240},[1479],{"type":37,"value":524},{"type":31,"tag":233,"props":1481,"children":1482},{"style":398},[1483],{"type":37,"value":478},{"type":31,"tag":233,"props":1485,"children":1486},{"style":240},[1487],{"type":37,"value":533},{"type":31,"tag":233,"props":1489,"children":1490},{"style":398},[1491],{"type":37,"value":497},{"type":31,"tag":233,"props":1493,"children":1495},{"class":235,"line":1494},31,[1496,1501,1505,1510,1514,1519,1523,1528],{"type":31,"tag":233,"props":1497,"children":1498},{"style":240},[1499],{"type":37,"value":1500},"        \"email\"",{"type":31,"tag":233,"props":1502,"children":1503},{"style":398},[1504],{"type":37,"value":467},{"type":31,"tag":233,"props":1506,"children":1507},{"style":240},[1508],{"type":37,"value":1509},"\"alice@example.com\"",{"type":31,"tag":233,"props":1511,"children":1512},{"style":398},[1513],{"type":37,"value":478},{"type":31,"tag":233,"props":1515,"children":1516},{"style":240},[1517],{"type":37,"value":1518},"\"bob@example.com\"",{"type":31,"tag":233,"props":1520,"children":1521},{"style":398},[1522],{"type":37,"value":478},{"type":31,"tag":233,"props":1524,"children":1525},{"style":240},[1526],{"type":37,"value":1527},"\"charlie@example.com\"",{"type":31,"tag":233,"props":1529,"children":1530},{"style":398},[1531],{"type":37,"value":497},{"type":31,"tag":233,"props":1533,"children":1535},{"class":235,"line":1534},32,[1536,1541,1546,1551,1555,1560,1564,1569],{"type":31,"tag":233,"props":1537,"children":1538},{"style":240},[1539],{"type":37,"value":1540},"        \"created_at\"",{"type":31,"tag":233,"props":1542,"children":1543},{"style":398},[1544],{"type":37,"value":1545},": pd.to_datetime([",{"type":31,"tag":233,"props":1547,"children":1548},{"style":240},[1549],{"type":37,"value":1550},"\"2026-01-01\"",{"type":31,"tag":233,"props":1552,"children":1553},{"style":398},[1554],{"type":37,"value":478},{"type":31,"tag":233,"props":1556,"children":1557},{"style":240},[1558],{"type":37,"value":1559},"\"2026-01-02\"",{"type":31,"tag":233,"props":1561,"children":1562},{"style":398},[1563],{"type":37,"value":478},{"type":31,"tag":233,"props":1565,"children":1566},{"style":240},[1567],{"type":37,"value":1568},"\"2026-01-03\"",{"type":31,"tag":233,"props":1570,"children":1571},{"style":398},[1572],{"type":37,"value":1573},"]),\n",{"type":31,"tag":233,"props":1575,"children":1577},{"class":235,"line":1576},33,[1578],{"type":31,"tag":233,"props":1579,"children":1580},{"style":398},[1581],{"type":37,"value":546},{"type":31,"tag":211,"props":1583,"children":1585},{"id":1584},"_5-add-quality-checks",[1586],{"type":37,"value":1587},"5) Add quality checks",{"type":31,"tag":40,"props":1589,"children":1590},{},[1591],{"type":37,"value":1592},"Materialized Python assets get the same column-level checks as SQL assets:",{"type":31,"tag":223,"props":1594,"children":1596},{"className":749,"code":1595,"language":751,"meta":7,"style":7},"columns:\n  - name: id\n    type: integer\n    primary_key: true\n    checks:\n      - name: unique\n      - name: not_null\n  - name: email\n    type: string\n    checks:\n      - name: not_null\n",[1597],{"type":31,"tag":63,"props":1598,"children":1599},{"__ignoreMap":7},[1600,1611,1630,1645,1660,1672,1693,1713,1733,1748,1759],{"type":31,"tag":233,"props":1601,"children":1602},{"class":235,"line":236},[1603,1607],{"type":31,"tag":233,"props":1604,"children":1605},{"style":761},[1606],{"type":37,"value":1040},{"type":31,"tag":233,"props":1608,"children":1609},{"style":398},[1610],{"type":37,"value":768},{"type":31,"tag":233,"props":1612,"children":1613},{"class":235,"line":246},[1614,1618,1622,1626],{"type":31,"tag":233,"props":1615,"children":1616},{"style":398},[1617],{"type":37,"value":1052},{"type":31,"tag":233,"props":1619,"children":1620},{"style":761},[1621],{"type":37,"value":1057},{"type":31,"tag":233,"props":1623,"children":1624},{"style":398},[1625],{"type":37,"value":781},{"type":31,"tag":233,"props":1627,"children":1628},{"style":240},[1629],{"type":37,"value":1066},{"type":31,"tag":233,"props":1631,"children":1632},{"class":235,"line":255},[1633,1637,1641],{"type":31,"tag":233,"props":1634,"children":1635},{"style":761},[1636],{"type":37,"value":1074},{"type":31,"tag":233,"props":1638,"children":1639},{"style":398},[1640],{"type":37,"value":781},{"type":31,"tag":233,"props":1642,"children":1643},{"style":240},[1644],{"type":37,"value":1083},{"type":31,"tag":233,"props":1646,"children":1647},{"class":235,"line":264},[1648,1652,1656],{"type":31,"tag":233,"props":1649,"children":1650},{"style":761},[1651],{"type":37,"value":1091},{"type":31,"tag":233,"props":1653,"children":1654},{"style":398},[1655],{"type":37,"value":781},{"type":31,"tag":233,"props":1657,"children":1658},{"style":470},[1659],{"type":37,"value":1100},{"type":31,"tag":233,"props":1661,"children":1662},{"class":235,"line":273},[1663,1668],{"type":31,"tag":233,"props":1664,"children":1665},{"style":761},[1666],{"type":37,"value":1667},"    checks",{"type":31,"tag":233,"props":1669,"children":1670},{"style":398},[1671],{"type":37,"value":768},{"type":31,"tag":233,"props":1673,"children":1674},{"class":235,"line":283},[1675,1680,1684,1688],{"type":31,"tag":233,"props":1676,"children":1677},{"style":398},[1678],{"type":37,"value":1679},"      - ",{"type":31,"tag":233,"props":1681,"children":1682},{"style":761},[1683],{"type":37,"value":1057},{"type":31,"tag":233,"props":1685,"children":1686},{"style":398},[1687],{"type":37,"value":781},{"type":31,"tag":233,"props":1689,"children":1690},{"style":240},[1691],{"type":37,"value":1692},"unique\n",{"type":31,"tag":233,"props":1694,"children":1695},{"class":235,"line":292},[1696,1700,1704,1708],{"type":31,"tag":233,"props":1697,"children":1698},{"style":398},[1699],{"type":37,"value":1679},{"type":31,"tag":233,"props":1701,"children":1702},{"style":761},[1703],{"type":37,"value":1057},{"type":31,"tag":233,"props":1705,"children":1706},{"style":398},[1707],{"type":37,"value":781},{"type":31,"tag":233,"props":1709,"children":1710},{"style":240},[1711],{"type":37,"value":1712},"not_null\n",{"type":31,"tag":233,"props":1714,"children":1715},{"class":235,"line":301},[1716,1720,1724,1728],{"type":31,"tag":233,"props":1717,"children":1718},{"style":398},[1719],{"type":37,"value":1052},{"type":31,"tag":233,"props":1721,"children":1722},{"style":761},[1723],{"type":37,"value":1057},{"type":31,"tag":233,"props":1725,"children":1726},{"style":398},[1727],{"type":37,"value":781},{"type":31,"tag":233,"props":1729,"children":1730},{"style":240},[1731],{"type":37,"value":1732},"email\n",{"type":31,"tag":233,"props":1734,"children":1735},{"class":235,"line":310},[1736,1740,1744],{"type":31,"tag":233,"props":1737,"children":1738},{"style":761},[1739],{"type":37,"value":1074},{"type":31,"tag":233,"props":1741,"children":1742},{"style":398},[1743],{"type":37,"value":781},{"type":31,"tag":233,"props":1745,"children":1746},{"style":240},[1747],{"type":37,"value":1136},{"type":31,"tag":233,"props":1749,"children":1750},{"class":235,"line":11},[1751,1755],{"type":31,"tag":233,"props":1752,"children":1753},{"style":761},[1754],{"type":37,"value":1667},{"type":31,"tag":233,"props":1756,"children":1757},{"style":398},[1758],{"type":37,"value":768},{"type":31,"tag":233,"props":1760,"children":1761},{"class":235,"line":326},[1762,1766,1770,1774],{"type":31,"tag":233,"props":1763,"children":1764},{"style":398},[1765],{"type":37,"value":1679},{"type":31,"tag":233,"props":1767,"children":1768},{"style":761},[1769],{"type":37,"value":1057},{"type":31,"tag":233,"props":1771,"children":1772},{"style":398},[1773],{"type":37,"value":781},{"type":31,"tag":233,"props":1775,"children":1776},{"style":240},[1777],{"type":37,"value":1712},{"type":31,"tag":40,"props":1779,"children":1780},{},[1781],{"type":37,"value":1782},"After the load, Bruin runs the checks and fails the asset if any fail.",{"type":31,"tag":211,"props":1784,"children":1786},{"id":1785},"_6-declare-column-level-lineage",[1787],{"type":37,"value":1788},"6) Declare column-level lineage",{"type":31,"tag":40,"props":1790,"children":1791},{},[1792],{"type":37,"value":1793},"Link columns back to their upstream sources so lineage shows up correctly in the UI:",{"type":31,"tag":223,"props":1795,"children":1797},{"className":749,"code":1796,"language":751,"meta":7,"style":7},"columns:\n  - name: id\n    type: integer\n    upstreams:\n      - table: raw.users\n        column: user_id\n",[1798],{"type":31,"tag":63,"props":1799,"children":1800},{"__ignoreMap":7},[1801,1812,1831,1846,1858,1878],{"type":31,"tag":233,"props":1802,"children":1803},{"class":235,"line":236},[1804,1808],{"type":31,"tag":233,"props":1805,"children":1806},{"style":761},[1807],{"type":37,"value":1040},{"type":31,"tag":233,"props":1809,"children":1810},{"style":398},[1811],{"type":37,"value":768},{"type":31,"tag":233,"props":1813,"children":1814},{"class":235,"line":246},[1815,1819,1823,1827],{"type":31,"tag":233,"props":1816,"children":1817},{"style":398},[1818],{"type":37,"value":1052},{"type":31,"tag":233,"props":1820,"children":1821},{"style":761},[1822],{"type":37,"value":1057},{"type":31,"tag":233,"props":1824,"children":1825},{"style":398},[1826],{"type":37,"value":781},{"type":31,"tag":233,"props":1828,"children":1829},{"style":240},[1830],{"type":37,"value":1066},{"type":31,"tag":233,"props":1832,"children":1833},{"class":235,"line":255},[1834,1838,1842],{"type":31,"tag":233,"props":1835,"children":1836},{"style":761},[1837],{"type":37,"value":1074},{"type":31,"tag":233,"props":1839,"children":1840},{"style":398},[1841],{"type":37,"value":781},{"type":31,"tag":233,"props":1843,"children":1844},{"style":240},[1845],{"type":37,"value":1083},{"type":31,"tag":233,"props":1847,"children":1848},{"class":235,"line":264},[1849,1854],{"type":31,"tag":233,"props":1850,"children":1851},{"style":761},[1852],{"type":37,"value":1853},"    upstreams",{"type":31,"tag":233,"props":1855,"children":1856},{"style":398},[1857],{"type":37,"value":768},{"type":31,"tag":233,"props":1859,"children":1860},{"class":235,"line":273},[1861,1865,1869,1873],{"type":31,"tag":233,"props":1862,"children":1863},{"style":398},[1864],{"type":37,"value":1679},{"type":31,"tag":233,"props":1866,"children":1867},{"style":761},[1868],{"type":37,"value":589},{"type":31,"tag":233,"props":1870,"children":1871},{"style":398},[1872],{"type":37,"value":781},{"type":31,"tag":233,"props":1874,"children":1875},{"style":240},[1876],{"type":37,"value":1877},"raw.users\n",{"type":31,"tag":233,"props":1879,"children":1880},{"class":235,"line":283},[1881,1886,1890],{"type":31,"tag":233,"props":1882,"children":1883},{"style":761},[1884],{"type":37,"value":1885},"        column",{"type":31,"tag":233,"props":1887,"children":1888},{"style":398},[1889],{"type":37,"value":781},{"type":31,"tag":233,"props":1891,"children":1892},{"style":240},[1893],{"type":37,"value":1894},"user_id\n",{"type":31,"tag":211,"props":1896,"children":1898},{"id":1897},"_7-combine-materialization-with-the-python-sdk",[1899],{"type":37,"value":1900},"7) Combine materialization with the Python SDK",{"type":31,"tag":40,"props":1902,"children":1903},{},[1904,1906,1911,1913,1918,1920,1925],{"type":37,"value":1905},"Materialization handles the ",{"type":31,"tag":44,"props":1907,"children":1908},{},[1909],{"type":37,"value":1910},"write",{"type":37,"value":1912},". The ",{"type":31,"tag":52,"props":1914,"children":1915},{"href":117},[1916],{"type":37,"value":1917},"Bruin Python SDK",{"type":37,"value":1919}," handles the ",{"type":31,"tag":44,"props":1921,"children":1922},{},[1923],{"type":37,"value":1924},"read",{"type":37,"value":1926}," and everything in between. They compose naturally:",{"type":31,"tag":223,"props":1928,"children":1930},{"className":225,"code":1929,"language":227,"meta":7,"style":7},"\"\"\"@bruin\nname: analytics.active_users\nimage: python:3.13\nconnection: my_bigquery\n\nmaterialization:\n  type: table\n  strategy: merge\n\nparameters:\n  enforce_schema: true\n\ncolumns:\n  - name: id\n    type: integer\n    primary_key: true\n  - name: name\n    type: string\n    update_on_merge: true\n  - name: last_seen_at\n    type: timestamp\n    update_on_merge: true\n@bruin\"\"\"\n\nfrom bruin import query, context\n\ndef materialize():\n    if context.is_full_refresh:\n        return query(\"SELECT id, name, last_seen_at FROM raw.users WHERE active = true\")\n\n    return query(f\"\"\"\n        SELECT id, name, last_seen_at\n        FROM raw.users\n        WHERE active = true\n          AND last_seen_at BETWEEN '{context.start_date}' AND '{context.end_date}'\n    \"\"\")\n",[1931],{"type":31,"tag":63,"props":1932,"children":1933},{"__ignoreMap":7},[1934,1941,1949,1956,1963,1970,1977,1984,1991,1998,2005,2012,2019,2026,2033,2040,2047,2054,2061,2069,2077,2084,2091,2098,2105,2127,2134,2149,2162,2185,2192,2213,2221,2229,2238,2285],{"type":31,"tag":233,"props":1935,"children":1936},{"class":235,"line":236},[1937],{"type":31,"tag":233,"props":1938,"children":1939},{"style":240},[1940],{"type":37,"value":243},{"type":31,"tag":233,"props":1942,"children":1943},{"class":235,"line":246},[1944],{"type":31,"tag":233,"props":1945,"children":1946},{"style":240},[1947],{"type":37,"value":1948},"name: analytics.active_users\n",{"type":31,"tag":233,"props":1950,"children":1951},{"class":235,"line":255},[1952],{"type":31,"tag":233,"props":1953,"children":1954},{"style":240},[1955],{"type":37,"value":261},{"type":31,"tag":233,"props":1957,"children":1958},{"class":235,"line":264},[1959],{"type":31,"tag":233,"props":1960,"children":1961},{"style":240},[1962],{"type":37,"value":270},{"type":31,"tag":233,"props":1964,"children":1965},{"class":235,"line":273},[1966],{"type":31,"tag":233,"props":1967,"children":1968},{"emptyLinePlaceholder":277},[1969],{"type":37,"value":280},{"type":31,"tag":233,"props":1971,"children":1972},{"class":235,"line":283},[1973],{"type":31,"tag":233,"props":1974,"children":1975},{"style":240},[1976],{"type":37,"value":289},{"type":31,"tag":233,"props":1978,"children":1979},{"class":235,"line":292},[1980],{"type":31,"tag":233,"props":1981,"children":1982},{"style":240},[1983],{"type":37,"value":298},{"type":31,"tag":233,"props":1985,"children":1986},{"class":235,"line":301},[1987],{"type":31,"tag":233,"props":1988,"children":1989},{"style":240},[1990],{"type":37,"value":1246},{"type":31,"tag":233,"props":1992,"children":1993},{"class":235,"line":310},[1994],{"type":31,"tag":233,"props":1995,"children":1996},{"emptyLinePlaceholder":277},[1997],{"type":37,"value":280},{"type":31,"tag":233,"props":1999,"children":2000},{"class":235,"line":11},[2001],{"type":31,"tag":233,"props":2002,"children":2003},{"style":240},[2004],{"type":37,"value":1261},{"type":31,"tag":233,"props":2006,"children":2007},{"class":235,"line":326},[2008],{"type":31,"tag":233,"props":2009,"children":2010},{"style":240},[2011],{"type":37,"value":1269},{"type":31,"tag":233,"props":2013,"children":2014},{"class":235,"line":335},[2015],{"type":31,"tag":233,"props":2016,"children":2017},{"emptyLinePlaceholder":277},[2018],{"type":37,"value":280},{"type":31,"tag":233,"props":2020,"children":2021},{"class":235,"line":344},[2022],{"type":31,"tag":233,"props":2023,"children":2024},{"style":240},[2025],{"type":37,"value":323},{"type":31,"tag":233,"props":2027,"children":2028},{"class":235,"line":353},[2029],{"type":31,"tag":233,"props":2030,"children":2031},{"style":240},[2032],{"type":37,"value":332},{"type":31,"tag":233,"props":2034,"children":2035},{"class":235,"line":362},[2036],{"type":31,"tag":233,"props":2037,"children":2038},{"style":240},[2039],{"type":37,"value":341},{"type":31,"tag":233,"props":2041,"children":2042},{"class":235,"line":371},[2043],{"type":31,"tag":233,"props":2044,"children":2045},{"style":240},[2046],{"type":37,"value":350},{"type":31,"tag":233,"props":2048,"children":2049},{"class":235,"line":380},[2050],{"type":31,"tag":233,"props":2051,"children":2052},{"style":240},[2053],{"type":37,"value":359},{"type":31,"tag":233,"props":2055,"children":2056},{"class":235,"line":388},[2057],{"type":31,"tag":233,"props":2058,"children":2059},{"style":240},[2060],{"type":37,"value":368},{"type":31,"tag":233,"props":2062,"children":2063},{"class":235,"line":414},[2064],{"type":31,"tag":233,"props":2065,"children":2066},{"style":240},[2067],{"type":37,"value":2068},"    update_on_merge: true\n",{"type":31,"tag":233,"props":2070,"children":2071},{"class":235,"line":422},[2072],{"type":31,"tag":233,"props":2073,"children":2074},{"style":240},[2075],{"type":37,"value":2076},"  - name: last_seen_at\n",{"type":31,"tag":233,"props":2078,"children":2079},{"class":235,"line":442},[2080],{"type":31,"tag":233,"props":2081,"children":2082},{"style":240},[2083],{"type":37,"value":1349},{"type":31,"tag":233,"props":2085,"children":2086},{"class":235,"line":456},[2087],{"type":31,"tag":233,"props":2088,"children":2089},{"style":240},[2090],{"type":37,"value":2068},{"type":31,"tag":233,"props":2092,"children":2093},{"class":235,"line":500},[2094],{"type":31,"tag":233,"props":2095,"children":2096},{"style":240},[2097],{"type":37,"value":377},{"type":31,"tag":233,"props":2099,"children":2100},{"class":235,"line":540},[2101],{"type":31,"tag":233,"props":2102,"children":2103},{"emptyLinePlaceholder":277},[2104],{"type":37,"value":280},{"type":31,"tag":233,"props":2106,"children":2107},{"class":235,"line":1366},[2108,2113,2118,2122],{"type":31,"tag":233,"props":2109,"children":2110},{"style":392},[2111],{"type":37,"value":2112},"from",{"type":31,"tag":233,"props":2114,"children":2115},{"style":398},[2116],{"type":37,"value":2117}," bruin ",{"type":31,"tag":233,"props":2119,"children":2120},{"style":392},[2121],{"type":37,"value":395},{"type":31,"tag":233,"props":2123,"children":2124},{"style":398},[2125],{"type":37,"value":2126}," query, context\n",{"type":31,"tag":233,"props":2128,"children":2129},{"class":235,"line":1386},[2130],{"type":31,"tag":233,"props":2131,"children":2132},{"emptyLinePlaceholder":277},[2133],{"type":37,"value":280},{"type":31,"tag":233,"props":2135,"children":2136},{"class":235,"line":1394},[2137,2141,2145],{"type":31,"tag":233,"props":2138,"children":2139},{"style":392},[2140],{"type":37,"value":428},{"type":31,"tag":233,"props":2142,"children":2143},{"style":431},[2144],{"type":37,"value":434},{"type":31,"tag":233,"props":2146,"children":2147},{"style":398},[2148],{"type":37,"value":439},{"type":31,"tag":233,"props":2150,"children":2151},{"class":235,"line":1410},[2152,2157],{"type":31,"tag":233,"props":2153,"children":2154},{"style":392},[2155],{"type":37,"value":2156},"    if",{"type":31,"tag":233,"props":2158,"children":2159},{"style":398},[2160],{"type":37,"value":2161}," context.is_full_refresh:\n",{"type":31,"tag":233,"props":2163,"children":2164},{"class":235,"line":1422},[2165,2170,2175,2180],{"type":31,"tag":233,"props":2166,"children":2167},{"style":392},[2168],{"type":37,"value":2169},"        return",{"type":31,"tag":233,"props":2171,"children":2172},{"style":398},[2173],{"type":37,"value":2174}," query(",{"type":31,"tag":233,"props":2176,"children":2177},{"style":240},[2178],{"type":37,"value":2179},"\"SELECT id, name, last_seen_at FROM raw.users WHERE active = true\"",{"type":31,"tag":233,"props":2181,"children":2182},{"style":398},[2183],{"type":37,"value":2184},")\n",{"type":31,"tag":233,"props":2186,"children":2187},{"class":235,"line":1458},[2188],{"type":31,"tag":233,"props":2189,"children":2190},{"emptyLinePlaceholder":277},[2191],{"type":37,"value":280},{"type":31,"tag":233,"props":2193,"children":2194},{"class":235,"line":1494},[2195,2199,2203,2208],{"type":31,"tag":233,"props":2196,"children":2197},{"style":392},[2198],{"type":37,"value":448},{"type":31,"tag":233,"props":2200,"children":2201},{"style":398},[2202],{"type":37,"value":2174},{"type":31,"tag":233,"props":2204,"children":2205},{"style":392},[2206],{"type":37,"value":2207},"f",{"type":31,"tag":233,"props":2209,"children":2210},{"style":240},[2211],{"type":37,"value":2212},"\"\"\"\n",{"type":31,"tag":233,"props":2214,"children":2215},{"class":235,"line":1534},[2216],{"type":31,"tag":233,"props":2217,"children":2218},{"style":240},[2219],{"type":37,"value":2220},"        SELECT id, name, last_seen_at\n",{"type":31,"tag":233,"props":2222,"children":2223},{"class":235,"line":1576},[2224],{"type":31,"tag":233,"props":2225,"children":2226},{"style":240},[2227],{"type":37,"value":2228},"        FROM raw.users\n",{"type":31,"tag":233,"props":2230,"children":2232},{"class":235,"line":2231},34,[2233],{"type":31,"tag":233,"props":2234,"children":2235},{"style":240},[2236],{"type":37,"value":2237},"        WHERE active = true\n",{"type":31,"tag":233,"props":2239,"children":2241},{"class":235,"line":2240},35,[2242,2247,2252,2257,2262,2267,2271,2276,2280],{"type":31,"tag":233,"props":2243,"children":2244},{"style":240},[2245],{"type":37,"value":2246},"          AND last_seen_at BETWEEN '",{"type":31,"tag":233,"props":2248,"children":2249},{"style":470},[2250],{"type":37,"value":2251},"{",{"type":31,"tag":233,"props":2253,"children":2254},{"style":398},[2255],{"type":37,"value":2256},"context.start_date",{"type":31,"tag":233,"props":2258,"children":2259},{"style":470},[2260],{"type":37,"value":2261},"}",{"type":31,"tag":233,"props":2263,"children":2264},{"style":240},[2265],{"type":37,"value":2266},"' AND '",{"type":31,"tag":233,"props":2268,"children":2269},{"style":470},[2270],{"type":37,"value":2251},{"type":31,"tag":233,"props":2272,"children":2273},{"style":398},[2274],{"type":37,"value":2275},"context.end_date",{"type":31,"tag":233,"props":2277,"children":2278},{"style":470},[2279],{"type":37,"value":2261},{"type":31,"tag":233,"props":2281,"children":2282},{"style":240},[2283],{"type":37,"value":2284},"'\n",{"type":31,"tag":233,"props":2286,"children":2288},{"class":235,"line":2287},36,[2289,2294],{"type":31,"tag":233,"props":2290,"children":2291},{"style":240},[2292],{"type":37,"value":2293},"    \"\"\"",{"type":31,"tag":233,"props":2295,"children":2296},{"style":398},[2297],{"type":37,"value":2184},{"type":31,"tag":40,"props":2299,"children":2300},{},[2301,2303,2309,2311,2317,2319,2324],{"type":37,"value":2302},"Here the SDK reads from the upstream table (with date filtering via ",{"type":31,"tag":63,"props":2304,"children":2306},{"className":2305},[],[2307],{"type":37,"value":2308},"context",{"type":37,"value":2310},") and materialization writes the result into ",{"type":31,"tag":63,"props":2312,"children":2314},{"className":2313},[],[2315],{"type":37,"value":2316},"analytics.active_users",{"type":37,"value":2318}," using ",{"type":31,"tag":63,"props":2320,"children":2322},{"className":2321},[],[2323],{"type":37,"value":961},{"type":37,"value":200},{"type":31,"tag":211,"props":2326,"children":2328},{"id":2327},"_8-run-it",[2329],{"type":37,"value":2330},"8) Run it",{"type":31,"tag":223,"props":2332,"children":2336},{"className":2333,"code":2334,"language":2335,"meta":7,"style":7},"language-bash shiki shiki-themes github-dark","bruin run assets/my_python_asset.py\n","bash",[2337],{"type":31,"tag":63,"props":2338,"children":2339},{"__ignoreMap":7},[2340],{"type":31,"tag":233,"props":2341,"children":2342},{"class":235,"line":236},[2343,2348,2353],{"type":31,"tag":233,"props":2344,"children":2345},{"style":431},[2346],{"type":37,"value":2347},"bruin",{"type":31,"tag":233,"props":2349,"children":2350},{"style":240},[2351],{"type":37,"value":2352}," run",{"type":31,"tag":233,"props":2354,"children":2355},{"style":240},[2356],{"type":37,"value":2357}," assets/my_python_asset.py\n",{"type":31,"tag":40,"props":2359,"children":2360},{},[2361],{"type":37,"value":2362},"For a full rebuild:",{"type":31,"tag":223,"props":2364,"children":2366},{"className":2333,"code":2365,"language":2335,"meta":7,"style":7},"bruin run --full-refresh assets/my_python_asset.py\n",[2367],{"type":31,"tag":63,"props":2368,"children":2369},{"__ignoreMap":7},[2370],{"type":31,"tag":233,"props":2371,"children":2372},{"class":235,"line":236},[2373,2377,2381,2386],{"type":31,"tag":233,"props":2374,"children":2375},{"style":431},[2376],{"type":37,"value":2347},{"type":31,"tag":233,"props":2378,"children":2379},{"style":240},[2380],{"type":37,"value":2352},{"type":31,"tag":233,"props":2382,"children":2383},{"style":470},[2384],{"type":37,"value":2385}," --full-refresh",{"type":31,"tag":233,"props":2387,"children":2388},{"style":240},[2389],{"type":37,"value":2357},{"type":31,"tag":40,"props":2391,"children":2392},{},[2393,2395,2400],{"type":37,"value":2394},"For a specific date window (use with ",{"type":31,"tag":63,"props":2396,"children":2398},{"className":2397},[],[2399],{"type":37,"value":718},{"type":37,"value":2401},"):",{"type":31,"tag":223,"props":2403,"children":2405},{"className":2333,"code":2404,"language":2335,"meta":7,"style":7},"bruin run --start-date 2026-04-01 --end-date 2026-04-23 assets/my_python_asset.py\n",[2406],{"type":31,"tag":63,"props":2407,"children":2408},{"__ignoreMap":7},[2409],{"type":31,"tag":233,"props":2410,"children":2411},{"class":235,"line":236},[2412,2416,2420,2425,2430,2435,2440],{"type":31,"tag":233,"props":2413,"children":2414},{"style":431},[2415],{"type":37,"value":2347},{"type":31,"tag":233,"props":2417,"children":2418},{"style":240},[2419],{"type":37,"value":2352},{"type":31,"tag":233,"props":2421,"children":2422},{"style":470},[2423],{"type":37,"value":2424}," --start-date",{"type":31,"tag":233,"props":2426,"children":2427},{"style":240},[2428],{"type":37,"value":2429}," 2026-04-01",{"type":31,"tag":233,"props":2431,"children":2432},{"style":470},[2433],{"type":37,"value":2434}," --end-date",{"type":31,"tag":233,"props":2436,"children":2437},{"style":240},[2438],{"type":37,"value":2439}," 2026-04-23",{"type":31,"tag":233,"props":2441,"children":2442},{"style":240},[2443],{"type":37,"value":2357},{"type":31,"tag":124,"props":2445,"children":2446},{},[],{"type":31,"tag":32,"props":2448,"children":2450},{"id":2449},"how-it-works-under-the-hood",[2451],{"type":37,"value":2452},"How it works under the hood",{"type":31,"tag":40,"props":2454,"children":2455},{},[2456],{"type":37,"value":2457},"Bruin uses Apache Arrow as the bridge between Python and the warehouse. On each run:",{"type":31,"tag":147,"props":2459,"children":2460},{},[2461,2480,2492,2497,2507],{"type":31,"tag":94,"props":2462,"children":2463},{},[2464,2466,2472,2474],{"type":37,"value":2465},"Dependencies from your asset's ",{"type":31,"tag":63,"props":2467,"children":2469},{"className":2468},[],[2470],{"type":37,"value":2471},"requirements.txt",{"type":37,"value":2473}," are installed via ",{"type":31,"tag":63,"props":2475,"children":2477},{"className":2476},[],[2478],{"type":37,"value":2479},"uv",{"type":31,"tag":94,"props":2481,"children":2482},{},[2483,2485,2490],{"type":37,"value":2484},"Your ",{"type":31,"tag":63,"props":2486,"children":2488},{"className":2487},[],[2489],{"type":37,"value":143},{"type":37,"value":2491}," function runs",{"type":31,"tag":94,"props":2493,"children":2494},{},[2495],{"type":37,"value":2496},"The return value is serialized to a temporary Arrow file",{"type":31,"tag":94,"props":2498,"children":2499},{},[2500,2505],{"type":31,"tag":63,"props":2501,"children":2503},{"className":2502},[],[2504],{"type":37,"value":170},{"type":37,"value":2506}," loads the file into the destination with your chosen strategy",{"type":31,"tag":94,"props":2508,"children":2509},{},[2510],{"type":37,"value":2511},"The temporary file is deleted",{"type":31,"tag":40,"props":2513,"children":2514},{},[2515,2517,2522,2524,2529],{"type":37,"value":2516},"This means your Python code never needs warehouse credentials directly - ",{"type":31,"tag":63,"props":2518,"children":2520},{"className":2519},[],[2521],{"type":37,"value":170},{"type":37,"value":2523}," handles the load using the connection you declared in the ",{"type":31,"tag":63,"props":2525,"children":2527},{"className":2526},[],[2528],{"type":37,"value":565},{"type":37,"value":2530}," block.",{"type":31,"tag":124,"props":2532,"children":2533},{},[],{"type":31,"tag":32,"props":2535,"children":2537},{"id":2536},"key-takeaways",[2538],{"type":37,"value":2539},"Key takeaways",{"type":31,"tag":90,"props":2541,"children":2542},{},[2543,2563,2605,2615,2626],{"type":31,"tag":94,"props":2544,"children":2545},{},[2546,2548,2554,2556,2561],{"type":37,"value":2547},"Declare ",{"type":31,"tag":63,"props":2549,"children":2551},{"className":2550},[],[2552],{"type":37,"value":2553},"materialization.type: table",{"type":37,"value":2555}," plus a ",{"type":31,"tag":63,"props":2557,"children":2559},{"className":2558},[],[2560],{"type":37,"value":613},{"type":37,"value":2562}," and Bruin loads your DataFrame for you",{"type":31,"tag":94,"props":2564,"children":2565},{},[2566,2568,2573,2574,2579,2580,2585,2586,2591,2593,2598,2599,2603],{"type":37,"value":2567},"Supported strategies: ",{"type":31,"tag":63,"props":2569,"children":2571},{"className":2570},[],[2572],{"type":37,"value":739},{"type":37,"value":478},{"type":31,"tag":63,"props":2575,"children":2577},{"className":2576},[],[2578],{"type":37,"value":813},{"type":37,"value":478},{"type":31,"tag":63,"props":2581,"children":2583},{"className":2582},[],[2584],{"type":37,"value":961},{"type":37,"value":478},{"type":31,"tag":63,"props":2587,"children":2589},{"className":2588},[],[2590],{"type":37,"value":718},{"type":37,"value":2592},". ",{"type":31,"tag":63,"props":2594,"children":2596},{"className":2595},[],[2597],{"type":37,"value":703},{"type":37,"value":583},{"type":31,"tag":44,"props":2600,"children":2601},{},[2602],{"type":37,"value":710},{"type":37,"value":2604}," supported for Python",{"type":31,"tag":94,"props":2606,"children":2607},{},[2608,2610],{"type":37,"value":2609},"Return a pandas DataFrame, polars DataFrame, or list of dicts from ",{"type":31,"tag":63,"props":2611,"children":2613},{"className":2612},[],[2614],{"type":37,"value":143},{"type":31,"tag":94,"props":2616,"children":2617},{},[2618,2620,2624],{"type":37,"value":2619},"Pair materialization with the ",{"type":31,"tag":52,"props":2621,"children":2622},{"href":117},[2623],{"type":37,"value":1917},{"type":37,"value":2625}," to read, transform, and write with almost no boilerplate",{"type":31,"tag":94,"props":2627,"children":2628},{},[2629],{"type":37,"value":2630},"Column-level checks, lineage, and schema enforcement all work the same as SQL assets",{"type":31,"tag":124,"props":2632,"children":2633},{},[],{"type":31,"tag":32,"props":2635,"children":2637},{"id":2636},"helpful-links",[2638],{"type":37,"value":2639},"Helpful links",{"type":31,"tag":90,"props":2641,"children":2642},{},[2643,2652,2662,2670],{"type":31,"tag":94,"props":2644,"children":2645},{},[2646],{"type":31,"tag":52,"props":2647,"children":2649},{"href":54,"rel":2648},[56],[2650],{"type":37,"value":2651},"Python asset reference (Materialization section)",{"type":31,"tag":94,"props":2653,"children":2654},{},[2655],{"type":31,"tag":52,"props":2656,"children":2659},{"href":2657,"rel":2658},"https://getbruin.com/docs/bruin/assets/materialization.html",[56],[2660],{"type":37,"value":2661},"Materialization strategies overview",{"type":31,"tag":94,"props":2663,"children":2664},{},[2665],{"type":31,"tag":52,"props":2666,"children":2667},{"href":117},[2668],{"type":37,"value":2669},"Bruin Python SDK tutorial",{"type":31,"tag":94,"props":2671,"children":2672},{},[2673],{"type":31,"tag":52,"props":2674,"children":2677},{"href":2675,"rel":2676},"https://pypi.org/project/bruin-sdk/",[56],[2678],{"type":37,"value":2679},"Bruin Python SDK on PyPI",{"type":31,"tag":2681,"props":2682,"children":2683},"style",{},[2684],{"type":37,"value":2685},"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":246,"depth":246,"links":2687},[2688,2689,2690,2700,2701,2702],{"id":34,"depth":246,"text":38},{"id":129,"depth":246,"text":132},{"id":206,"depth":246,"text":209,"children":2691},[2692,2693,2694,2695,2696,2697,2698,2699],{"id":213,"depth":255,"text":216},{"id":633,"depth":255,"text":636},{"id":689,"depth":255,"text":692},{"id":1165,"depth":255,"text":1168},{"id":1584,"depth":255,"text":1587},{"id":1785,"depth":255,"text":1788},{"id":1897,"depth":255,"text":1900},{"id":2327,"depth":255,"text":2330},{"id":2449,"depth":246,"text":2452},{"id":2536,"depth":246,"text":2539},{"id":2636,"depth":246,"text":2639},"markdown","content:tutorials:python-materialization.md","content","tutorials/python-materialization.md","tutorials/python-materialization","md",{"_path":4,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":8,"description":9,"date":10,"readingTime":11,"category":12,"tags":2710,"difficulty":19,"journeys":2711,"hidden":6,"author":2712,"body":2713,"_type":2703,"_id":2704,"_source":2705,"_file":2706,"_stem":2707,"_extension":2708},[14,15,16,17,18],[21,22],{"name":24,"role":25,"image":26},{"type":28,"children":2714,"toc":5011},[2715,2719,2739,2747,2754,2779,2782,2786,2796,2821,2825,2838,2841,2845,2849,2853,3107,3111,3173,3177,3186,3216,3220,3224,3251,3260,3264,3311,3320,3324,3371,3380,3384,3446,3455,3465,3628,3637,3641,3651,4024,4028,4032,4211,4215,4219,4223,4319,4323,4342,4684,4706,4710,4731,4735,4760,4770,4807,4810,4814,4818,4863,4879,4882,4886,4966,4969,4973,5007],{"type":31,"tag":32,"props":2716,"children":2717},{"id":34},[2718],{"type":37,"value":38},{"type":31,"tag":40,"props":2720,"children":2721},{},[2722,2726,2727,2732,2733,2738],{"type":31,"tag":44,"props":2723,"children":2724},{},[2725],{"type":37,"value":48},{"type":37,"value":50},{"type":31,"tag":52,"props":2728,"children":2730},{"href":54,"rel":2729},[56],[2731],{"type":37,"value":59},{"type":37,"value":61},{"type":31,"tag":63,"props":2734,"children":2736},{"className":2735},[],[2737],{"type":37,"value":68},{"type":37,"value":70},{"type":31,"tag":40,"props":2740,"children":2741},{},[2742,2746],{"type":31,"tag":44,"props":2743,"children":2744},{},[2745],{"type":37,"value":78},{"type":37,"value":80},{"type":31,"tag":40,"props":2748,"children":2749},{},[2750],{"type":31,"tag":44,"props":2751,"children":2752},{},[2753],{"type":37,"value":88},{"type":31,"tag":90,"props":2755,"children":2756},{},[2757,2766,2770],{"type":31,"tag":94,"props":2758,"children":2759},{},[2760,2765],{"type":31,"tag":52,"props":2761,"children":2763},{"href":99,"rel":2762},[56],[2764],{"type":37,"value":14},{"type":37,"value":104},{"type":31,"tag":94,"props":2767,"children":2768},{},[2769],{"type":37,"value":109},{"type":31,"tag":94,"props":2771,"children":2772},{},[2773,2774,2778],{"type":37,"value":114},{"type":31,"tag":52,"props":2775,"children":2776},{"href":117},[2777],{"type":37,"value":120},{"type":37,"value":122},{"type":31,"tag":124,"props":2780,"children":2781},{},[],{"type":31,"tag":32,"props":2783,"children":2784},{"id":129},[2785],{"type":37,"value":132},{"type":31,"tag":40,"props":2787,"children":2788},{},[2789,2790,2795],{"type":37,"value":137},{"type":31,"tag":63,"props":2791,"children":2793},{"className":2792},[],[2794],{"type":37,"value":143},{"type":37,"value":145},{"type":31,"tag":147,"props":2797,"children":2798},{},[2799,2803,2807,2817],{"type":31,"tag":94,"props":2800,"children":2801},{},[2802],{"type":37,"value":154},{"type":31,"tag":94,"props":2804,"children":2805},{},[2806],{"type":37,"value":159},{"type":31,"tag":94,"props":2808,"children":2809},{},[2810,2811,2816],{"type":37,"value":164},{"type":31,"tag":63,"props":2812,"children":2814},{"className":2813},[],[2815],{"type":37,"value":170},{"type":37,"value":172},{"type":31,"tag":94,"props":2818,"children":2819},{},[2820],{"type":37,"value":177},{"type":31,"tag":40,"props":2822,"children":2823},{},[2824],{"type":37,"value":182},{"type":31,"tag":184,"props":2826,"children":2827},{},[2828],{"type":31,"tag":40,"props":2829,"children":2830},{},[2831,2832,2837],{"type":37,"value":191},{"type":31,"tag":52,"props":2833,"children":2835},{"href":194,"rel":2834},[56],[2836],{"type":37,"value":198},{"type":37,"value":200},{"type":31,"tag":124,"props":2839,"children":2840},{},[],{"type":31,"tag":32,"props":2842,"children":2843},{"id":206},[2844],{"type":37,"value":209},{"type":31,"tag":211,"props":2846,"children":2847},{"id":213},[2848],{"type":37,"value":216},{"type":31,"tag":40,"props":2850,"children":2851},{},[2852],{"type":37,"value":221},{"type":31,"tag":223,"props":2854,"children":2855},{"className":225,"code":226,"language":227,"meta":7,"style":7},[2856],{"type":31,"tag":63,"props":2857,"children":2858},{"__ignoreMap":7},[2859,2866,2873,2880,2887,2894,2901,2908,2915,2922,2929,2936,2943,2950,2957,2964,2971,2978,2997,3004,3019,3030,3065,3100],{"type":31,"tag":233,"props":2860,"children":2861},{"class":235,"line":236},[2862],{"type":31,"tag":233,"props":2863,"children":2864},{"style":240},[2865],{"type":37,"value":243},{"type":31,"tag":233,"props":2867,"children":2868},{"class":235,"line":246},[2869],{"type":31,"tag":233,"props":2870,"children":2871},{"style":240},[2872],{"type":37,"value":252},{"type":31,"tag":233,"props":2874,"children":2875},{"class":235,"line":255},[2876],{"type":31,"tag":233,"props":2877,"children":2878},{"style":240},[2879],{"type":37,"value":261},{"type":31,"tag":233,"props":2881,"children":2882},{"class":235,"line":264},[2883],{"type":31,"tag":233,"props":2884,"children":2885},{"style":240},[2886],{"type":37,"value":270},{"type":31,"tag":233,"props":2888,"children":2889},{"class":235,"line":273},[2890],{"type":31,"tag":233,"props":2891,"children":2892},{"emptyLinePlaceholder":277},[2893],{"type":37,"value":280},{"type":31,"tag":233,"props":2895,"children":2896},{"class":235,"line":283},[2897],{"type":31,"tag":233,"props":2898,"children":2899},{"style":240},[2900],{"type":37,"value":289},{"type":31,"tag":233,"props":2902,"children":2903},{"class":235,"line":292},[2904],{"type":31,"tag":233,"props":2905,"children":2906},{"style":240},[2907],{"type":37,"value":298},{"type":31,"tag":233,"props":2909,"children":2910},{"class":235,"line":301},[2911],{"type":31,"tag":233,"props":2912,"children":2913},{"style":240},[2914],{"type":37,"value":307},{"type":31,"tag":233,"props":2916,"children":2917},{"class":235,"line":310},[2918],{"type":31,"tag":233,"props":2919,"children":2920},{"emptyLinePlaceholder":277},[2921],{"type":37,"value":280},{"type":31,"tag":233,"props":2923,"children":2924},{"class":235,"line":11},[2925],{"type":31,"tag":233,"props":2926,"children":2927},{"style":240},[2928],{"type":37,"value":323},{"type":31,"tag":233,"props":2930,"children":2931},{"class":235,"line":326},[2932],{"type":31,"tag":233,"props":2933,"children":2934},{"style":240},[2935],{"type":37,"value":332},{"type":31,"tag":233,"props":2937,"children":2938},{"class":235,"line":335},[2939],{"type":31,"tag":233,"props":2940,"children":2941},{"style":240},[2942],{"type":37,"value":341},{"type":31,"tag":233,"props":2944,"children":2945},{"class":235,"line":344},[2946],{"type":31,"tag":233,"props":2947,"children":2948},{"style":240},[2949],{"type":37,"value":350},{"type":31,"tag":233,"props":2951,"children":2952},{"class":235,"line":353},[2953],{"type":31,"tag":233,"props":2954,"children":2955},{"style":240},[2956],{"type":37,"value":359},{"type":31,"tag":233,"props":2958,"children":2959},{"class":235,"line":362},[2960],{"type":31,"tag":233,"props":2961,"children":2962},{"style":240},[2963],{"type":37,"value":368},{"type":31,"tag":233,"props":2965,"children":2966},{"class":235,"line":371},[2967],{"type":31,"tag":233,"props":2968,"children":2969},{"style":240},[2970],{"type":37,"value":377},{"type":31,"tag":233,"props":2972,"children":2973},{"class":235,"line":380},[2974],{"type":31,"tag":233,"props":2975,"children":2976},{"emptyLinePlaceholder":277},[2977],{"type":37,"value":280},{"type":31,"tag":233,"props":2979,"children":2980},{"class":235,"line":388},[2981,2985,2989,2993],{"type":31,"tag":233,"props":2982,"children":2983},{"style":392},[2984],{"type":37,"value":395},{"type":31,"tag":233,"props":2986,"children":2987},{"style":398},[2988],{"type":37,"value":401},{"type":31,"tag":233,"props":2990,"children":2991},{"style":392},[2992],{"type":37,"value":406},{"type":31,"tag":233,"props":2994,"children":2995},{"style":398},[2996],{"type":37,"value":411},{"type":31,"tag":233,"props":2998,"children":2999},{"class":235,"line":414},[3000],{"type":31,"tag":233,"props":3001,"children":3002},{"emptyLinePlaceholder":277},[3003],{"type":37,"value":280},{"type":31,"tag":233,"props":3005,"children":3006},{"class":235,"line":422},[3007,3011,3015],{"type":31,"tag":233,"props":3008,"children":3009},{"style":392},[3010],{"type":37,"value":428},{"type":31,"tag":233,"props":3012,"children":3013},{"style":431},[3014],{"type":37,"value":434},{"type":31,"tag":233,"props":3016,"children":3017},{"style":398},[3018],{"type":37,"value":439},{"type":31,"tag":233,"props":3020,"children":3021},{"class":235,"line":442},[3022,3026],{"type":31,"tag":233,"props":3023,"children":3024},{"style":392},[3025],{"type":37,"value":448},{"type":31,"tag":233,"props":3027,"children":3028},{"style":398},[3029],{"type":37,"value":453},{"type":31,"tag":233,"props":3031,"children":3032},{"class":235,"line":456},[3033,3037,3041,3045,3049,3053,3057,3061],{"type":31,"tag":233,"props":3034,"children":3035},{"style":240},[3036],{"type":37,"value":462},{"type":31,"tag":233,"props":3038,"children":3039},{"style":398},[3040],{"type":37,"value":467},{"type":31,"tag":233,"props":3042,"children":3043},{"style":470},[3044],{"type":37,"value":473},{"type":31,"tag":233,"props":3046,"children":3047},{"style":398},[3048],{"type":37,"value":478},{"type":31,"tag":233,"props":3050,"children":3051},{"style":470},[3052],{"type":37,"value":483},{"type":31,"tag":233,"props":3054,"children":3055},{"style":398},[3056],{"type":37,"value":478},{"type":31,"tag":233,"props":3058,"children":3059},{"style":470},[3060],{"type":37,"value":492},{"type":31,"tag":233,"props":3062,"children":3063},{"style":398},[3064],{"type":37,"value":497},{"type":31,"tag":233,"props":3066,"children":3067},{"class":235,"line":500},[3068,3072,3076,3080,3084,3088,3092,3096],{"type":31,"tag":233,"props":3069,"children":3070},{"style":240},[3071],{"type":37,"value":506},{"type":31,"tag":233,"props":3073,"children":3074},{"style":398},[3075],{"type":37,"value":467},{"type":31,"tag":233,"props":3077,"children":3078},{"style":240},[3079],{"type":37,"value":515},{"type":31,"tag":233,"props":3081,"children":3082},{"style":398},[3083],{"type":37,"value":478},{"type":31,"tag":233,"props":3085,"children":3086},{"style":240},[3087],{"type":37,"value":524},{"type":31,"tag":233,"props":3089,"children":3090},{"style":398},[3091],{"type":37,"value":478},{"type":31,"tag":233,"props":3093,"children":3094},{"style":240},[3095],{"type":37,"value":533},{"type":31,"tag":233,"props":3097,"children":3098},{"style":398},[3099],{"type":37,"value":497},{"type":31,"tag":233,"props":3101,"children":3102},{"class":235,"line":540},[3103],{"type":31,"tag":233,"props":3104,"children":3105},{"style":398},[3106],{"type":37,"value":546},{"type":31,"tag":40,"props":3108,"children":3109},{},[3110],{"type":37,"value":551},{"type":31,"tag":90,"props":3112,"children":3113},{},[3114,3159,3169],{"type":31,"tag":94,"props":3115,"children":3116},{},[3117,3118,3123,3124,3129,3130,3135,3136,3141,3142,3147,3148,3153,3154],{"type":37,"value":559},{"type":31,"tag":63,"props":3119,"children":3121},{"className":3120},[],[3122],{"type":37,"value":565},{"type":37,"value":567},{"type":31,"tag":63,"props":3125,"children":3127},{"className":3126},[],[3128],{"type":37,"value":573},{"type":37,"value":575},{"type":31,"tag":63,"props":3131,"children":3133},{"className":3132},[],[3134],{"type":37,"value":581},{"type":37,"value":583},{"type":31,"tag":63,"props":3137,"children":3139},{"className":3138},[],[3140],{"type":37,"value":589},{"type":37,"value":591},{"type":31,"tag":63,"props":3143,"children":3145},{"className":3144},[],[3146],{"type":37,"value":597},{"type":37,"value":599},{"type":31,"tag":63,"props":3149,"children":3151},{"className":3150},[],[3152],{"type":37,"value":605},{"type":37,"value":607},{"type":31,"tag":63,"props":3155,"children":3157},{"className":3156},[],[3158],{"type":37,"value":613},{"type":31,"tag":94,"props":3160,"children":3161},{},[3162,3163,3168],{"type":37,"value":618},{"type":31,"tag":63,"props":3164,"children":3166},{"className":3165},[],[3167],{"type":37,"value":143},{"type":37,"value":625},{"type":31,"tag":94,"props":3170,"children":3171},{},[3172],{"type":37,"value":630},{"type":31,"tag":211,"props":3174,"children":3175},{"id":633},[3176],{"type":37,"value":636},{"type":31,"tag":40,"props":3178,"children":3179},{},[3180,3185],{"type":31,"tag":63,"props":3181,"children":3183},{"className":3182},[],[3184],{"type":37,"value":143},{"type":37,"value":646},{"type":31,"tag":90,"props":3187,"children":3188},{},[3189,3196,3203],{"type":31,"tag":94,"props":3190,"children":3191},{},[3192],{"type":31,"tag":44,"props":3193,"children":3194},{},[3195],{"type":37,"value":657},{"type":31,"tag":94,"props":3197,"children":3198},{},[3199],{"type":31,"tag":44,"props":3200,"children":3201},{},[3202],{"type":37,"value":665},{"type":31,"tag":94,"props":3204,"children":3205},{},[3206,3210,3211],{"type":31,"tag":44,"props":3207,"children":3208},{},[3209],{"type":37,"value":673},{"type":37,"value":675},{"type":31,"tag":63,"props":3212,"children":3214},{"className":3213},[],[3215],{"type":37,"value":681},{"type":31,"tag":40,"props":3217,"children":3218},{},[3219],{"type":37,"value":686},{"type":31,"tag":211,"props":3221,"children":3222},{"id":689},[3223],{"type":37,"value":692},{"type":31,"tag":40,"props":3225,"children":3226},{},[3227,3228,3233,3234,3238,3239,3244,3245,3250],{"type":37,"value":697},{"type":31,"tag":63,"props":3229,"children":3231},{"className":3230},[],[3232],{"type":37,"value":703},{"type":37,"value":705},{"type":31,"tag":44,"props":3235,"children":3236},{},[3237],{"type":37,"value":710},{"type":37,"value":712},{"type":31,"tag":63,"props":3240,"children":3242},{"className":3241},[],[3243],{"type":37,"value":718},{"type":37,"value":720},{"type":31,"tag":63,"props":3246,"children":3248},{"className":3247},[],[3249],{"type":37,"value":726},{"type":37,"value":728},{"type":31,"tag":730,"props":3252,"children":3253},{"id":732},[3254,3259],{"type":31,"tag":63,"props":3255,"children":3257},{"className":3256},[],[3258],{"type":37,"value":739},{"type":37,"value":741},{"type":31,"tag":40,"props":3261,"children":3262},{},[3263],{"type":37,"value":746},{"type":31,"tag":223,"props":3265,"children":3266},{"className":749,"code":750,"language":751,"meta":7,"style":7},[3267],{"type":31,"tag":63,"props":3268,"children":3269},{"__ignoreMap":7},[3270,3281,3296],{"type":31,"tag":233,"props":3271,"children":3272},{"class":235,"line":236},[3273,3277],{"type":31,"tag":233,"props":3274,"children":3275},{"style":761},[3276],{"type":37,"value":597},{"type":31,"tag":233,"props":3278,"children":3279},{"style":398},[3280],{"type":37,"value":768},{"type":31,"tag":233,"props":3282,"children":3283},{"class":235,"line":246},[3284,3288,3292],{"type":31,"tag":233,"props":3285,"children":3286},{"style":761},[3287],{"type":37,"value":776},{"type":31,"tag":233,"props":3289,"children":3290},{"style":398},[3291],{"type":37,"value":781},{"type":31,"tag":233,"props":3293,"children":3294},{"style":240},[3295],{"type":37,"value":786},{"type":31,"tag":233,"props":3297,"children":3298},{"class":235,"line":255},[3299,3303,3307],{"type":31,"tag":233,"props":3300,"children":3301},{"style":761},[3302],{"type":37,"value":794},{"type":31,"tag":233,"props":3304,"children":3305},{"style":398},[3306],{"type":37,"value":781},{"type":31,"tag":233,"props":3308,"children":3309},{"style":240},[3310],{"type":37,"value":803},{"type":31,"tag":730,"props":3312,"children":3313},{"id":806},[3314,3319],{"type":31,"tag":63,"props":3315,"children":3317},{"className":3316},[],[3318],{"type":37,"value":813},{"type":37,"value":815},{"type":31,"tag":40,"props":3321,"children":3322},{},[3323],{"type":37,"value":820},{"type":31,"tag":223,"props":3325,"children":3326},{"className":749,"code":823,"language":751,"meta":7,"style":7},[3327],{"type":31,"tag":63,"props":3328,"children":3329},{"__ignoreMap":7},[3330,3341,3356],{"type":31,"tag":233,"props":3331,"children":3332},{"class":235,"line":236},[3333,3337],{"type":31,"tag":233,"props":3334,"children":3335},{"style":761},[3336],{"type":37,"value":597},{"type":31,"tag":233,"props":3338,"children":3339},{"style":398},[3340],{"type":37,"value":768},{"type":31,"tag":233,"props":3342,"children":3343},{"class":235,"line":246},[3344,3348,3352],{"type":31,"tag":233,"props":3345,"children":3346},{"style":761},[3347],{"type":37,"value":776},{"type":31,"tag":233,"props":3349,"children":3350},{"style":398},[3351],{"type":37,"value":781},{"type":31,"tag":233,"props":3353,"children":3354},{"style":240},[3355],{"type":37,"value":786},{"type":31,"tag":233,"props":3357,"children":3358},{"class":235,"line":255},[3359,3363,3367],{"type":31,"tag":233,"props":3360,"children":3361},{"style":761},[3362],{"type":37,"value":794},{"type":31,"tag":233,"props":3364,"children":3365},{"style":398},[3366],{"type":37,"value":781},{"type":31,"tag":233,"props":3368,"children":3369},{"style":240},[3370],{"type":37,"value":869},{"type":31,"tag":730,"props":3372,"children":3373},{"id":872},[3374,3379],{"type":31,"tag":63,"props":3375,"children":3377},{"className":3376},[],[3378],{"type":37,"value":718},{"type":37,"value":880},{"type":31,"tag":40,"props":3381,"children":3382},{},[3383],{"type":37,"value":885},{"type":31,"tag":223,"props":3385,"children":3386},{"className":749,"code":888,"language":751,"meta":7,"style":7},[3387],{"type":31,"tag":63,"props":3388,"children":3389},{"__ignoreMap":7},[3390,3401,3416,3431],{"type":31,"tag":233,"props":3391,"children":3392},{"class":235,"line":236},[3393,3397],{"type":31,"tag":233,"props":3394,"children":3395},{"style":761},[3396],{"type":37,"value":597},{"type":31,"tag":233,"props":3398,"children":3399},{"style":398},[3400],{"type":37,"value":768},{"type":31,"tag":233,"props":3402,"children":3403},{"class":235,"line":246},[3404,3408,3412],{"type":31,"tag":233,"props":3405,"children":3406},{"style":761},[3407],{"type":37,"value":776},{"type":31,"tag":233,"props":3409,"children":3410},{"style":398},[3411],{"type":37,"value":781},{"type":31,"tag":233,"props":3413,"children":3414},{"style":240},[3415],{"type":37,"value":786},{"type":31,"tag":233,"props":3417,"children":3418},{"class":235,"line":255},[3419,3423,3427],{"type":31,"tag":233,"props":3420,"children":3421},{"style":761},[3422],{"type":37,"value":794},{"type":31,"tag":233,"props":3424,"children":3425},{"style":398},[3426],{"type":37,"value":781},{"type":31,"tag":233,"props":3428,"children":3429},{"style":240},[3430],{"type":37,"value":934},{"type":31,"tag":233,"props":3432,"children":3433},{"class":235,"line":264},[3434,3438,3442],{"type":31,"tag":233,"props":3435,"children":3436},{"style":761},[3437],{"type":37,"value":942},{"type":31,"tag":233,"props":3439,"children":3440},{"style":398},[3441],{"type":37,"value":781},{"type":31,"tag":233,"props":3443,"children":3444},{"style":240},[3445],{"type":37,"value":951},{"type":31,"tag":730,"props":3447,"children":3448},{"id":954},[3449,3454],{"type":31,"tag":63,"props":3450,"children":3452},{"className":3451},[],[3453],{"type":37,"value":961},{"type":37,"value":963},{"type":31,"tag":40,"props":3456,"children":3457},{},[3458,3459,3464],{"type":37,"value":968},{"type":31,"tag":63,"props":3460,"children":3462},{"className":3461},[],[3463],{"type":37,"value":974},{"type":37,"value":976},{"type":31,"tag":223,"props":3466,"children":3467},{"className":749,"code":979,"language":751,"meta":7,"style":7},[3468],{"type":31,"tag":63,"props":3469,"children":3470},{"__ignoreMap":7},[3471,3482,3497,3512,3519,3530,3549,3564,3579,3598,3613],{"type":31,"tag":233,"props":3472,"children":3473},{"class":235,"line":236},[3474,3478],{"type":31,"tag":233,"props":3475,"children":3476},{"style":761},[3477],{"type":37,"value":597},{"type":31,"tag":233,"props":3479,"children":3480},{"style":398},[3481],{"type":37,"value":768},{"type":31,"tag":233,"props":3483,"children":3484},{"class":235,"line":246},[3485,3489,3493],{"type":31,"tag":233,"props":3486,"children":3487},{"style":761},[3488],{"type":37,"value":776},{"type":31,"tag":233,"props":3490,"children":3491},{"style":398},[3492],{"type":37,"value":781},{"type":31,"tag":233,"props":3494,"children":3495},{"style":240},[3496],{"type":37,"value":786},{"type":31,"tag":233,"props":3498,"children":3499},{"class":235,"line":255},[3500,3504,3508],{"type":31,"tag":233,"props":3501,"children":3502},{"style":761},[3503],{"type":37,"value":794},{"type":31,"tag":233,"props":3505,"children":3506},{"style":398},[3507],{"type":37,"value":781},{"type":31,"tag":233,"props":3509,"children":3510},{"style":240},[3511],{"type":37,"value":1025},{"type":31,"tag":233,"props":3513,"children":3514},{"class":235,"line":264},[3515],{"type":31,"tag":233,"props":3516,"children":3517},{"emptyLinePlaceholder":277},[3518],{"type":37,"value":280},{"type":31,"tag":233,"props":3520,"children":3521},{"class":235,"line":273},[3522,3526],{"type":31,"tag":233,"props":3523,"children":3524},{"style":761},[3525],{"type":37,"value":1040},{"type":31,"tag":233,"props":3527,"children":3528},{"style":398},[3529],{"type":37,"value":768},{"type":31,"tag":233,"props":3531,"children":3532},{"class":235,"line":283},[3533,3537,3541,3545],{"type":31,"tag":233,"props":3534,"children":3535},{"style":398},[3536],{"type":37,"value":1052},{"type":31,"tag":233,"props":3538,"children":3539},{"style":761},[3540],{"type":37,"value":1057},{"type":31,"tag":233,"props":3542,"children":3543},{"style":398},[3544],{"type":37,"value":781},{"type":31,"tag":233,"props":3546,"children":3547},{"style":240},[3548],{"type":37,"value":1066},{"type":31,"tag":233,"props":3550,"children":3551},{"class":235,"line":292},[3552,3556,3560],{"type":31,"tag":233,"props":3553,"children":3554},{"style":761},[3555],{"type":37,"value":1074},{"type":31,"tag":233,"props":3557,"children":3558},{"style":398},[3559],{"type":37,"value":781},{"type":31,"tag":233,"props":3561,"children":3562},{"style":240},[3563],{"type":37,"value":1083},{"type":31,"tag":233,"props":3565,"children":3566},{"class":235,"line":301},[3567,3571,3575],{"type":31,"tag":233,"props":3568,"children":3569},{"style":761},[3570],{"type":37,"value":1091},{"type":31,"tag":233,"props":3572,"children":3573},{"style":398},[3574],{"type":37,"value":781},{"type":31,"tag":233,"props":3576,"children":3577},{"style":470},[3578],{"type":37,"value":1100},{"type":31,"tag":233,"props":3580,"children":3581},{"class":235,"line":310},[3582,3586,3590,3594],{"type":31,"tag":233,"props":3583,"children":3584},{"style":398},[3585],{"type":37,"value":1052},{"type":31,"tag":233,"props":3587,"children":3588},{"style":761},[3589],{"type":37,"value":1057},{"type":31,"tag":233,"props":3591,"children":3592},{"style":398},[3593],{"type":37,"value":781},{"type":31,"tag":233,"props":3595,"children":3596},{"style":240},[3597],{"type":37,"value":1120},{"type":31,"tag":233,"props":3599,"children":3600},{"class":235,"line":11},[3601,3605,3609],{"type":31,"tag":233,"props":3602,"children":3603},{"style":761},[3604],{"type":37,"value":1074},{"type":31,"tag":233,"props":3606,"children":3607},{"style":398},[3608],{"type":37,"value":781},{"type":31,"tag":233,"props":3610,"children":3611},{"style":240},[3612],{"type":37,"value":1136},{"type":31,"tag":233,"props":3614,"children":3615},{"class":235,"line":326},[3616,3620,3624],{"type":31,"tag":233,"props":3617,"children":3618},{"style":761},[3619],{"type":37,"value":1144},{"type":31,"tag":233,"props":3621,"children":3622},{"style":398},[3623],{"type":37,"value":781},{"type":31,"tag":233,"props":3625,"children":3626},{"style":470},[3627],{"type":37,"value":1100},{"type":31,"tag":40,"props":3629,"children":3630},{},[3631,3636],{"type":31,"tag":63,"props":3632,"children":3634},{"className":3633},[],[3635],{"type":37,"value":961},{"type":37,"value":1162},{"type":31,"tag":211,"props":3638,"children":3639},{"id":1165},[3640],{"type":37,"value":1168},{"type":31,"tag":40,"props":3642,"children":3643},{},[3644,3645,3650],{"type":37,"value":1173},{"type":31,"tag":63,"props":3646,"children":3648},{"className":3647},[],[3649],{"type":37,"value":1179},{"type":37,"value":1181},{"type":31,"tag":223,"props":3652,"children":3653},{"className":225,"code":1184,"language":227,"meta":7,"style":7},[3654],{"type":31,"tag":63,"props":3655,"children":3656},{"__ignoreMap":7},[3657,3664,3671,3678,3685,3692,3699,3706,3713,3720,3727,3734,3741,3748,3755,3762,3769,3776,3783,3790,3797,3804,3811,3818,3825,3844,3851,3866,3877,3912,3947,3982,4017],{"type":31,"tag":233,"props":3658,"children":3659},{"class":235,"line":236},[3660],{"type":31,"tag":233,"props":3661,"children":3662},{"style":240},[3663],{"type":37,"value":243},{"type":31,"tag":233,"props":3665,"children":3666},{"class":235,"line":246},[3667],{"type":31,"tag":233,"props":3668,"children":3669},{"style":240},[3670],{"type":37,"value":1203},{"type":31,"tag":233,"props":3672,"children":3673},{"class":235,"line":255},[3674],{"type":31,"tag":233,"props":3675,"children":3676},{"style":240},[3677],{"type":37,"value":261},{"type":31,"tag":233,"props":3679,"children":3680},{"class":235,"line":264},[3681],{"type":31,"tag":233,"props":3682,"children":3683},{"style":240},[3684],{"type":37,"value":270},{"type":31,"tag":233,"props":3686,"children":3687},{"class":235,"line":273},[3688],{"type":31,"tag":233,"props":3689,"children":3690},{"emptyLinePlaceholder":277},[3691],{"type":37,"value":280},{"type":31,"tag":233,"props":3693,"children":3694},{"class":235,"line":283},[3695],{"type":31,"tag":233,"props":3696,"children":3697},{"style":240},[3698],{"type":37,"value":289},{"type":31,"tag":233,"props":3700,"children":3701},{"class":235,"line":292},[3702],{"type":31,"tag":233,"props":3703,"children":3704},{"style":240},[3705],{"type":37,"value":298},{"type":31,"tag":233,"props":3707,"children":3708},{"class":235,"line":301},[3709],{"type":31,"tag":233,"props":3710,"children":3711},{"style":240},[3712],{"type":37,"value":1246},{"type":31,"tag":233,"props":3714,"children":3715},{"class":235,"line":310},[3716],{"type":31,"tag":233,"props":3717,"children":3718},{"emptyLinePlaceholder":277},[3719],{"type":37,"value":280},{"type":31,"tag":233,"props":3721,"children":3722},{"class":235,"line":11},[3723],{"type":31,"tag":233,"props":3724,"children":3725},{"style":240},[3726],{"type":37,"value":1261},{"type":31,"tag":233,"props":3728,"children":3729},{"class":235,"line":326},[3730],{"type":31,"tag":233,"props":3731,"children":3732},{"style":240},[3733],{"type":37,"value":1269},{"type":31,"tag":233,"props":3735,"children":3736},{"class":235,"line":335},[3737],{"type":31,"tag":233,"props":3738,"children":3739},{"emptyLinePlaceholder":277},[3740],{"type":37,"value":280},{"type":31,"tag":233,"props":3742,"children":3743},{"class":235,"line":344},[3744],{"type":31,"tag":233,"props":3745,"children":3746},{"style":240},[3747],{"type":37,"value":323},{"type":31,"tag":233,"props":3749,"children":3750},{"class":235,"line":353},[3751],{"type":31,"tag":233,"props":3752,"children":3753},{"style":240},[3754],{"type":37,"value":332},{"type":31,"tag":233,"props":3756,"children":3757},{"class":235,"line":362},[3758],{"type":31,"tag":233,"props":3759,"children":3760},{"style":240},[3761],{"type":37,"value":341},{"type":31,"tag":233,"props":3763,"children":3764},{"class":235,"line":371},[3765],{"type":31,"tag":233,"props":3766,"children":3767},{"style":240},[3768],{"type":37,"value":350},{"type":31,"tag":233,"props":3770,"children":3771},{"class":235,"line":380},[3772],{"type":31,"tag":233,"props":3773,"children":3774},{"style":240},[3775],{"type":37,"value":359},{"type":31,"tag":233,"props":3777,"children":3778},{"class":235,"line":388},[3779],{"type":31,"tag":233,"props":3780,"children":3781},{"style":240},[3782],{"type":37,"value":368},{"type":31,"tag":233,"props":3784,"children":3785},{"class":235,"line":414},[3786],{"type":31,"tag":233,"props":3787,"children":3788},{"style":240},[3789],{"type":37,"value":1326},{"type":31,"tag":233,"props":3791,"children":3792},{"class":235,"line":422},[3793],{"type":31,"tag":233,"props":3794,"children":3795},{"style":240},[3796],{"type":37,"value":368},{"type":31,"tag":233,"props":3798,"children":3799},{"class":235,"line":442},[3800],{"type":31,"tag":233,"props":3801,"children":3802},{"style":240},[3803],{"type":37,"value":1341},{"type":31,"tag":233,"props":3805,"children":3806},{"class":235,"line":456},[3807],{"type":31,"tag":233,"props":3808,"children":3809},{"style":240},[3810],{"type":37,"value":1349},{"type":31,"tag":233,"props":3812,"children":3813},{"class":235,"line":500},[3814],{"type":31,"tag":233,"props":3815,"children":3816},{"style":240},[3817],{"type":37,"value":377},{"type":31,"tag":233,"props":3819,"children":3820},{"class":235,"line":540},[3821],{"type":31,"tag":233,"props":3822,"children":3823},{"emptyLinePlaceholder":277},[3824],{"type":37,"value":280},{"type":31,"tag":233,"props":3826,"children":3827},{"class":235,"line":1366},[3828,3832,3836,3840],{"type":31,"tag":233,"props":3829,"children":3830},{"style":392},[3831],{"type":37,"value":395},{"type":31,"tag":233,"props":3833,"children":3834},{"style":398},[3835],{"type":37,"value":401},{"type":31,"tag":233,"props":3837,"children":3838},{"style":392},[3839],{"type":37,"value":406},{"type":31,"tag":233,"props":3841,"children":3842},{"style":398},[3843],{"type":37,"value":411},{"type":31,"tag":233,"props":3845,"children":3846},{"class":235,"line":1386},[3847],{"type":31,"tag":233,"props":3848,"children":3849},{"emptyLinePlaceholder":277},[3850],{"type":37,"value":280},{"type":31,"tag":233,"props":3852,"children":3853},{"class":235,"line":1394},[3854,3858,3862],{"type":31,"tag":233,"props":3855,"children":3856},{"style":392},[3857],{"type":37,"value":428},{"type":31,"tag":233,"props":3859,"children":3860},{"style":431},[3861],{"type":37,"value":434},{"type":31,"tag":233,"props":3863,"children":3864},{"style":398},[3865],{"type":37,"value":439},{"type":31,"tag":233,"props":3867,"children":3868},{"class":235,"line":1410},[3869,3873],{"type":31,"tag":233,"props":3870,"children":3871},{"style":392},[3872],{"type":37,"value":448},{"type":31,"tag":233,"props":3874,"children":3875},{"style":398},[3876],{"type":37,"value":453},{"type":31,"tag":233,"props":3878,"children":3879},{"class":235,"line":1422},[3880,3884,3888,3892,3896,3900,3904,3908],{"type":31,"tag":233,"props":3881,"children":3882},{"style":240},[3883],{"type":37,"value":462},{"type":31,"tag":233,"props":3885,"children":3886},{"style":398},[3887],{"type":37,"value":467},{"type":31,"tag":233,"props":3889,"children":3890},{"style":470},[3891],{"type":37,"value":473},{"type":31,"tag":233,"props":3893,"children":3894},{"style":398},[3895],{"type":37,"value":478},{"type":31,"tag":233,"props":3897,"children":3898},{"style":470},[3899],{"type":37,"value":483},{"type":31,"tag":233,"props":3901,"children":3902},{"style":398},[3903],{"type":37,"value":478},{"type":31,"tag":233,"props":3905,"children":3906},{"style":470},[3907],{"type":37,"value":492},{"type":31,"tag":233,"props":3909,"children":3910},{"style":398},[3911],{"type":37,"value":497},{"type":31,"tag":233,"props":3913,"children":3914},{"class":235,"line":1458},[3915,3919,3923,3927,3931,3935,3939,3943],{"type":31,"tag":233,"props":3916,"children":3917},{"style":240},[3918],{"type":37,"value":506},{"type":31,"tag":233,"props":3920,"children":3921},{"style":398},[3922],{"type":37,"value":467},{"type":31,"tag":233,"props":3924,"children":3925},{"style":240},[3926],{"type":37,"value":515},{"type":31,"tag":233,"props":3928,"children":3929},{"style":398},[3930],{"type":37,"value":478},{"type":31,"tag":233,"props":3932,"children":3933},{"style":240},[3934],{"type":37,"value":524},{"type":31,"tag":233,"props":3936,"children":3937},{"style":398},[3938],{"type":37,"value":478},{"type":31,"tag":233,"props":3940,"children":3941},{"style":240},[3942],{"type":37,"value":533},{"type":31,"tag":233,"props":3944,"children":3945},{"style":398},[3946],{"type":37,"value":497},{"type":31,"tag":233,"props":3948,"children":3949},{"class":235,"line":1494},[3950,3954,3958,3962,3966,3970,3974,3978],{"type":31,"tag":233,"props":3951,"children":3952},{"style":240},[3953],{"type":37,"value":1500},{"type":31,"tag":233,"props":3955,"children":3956},{"style":398},[3957],{"type":37,"value":467},{"type":31,"tag":233,"props":3959,"children":3960},{"style":240},[3961],{"type":37,"value":1509},{"type":31,"tag":233,"props":3963,"children":3964},{"style":398},[3965],{"type":37,"value":478},{"type":31,"tag":233,"props":3967,"children":3968},{"style":240},[3969],{"type":37,"value":1518},{"type":31,"tag":233,"props":3971,"children":3972},{"style":398},[3973],{"type":37,"value":478},{"type":31,"tag":233,"props":3975,"children":3976},{"style":240},[3977],{"type":37,"value":1527},{"type":31,"tag":233,"props":3979,"children":3980},{"style":398},[3981],{"type":37,"value":497},{"type":31,"tag":233,"props":3983,"children":3984},{"class":235,"line":1534},[3985,3989,3993,3997,4001,4005,4009,4013],{"type":31,"tag":233,"props":3986,"children":3987},{"style":240},[3988],{"type":37,"value":1540},{"type":31,"tag":233,"props":3990,"children":3991},{"style":398},[3992],{"type":37,"value":1545},{"type":31,"tag":233,"props":3994,"children":3995},{"style":240},[3996],{"type":37,"value":1550},{"type":31,"tag":233,"props":3998,"children":3999},{"style":398},[4000],{"type":37,"value":478},{"type":31,"tag":233,"props":4002,"children":4003},{"style":240},[4004],{"type":37,"value":1559},{"type":31,"tag":233,"props":4006,"children":4007},{"style":398},[4008],{"type":37,"value":478},{"type":31,"tag":233,"props":4010,"children":4011},{"style":240},[4012],{"type":37,"value":1568},{"type":31,"tag":233,"props":4014,"children":4015},{"style":398},[4016],{"type":37,"value":1573},{"type":31,"tag":233,"props":4018,"children":4019},{"class":235,"line":1576},[4020],{"type":31,"tag":233,"props":4021,"children":4022},{"style":398},[4023],{"type":37,"value":546},{"type":31,"tag":211,"props":4025,"children":4026},{"id":1584},[4027],{"type":37,"value":1587},{"type":31,"tag":40,"props":4029,"children":4030},{},[4031],{"type":37,"value":1592},{"type":31,"tag":223,"props":4033,"children":4034},{"className":749,"code":1595,"language":751,"meta":7,"style":7},[4035],{"type":31,"tag":63,"props":4036,"children":4037},{"__ignoreMap":7},[4038,4049,4068,4083,4098,4109,4128,4147,4166,4181,4192],{"type":31,"tag":233,"props":4039,"children":4040},{"class":235,"line":236},[4041,4045],{"type":31,"tag":233,"props":4042,"children":4043},{"style":761},[4044],{"type":37,"value":1040},{"type":31,"tag":233,"props":4046,"children":4047},{"style":398},[4048],{"type":37,"value":768},{"type":31,"tag":233,"props":4050,"children":4051},{"class":235,"line":246},[4052,4056,4060,4064],{"type":31,"tag":233,"props":4053,"children":4054},{"style":398},[4055],{"type":37,"value":1052},{"type":31,"tag":233,"props":4057,"children":4058},{"style":761},[4059],{"type":37,"value":1057},{"type":31,"tag":233,"props":4061,"children":4062},{"style":398},[4063],{"type":37,"value":781},{"type":31,"tag":233,"props":4065,"children":4066},{"style":240},[4067],{"type":37,"value":1066},{"type":31,"tag":233,"props":4069,"children":4070},{"class":235,"line":255},[4071,4075,4079],{"type":31,"tag":233,"props":4072,"children":4073},{"style":761},[4074],{"type":37,"value":1074},{"type":31,"tag":233,"props":4076,"children":4077},{"style":398},[4078],{"type":37,"value":781},{"type":31,"tag":233,"props":4080,"children":4081},{"style":240},[4082],{"type":37,"value":1083},{"type":31,"tag":233,"props":4084,"children":4085},{"class":235,"line":264},[4086,4090,4094],{"type":31,"tag":233,"props":4087,"children":4088},{"style":761},[4089],{"type":37,"value":1091},{"type":31,"tag":233,"props":4091,"children":4092},{"style":398},[4093],{"type":37,"value":781},{"type":31,"tag":233,"props":4095,"children":4096},{"style":470},[4097],{"type":37,"value":1100},{"type":31,"tag":233,"props":4099,"children":4100},{"class":235,"line":273},[4101,4105],{"type":31,"tag":233,"props":4102,"children":4103},{"style":761},[4104],{"type":37,"value":1667},{"type":31,"tag":233,"props":4106,"children":4107},{"style":398},[4108],{"type":37,"value":768},{"type":31,"tag":233,"props":4110,"children":4111},{"class":235,"line":283},[4112,4116,4120,4124],{"type":31,"tag":233,"props":4113,"children":4114},{"style":398},[4115],{"type":37,"value":1679},{"type":31,"tag":233,"props":4117,"children":4118},{"style":761},[4119],{"type":37,"value":1057},{"type":31,"tag":233,"props":4121,"children":4122},{"style":398},[4123],{"type":37,"value":781},{"type":31,"tag":233,"props":4125,"children":4126},{"style":240},[4127],{"type":37,"value":1692},{"type":31,"tag":233,"props":4129,"children":4130},{"class":235,"line":292},[4131,4135,4139,4143],{"type":31,"tag":233,"props":4132,"children":4133},{"style":398},[4134],{"type":37,"value":1679},{"type":31,"tag":233,"props":4136,"children":4137},{"style":761},[4138],{"type":37,"value":1057},{"type":31,"tag":233,"props":4140,"children":4141},{"style":398},[4142],{"type":37,"value":781},{"type":31,"tag":233,"props":4144,"children":4145},{"style":240},[4146],{"type":37,"value":1712},{"type":31,"tag":233,"props":4148,"children":4149},{"class":235,"line":301},[4150,4154,4158,4162],{"type":31,"tag":233,"props":4151,"children":4152},{"style":398},[4153],{"type":37,"value":1052},{"type":31,"tag":233,"props":4155,"children":4156},{"style":761},[4157],{"type":37,"value":1057},{"type":31,"tag":233,"props":4159,"children":4160},{"style":398},[4161],{"type":37,"value":781},{"type":31,"tag":233,"props":4163,"children":4164},{"style":240},[4165],{"type":37,"value":1732},{"type":31,"tag":233,"props":4167,"children":4168},{"class":235,"line":310},[4169,4173,4177],{"type":31,"tag":233,"props":4170,"children":4171},{"style":761},[4172],{"type":37,"value":1074},{"type":31,"tag":233,"props":4174,"children":4175},{"style":398},[4176],{"type":37,"value":781},{"type":31,"tag":233,"props":4178,"children":4179},{"style":240},[4180],{"type":37,"value":1136},{"type":31,"tag":233,"props":4182,"children":4183},{"class":235,"line":11},[4184,4188],{"type":31,"tag":233,"props":4185,"children":4186},{"style":761},[4187],{"type":37,"value":1667},{"type":31,"tag":233,"props":4189,"children":4190},{"style":398},[4191],{"type":37,"value":768},{"type":31,"tag":233,"props":4193,"children":4194},{"class":235,"line":326},[4195,4199,4203,4207],{"type":31,"tag":233,"props":4196,"children":4197},{"style":398},[4198],{"type":37,"value":1679},{"type":31,"tag":233,"props":4200,"children":4201},{"style":761},[4202],{"type":37,"value":1057},{"type":31,"tag":233,"props":4204,"children":4205},{"style":398},[4206],{"type":37,"value":781},{"type":31,"tag":233,"props":4208,"children":4209},{"style":240},[4210],{"type":37,"value":1712},{"type":31,"tag":40,"props":4212,"children":4213},{},[4214],{"type":37,"value":1782},{"type":31,"tag":211,"props":4216,"children":4217},{"id":1785},[4218],{"type":37,"value":1788},{"type":31,"tag":40,"props":4220,"children":4221},{},[4222],{"type":37,"value":1793},{"type":31,"tag":223,"props":4224,"children":4225},{"className":749,"code":1796,"language":751,"meta":7,"style":7},[4226],{"type":31,"tag":63,"props":4227,"children":4228},{"__ignoreMap":7},[4229,4240,4259,4274,4285,4304],{"type":31,"tag":233,"props":4230,"children":4231},{"class":235,"line":236},[4232,4236],{"type":31,"tag":233,"props":4233,"children":4234},{"style":761},[4235],{"type":37,"value":1040},{"type":31,"tag":233,"props":4237,"children":4238},{"style":398},[4239],{"type":37,"value":768},{"type":31,"tag":233,"props":4241,"children":4242},{"class":235,"line":246},[4243,4247,4251,4255],{"type":31,"tag":233,"props":4244,"children":4245},{"style":398},[4246],{"type":37,"value":1052},{"type":31,"tag":233,"props":4248,"children":4249},{"style":761},[4250],{"type":37,"value":1057},{"type":31,"tag":233,"props":4252,"children":4253},{"style":398},[4254],{"type":37,"value":781},{"type":31,"tag":233,"props":4256,"children":4257},{"style":240},[4258],{"type":37,"value":1066},{"type":31,"tag":233,"props":4260,"children":4261},{"class":235,"line":255},[4262,4266,4270],{"type":31,"tag":233,"props":4263,"children":4264},{"style":761},[4265],{"type":37,"value":1074},{"type":31,"tag":233,"props":4267,"children":4268},{"style":398},[4269],{"type":37,"value":781},{"type":31,"tag":233,"props":4271,"children":4272},{"style":240},[4273],{"type":37,"value":1083},{"type":31,"tag":233,"props":4275,"children":4276},{"class":235,"line":264},[4277,4281],{"type":31,"tag":233,"props":4278,"children":4279},{"style":761},[4280],{"type":37,"value":1853},{"type":31,"tag":233,"props":4282,"children":4283},{"style":398},[4284],{"type":37,"value":768},{"type":31,"tag":233,"props":4286,"children":4287},{"class":235,"line":273},[4288,4292,4296,4300],{"type":31,"tag":233,"props":4289,"children":4290},{"style":398},[4291],{"type":37,"value":1679},{"type":31,"tag":233,"props":4293,"children":4294},{"style":761},[4295],{"type":37,"value":589},{"type":31,"tag":233,"props":4297,"children":4298},{"style":398},[4299],{"type":37,"value":781},{"type":31,"tag":233,"props":4301,"children":4302},{"style":240},[4303],{"type":37,"value":1877},{"type":31,"tag":233,"props":4305,"children":4306},{"class":235,"line":283},[4307,4311,4315],{"type":31,"tag":233,"props":4308,"children":4309},{"style":761},[4310],{"type":37,"value":1885},{"type":31,"tag":233,"props":4312,"children":4313},{"style":398},[4314],{"type":37,"value":781},{"type":31,"tag":233,"props":4316,"children":4317},{"style":240},[4318],{"type":37,"value":1894},{"type":31,"tag":211,"props":4320,"children":4321},{"id":1897},[4322],{"type":37,"value":1900},{"type":31,"tag":40,"props":4324,"children":4325},{},[4326,4327,4331,4332,4336,4337,4341],{"type":37,"value":1905},{"type":31,"tag":44,"props":4328,"children":4329},{},[4330],{"type":37,"value":1910},{"type":37,"value":1912},{"type":31,"tag":52,"props":4333,"children":4334},{"href":117},[4335],{"type":37,"value":1917},{"type":37,"value":1919},{"type":31,"tag":44,"props":4338,"children":4339},{},[4340],{"type":37,"value":1924},{"type":37,"value":1926},{"type":31,"tag":223,"props":4343,"children":4344},{"className":225,"code":1929,"language":227,"meta":7,"style":7},[4345],{"type":31,"tag":63,"props":4346,"children":4347},{"__ignoreMap":7},[4348,4355,4362,4369,4376,4383,4390,4397,4404,4411,4418,4425,4432,4439,4446,4453,4460,4467,4474,4481,4488,4495,4502,4509,4516,4535,4542,4557,4568,4587,4594,4613,4620,4627,4634,4673],{"type":31,"tag":233,"props":4349,"children":4350},{"class":235,"line":236},[4351],{"type":31,"tag":233,"props":4352,"children":4353},{"style":240},[4354],{"type":37,"value":243},{"type":31,"tag":233,"props":4356,"children":4357},{"class":235,"line":246},[4358],{"type":31,"tag":233,"props":4359,"children":4360},{"style":240},[4361],{"type":37,"value":1948},{"type":31,"tag":233,"props":4363,"children":4364},{"class":235,"line":255},[4365],{"type":31,"tag":233,"props":4366,"children":4367},{"style":240},[4368],{"type":37,"value":261},{"type":31,"tag":233,"props":4370,"children":4371},{"class":235,"line":264},[4372],{"type":31,"tag":233,"props":4373,"children":4374},{"style":240},[4375],{"type":37,"value":270},{"type":31,"tag":233,"props":4377,"children":4378},{"class":235,"line":273},[4379],{"type":31,"tag":233,"props":4380,"children":4381},{"emptyLinePlaceholder":277},[4382],{"type":37,"value":280},{"type":31,"tag":233,"props":4384,"children":4385},{"class":235,"line":283},[4386],{"type":31,"tag":233,"props":4387,"children":4388},{"style":240},[4389],{"type":37,"value":289},{"type":31,"tag":233,"props":4391,"children":4392},{"class":235,"line":292},[4393],{"type":31,"tag":233,"props":4394,"children":4395},{"style":240},[4396],{"type":37,"value":298},{"type":31,"tag":233,"props":4398,"children":4399},{"class":235,"line":301},[4400],{"type":31,"tag":233,"props":4401,"children":4402},{"style":240},[4403],{"type":37,"value":1246},{"type":31,"tag":233,"props":4405,"children":4406},{"class":235,"line":310},[4407],{"type":31,"tag":233,"props":4408,"children":4409},{"emptyLinePlaceholder":277},[4410],{"type":37,"value":280},{"type":31,"tag":233,"props":4412,"children":4413},{"class":235,"line":11},[4414],{"type":31,"tag":233,"props":4415,"children":4416},{"style":240},[4417],{"type":37,"value":1261},{"type":31,"tag":233,"props":4419,"children":4420},{"class":235,"line":326},[4421],{"type":31,"tag":233,"props":4422,"children":4423},{"style":240},[4424],{"type":37,"value":1269},{"type":31,"tag":233,"props":4426,"children":4427},{"class":235,"line":335},[4428],{"type":31,"tag":233,"props":4429,"children":4430},{"emptyLinePlaceholder":277},[4431],{"type":37,"value":280},{"type":31,"tag":233,"props":4433,"children":4434},{"class":235,"line":344},[4435],{"type":31,"tag":233,"props":4436,"children":4437},{"style":240},[4438],{"type":37,"value":323},{"type":31,"tag":233,"props":4440,"children":4441},{"class":235,"line":353},[4442],{"type":31,"tag":233,"props":4443,"children":4444},{"style":240},[4445],{"type":37,"value":332},{"type":31,"tag":233,"props":4447,"children":4448},{"class":235,"line":362},[4449],{"type":31,"tag":233,"props":4450,"children":4451},{"style":240},[4452],{"type":37,"value":341},{"type":31,"tag":233,"props":4454,"children":4455},{"class":235,"line":371},[4456],{"type":31,"tag":233,"props":4457,"children":4458},{"style":240},[4459],{"type":37,"value":350},{"type":31,"tag":233,"props":4461,"children":4462},{"class":235,"line":380},[4463],{"type":31,"tag":233,"props":4464,"children":4465},{"style":240},[4466],{"type":37,"value":359},{"type":31,"tag":233,"props":4468,"children":4469},{"class":235,"line":388},[4470],{"type":31,"tag":233,"props":4471,"children":4472},{"style":240},[4473],{"type":37,"value":368},{"type":31,"tag":233,"props":4475,"children":4476},{"class":235,"line":414},[4477],{"type":31,"tag":233,"props":4478,"children":4479},{"style":240},[4480],{"type":37,"value":2068},{"type":31,"tag":233,"props":4482,"children":4483},{"class":235,"line":422},[4484],{"type":31,"tag":233,"props":4485,"children":4486},{"style":240},[4487],{"type":37,"value":2076},{"type":31,"tag":233,"props":4489,"children":4490},{"class":235,"line":442},[4491],{"type":31,"tag":233,"props":4492,"children":4493},{"style":240},[4494],{"type":37,"value":1349},{"type":31,"tag":233,"props":4496,"children":4497},{"class":235,"line":456},[4498],{"type":31,"tag":233,"props":4499,"children":4500},{"style":240},[4501],{"type":37,"value":2068},{"type":31,"tag":233,"props":4503,"children":4504},{"class":235,"line":500},[4505],{"type":31,"tag":233,"props":4506,"children":4507},{"style":240},[4508],{"type":37,"value":377},{"type":31,"tag":233,"props":4510,"children":4511},{"class":235,"line":540},[4512],{"type":31,"tag":233,"props":4513,"children":4514},{"emptyLinePlaceholder":277},[4515],{"type":37,"value":280},{"type":31,"tag":233,"props":4517,"children":4518},{"class":235,"line":1366},[4519,4523,4527,4531],{"type":31,"tag":233,"props":4520,"children":4521},{"style":392},[4522],{"type":37,"value":2112},{"type":31,"tag":233,"props":4524,"children":4525},{"style":398},[4526],{"type":37,"value":2117},{"type":31,"tag":233,"props":4528,"children":4529},{"style":392},[4530],{"type":37,"value":395},{"type":31,"tag":233,"props":4532,"children":4533},{"style":398},[4534],{"type":37,"value":2126},{"type":31,"tag":233,"props":4536,"children":4537},{"class":235,"line":1386},[4538],{"type":31,"tag":233,"props":4539,"children":4540},{"emptyLinePlaceholder":277},[4541],{"type":37,"value":280},{"type":31,"tag":233,"props":4543,"children":4544},{"class":235,"line":1394},[4545,4549,4553],{"type":31,"tag":233,"props":4546,"children":4547},{"style":392},[4548],{"type":37,"value":428},{"type":31,"tag":233,"props":4550,"children":4551},{"style":431},[4552],{"type":37,"value":434},{"type":31,"tag":233,"props":4554,"children":4555},{"style":398},[4556],{"type":37,"value":439},{"type":31,"tag":233,"props":4558,"children":4559},{"class":235,"line":1410},[4560,4564],{"type":31,"tag":233,"props":4561,"children":4562},{"style":392},[4563],{"type":37,"value":2156},{"type":31,"tag":233,"props":4565,"children":4566},{"style":398},[4567],{"type":37,"value":2161},{"type":31,"tag":233,"props":4569,"children":4570},{"class":235,"line":1422},[4571,4575,4579,4583],{"type":31,"tag":233,"props":4572,"children":4573},{"style":392},[4574],{"type":37,"value":2169},{"type":31,"tag":233,"props":4576,"children":4577},{"style":398},[4578],{"type":37,"value":2174},{"type":31,"tag":233,"props":4580,"children":4581},{"style":240},[4582],{"type":37,"value":2179},{"type":31,"tag":233,"props":4584,"children":4585},{"style":398},[4586],{"type":37,"value":2184},{"type":31,"tag":233,"props":4588,"children":4589},{"class":235,"line":1458},[4590],{"type":31,"tag":233,"props":4591,"children":4592},{"emptyLinePlaceholder":277},[4593],{"type":37,"value":280},{"type":31,"tag":233,"props":4595,"children":4596},{"class":235,"line":1494},[4597,4601,4605,4609],{"type":31,"tag":233,"props":4598,"children":4599},{"style":392},[4600],{"type":37,"value":448},{"type":31,"tag":233,"props":4602,"children":4603},{"style":398},[4604],{"type":37,"value":2174},{"type":31,"tag":233,"props":4606,"children":4607},{"style":392},[4608],{"type":37,"value":2207},{"type":31,"tag":233,"props":4610,"children":4611},{"style":240},[4612],{"type":37,"value":2212},{"type":31,"tag":233,"props":4614,"children":4615},{"class":235,"line":1534},[4616],{"type":31,"tag":233,"props":4617,"children":4618},{"style":240},[4619],{"type":37,"value":2220},{"type":31,"tag":233,"props":4621,"children":4622},{"class":235,"line":1576},[4623],{"type":31,"tag":233,"props":4624,"children":4625},{"style":240},[4626],{"type":37,"value":2228},{"type":31,"tag":233,"props":4628,"children":4629},{"class":235,"line":2231},[4630],{"type":31,"tag":233,"props":4631,"children":4632},{"style":240},[4633],{"type":37,"value":2237},{"type":31,"tag":233,"props":4635,"children":4636},{"class":235,"line":2240},[4637,4641,4645,4649,4653,4657,4661,4665,4669],{"type":31,"tag":233,"props":4638,"children":4639},{"style":240},[4640],{"type":37,"value":2246},{"type":31,"tag":233,"props":4642,"children":4643},{"style":470},[4644],{"type":37,"value":2251},{"type":31,"tag":233,"props":4646,"children":4647},{"style":398},[4648],{"type":37,"value":2256},{"type":31,"tag":233,"props":4650,"children":4651},{"style":470},[4652],{"type":37,"value":2261},{"type":31,"tag":233,"props":4654,"children":4655},{"style":240},[4656],{"type":37,"value":2266},{"type":31,"tag":233,"props":4658,"children":4659},{"style":470},[4660],{"type":37,"value":2251},{"type":31,"tag":233,"props":4662,"children":4663},{"style":398},[4664],{"type":37,"value":2275},{"type":31,"tag":233,"props":4666,"children":4667},{"style":470},[4668],{"type":37,"value":2261},{"type":31,"tag":233,"props":4670,"children":4671},{"style":240},[4672],{"type":37,"value":2284},{"type":31,"tag":233,"props":4674,"children":4675},{"class":235,"line":2287},[4676,4680],{"type":31,"tag":233,"props":4677,"children":4678},{"style":240},[4679],{"type":37,"value":2293},{"type":31,"tag":233,"props":4681,"children":4682},{"style":398},[4683],{"type":37,"value":2184},{"type":31,"tag":40,"props":4685,"children":4686},{},[4687,4688,4693,4694,4699,4700,4705],{"type":37,"value":2302},{"type":31,"tag":63,"props":4689,"children":4691},{"className":4690},[],[4692],{"type":37,"value":2308},{"type":37,"value":2310},{"type":31,"tag":63,"props":4695,"children":4697},{"className":4696},[],[4698],{"type":37,"value":2316},{"type":37,"value":2318},{"type":31,"tag":63,"props":4701,"children":4703},{"className":4702},[],[4704],{"type":37,"value":961},{"type":37,"value":200},{"type":31,"tag":211,"props":4707,"children":4708},{"id":2327},[4709],{"type":37,"value":2330},{"type":31,"tag":223,"props":4711,"children":4712},{"className":2333,"code":2334,"language":2335,"meta":7,"style":7},[4713],{"type":31,"tag":63,"props":4714,"children":4715},{"__ignoreMap":7},[4716],{"type":31,"tag":233,"props":4717,"children":4718},{"class":235,"line":236},[4719,4723,4727],{"type":31,"tag":233,"props":4720,"children":4721},{"style":431},[4722],{"type":37,"value":2347},{"type":31,"tag":233,"props":4724,"children":4725},{"style":240},[4726],{"type":37,"value":2352},{"type":31,"tag":233,"props":4728,"children":4729},{"style":240},[4730],{"type":37,"value":2357},{"type":31,"tag":40,"props":4732,"children":4733},{},[4734],{"type":37,"value":2362},{"type":31,"tag":223,"props":4736,"children":4737},{"className":2333,"code":2365,"language":2335,"meta":7,"style":7},[4738],{"type":31,"tag":63,"props":4739,"children":4740},{"__ignoreMap":7},[4741],{"type":31,"tag":233,"props":4742,"children":4743},{"class":235,"line":236},[4744,4748,4752,4756],{"type":31,"tag":233,"props":4745,"children":4746},{"style":431},[4747],{"type":37,"value":2347},{"type":31,"tag":233,"props":4749,"children":4750},{"style":240},[4751],{"type":37,"value":2352},{"type":31,"tag":233,"props":4753,"children":4754},{"style":470},[4755],{"type":37,"value":2385},{"type":31,"tag":233,"props":4757,"children":4758},{"style":240},[4759],{"type":37,"value":2357},{"type":31,"tag":40,"props":4761,"children":4762},{},[4763,4764,4769],{"type":37,"value":2394},{"type":31,"tag":63,"props":4765,"children":4767},{"className":4766},[],[4768],{"type":37,"value":718},{"type":37,"value":2401},{"type":31,"tag":223,"props":4771,"children":4772},{"className":2333,"code":2404,"language":2335,"meta":7,"style":7},[4773],{"type":31,"tag":63,"props":4774,"children":4775},{"__ignoreMap":7},[4776],{"type":31,"tag":233,"props":4777,"children":4778},{"class":235,"line":236},[4779,4783,4787,4791,4795,4799,4803],{"type":31,"tag":233,"props":4780,"children":4781},{"style":431},[4782],{"type":37,"value":2347},{"type":31,"tag":233,"props":4784,"children":4785},{"style":240},[4786],{"type":37,"value":2352},{"type":31,"tag":233,"props":4788,"children":4789},{"style":470},[4790],{"type":37,"value":2424},{"type":31,"tag":233,"props":4792,"children":4793},{"style":240},[4794],{"type":37,"value":2429},{"type":31,"tag":233,"props":4796,"children":4797},{"style":470},[4798],{"type":37,"value":2434},{"type":31,"tag":233,"props":4800,"children":4801},{"style":240},[4802],{"type":37,"value":2439},{"type":31,"tag":233,"props":4804,"children":4805},{"style":240},[4806],{"type":37,"value":2357},{"type":31,"tag":124,"props":4808,"children":4809},{},[],{"type":31,"tag":32,"props":4811,"children":4812},{"id":2449},[4813],{"type":37,"value":2452},{"type":31,"tag":40,"props":4815,"children":4816},{},[4817],{"type":37,"value":2457},{"type":31,"tag":147,"props":4819,"children":4820},{},[4821,4836,4846,4850,4859],{"type":31,"tag":94,"props":4822,"children":4823},{},[4824,4825,4830,4831],{"type":37,"value":2465},{"type":31,"tag":63,"props":4826,"children":4828},{"className":4827},[],[4829],{"type":37,"value":2471},{"type":37,"value":2473},{"type":31,"tag":63,"props":4832,"children":4834},{"className":4833},[],[4835],{"type":37,"value":2479},{"type":31,"tag":94,"props":4837,"children":4838},{},[4839,4840,4845],{"type":37,"value":2484},{"type":31,"tag":63,"props":4841,"children":4843},{"className":4842},[],[4844],{"type":37,"value":143},{"type":37,"value":2491},{"type":31,"tag":94,"props":4847,"children":4848},{},[4849],{"type":37,"value":2496},{"type":31,"tag":94,"props":4851,"children":4852},{},[4853,4858],{"type":31,"tag":63,"props":4854,"children":4856},{"className":4855},[],[4857],{"type":37,"value":170},{"type":37,"value":2506},{"type":31,"tag":94,"props":4860,"children":4861},{},[4862],{"type":37,"value":2511},{"type":31,"tag":40,"props":4864,"children":4865},{},[4866,4867,4872,4873,4878],{"type":37,"value":2516},{"type":31,"tag":63,"props":4868,"children":4870},{"className":4869},[],[4871],{"type":37,"value":170},{"type":37,"value":2523},{"type":31,"tag":63,"props":4874,"children":4876},{"className":4875},[],[4877],{"type":37,"value":565},{"type":37,"value":2530},{"type":31,"tag":124,"props":4880,"children":4881},{},[],{"type":31,"tag":32,"props":4883,"children":4884},{"id":2536},[4885],{"type":37,"value":2539},{"type":31,"tag":90,"props":4887,"children":4888},{},[4889,4905,4944,4953,4962],{"type":31,"tag":94,"props":4890,"children":4891},{},[4892,4893,4898,4899,4904],{"type":37,"value":2547},{"type":31,"tag":63,"props":4894,"children":4896},{"className":4895},[],[4897],{"type":37,"value":2553},{"type":37,"value":2555},{"type":31,"tag":63,"props":4900,"children":4902},{"className":4901},[],[4903],{"type":37,"value":613},{"type":37,"value":2562},{"type":31,"tag":94,"props":4906,"children":4907},{},[4908,4909,4914,4915,4920,4921,4926,4927,4932,4933,4938,4939,4943],{"type":37,"value":2567},{"type":31,"tag":63,"props":4910,"children":4912},{"className":4911},[],[4913],{"type":37,"value":739},{"type":37,"value":478},{"type":31,"tag":63,"props":4916,"children":4918},{"className":4917},[],[4919],{"type":37,"value":813},{"type":37,"value":478},{"type":31,"tag":63,"props":4922,"children":4924},{"className":4923},[],[4925],{"type":37,"value":961},{"type":37,"value":478},{"type":31,"tag":63,"props":4928,"children":4930},{"className":4929},[],[4931],{"type":37,"value":718},{"type":37,"value":2592},{"type":31,"tag":63,"props":4934,"children":4936},{"className":4935},[],[4937],{"type":37,"value":703},{"type":37,"value":583},{"type":31,"tag":44,"props":4940,"children":4941},{},[4942],{"type":37,"value":710},{"type":37,"value":2604},{"type":31,"tag":94,"props":4945,"children":4946},{},[4947,4948],{"type":37,"value":2609},{"type":31,"tag":63,"props":4949,"children":4951},{"className":4950},[],[4952],{"type":37,"value":143},{"type":31,"tag":94,"props":4954,"children":4955},{},[4956,4957,4961],{"type":37,"value":2619},{"type":31,"tag":52,"props":4958,"children":4959},{"href":117},[4960],{"type":37,"value":1917},{"type":37,"value":2625},{"type":31,"tag":94,"props":4963,"children":4964},{},[4965],{"type":37,"value":2630},{"type":31,"tag":124,"props":4967,"children":4968},{},[],{"type":31,"tag":32,"props":4970,"children":4971},{"id":2636},[4972],{"type":37,"value":2639},{"type":31,"tag":90,"props":4974,"children":4975},{},[4976,4984,4992,4999],{"type":31,"tag":94,"props":4977,"children":4978},{},[4979],{"type":31,"tag":52,"props":4980,"children":4982},{"href":54,"rel":4981},[56],[4983],{"type":37,"value":2651},{"type":31,"tag":94,"props":4985,"children":4986},{},[4987],{"type":31,"tag":52,"props":4988,"children":4990},{"href":2657,"rel":4989},[56],[4991],{"type":37,"value":2661},{"type":31,"tag":94,"props":4993,"children":4994},{},[4995],{"type":31,"tag":52,"props":4996,"children":4997},{"href":117},[4998],{"type":37,"value":2669},{"type":31,"tag":94,"props":5000,"children":5001},{},[5002],{"type":31,"tag":52,"props":5003,"children":5005},{"href":2675,"rel":5004},[56],[5006],{"type":37,"value":2679},{"type":31,"tag":2681,"props":5008,"children":5009},{},[5010],{"type":37,"value":2685},{"title":7,"searchDepth":246,"depth":246,"links":5012},[5013,5014,5015,5025,5026,5027],{"id":34,"depth":246,"text":38},{"id":129,"depth":246,"text":132},{"id":206,"depth":246,"text":209,"children":5016},[5017,5018,5019,5020,5021,5022,5023,5024],{"id":213,"depth":255,"text":216},{"id":633,"depth":255,"text":636},{"id":689,"depth":255,"text":692},{"id":1165,"depth":255,"text":1168},{"id":1584,"depth":255,"text":1587},{"id":1785,"depth":255,"text":1788},{"id":1897,"depth":255,"text":1900},{"id":2327,"depth":255,"text":2330},{"id":2449,"depth":246,"text":2452},{"id":2536,"depth":246,"text":2539},{"id":2636,"depth":246,"text":2639},[5029,5413,5648],{"_path":5030,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":5031,"description":5032,"coverImage":5033,"date":5034,"readingTime":273,"category":12,"tags":5035,"difficulty":5039,"journeys":5040,"hidden":6,"videoUrl":5041,"author":5042,"body":5043,"_type":2703,"_id":5410,"_source":2705,"_file":5411,"_stem":5412,"_extension":2708},"/tutorials/bruin-cloud-mcp","Connect Bruin Cloud MCP to Claude Code","Set up the Bruin Cloud MCP so your AI agent can query pipelines, inspect runs, and trigger actions in Bruin Cloud directly from your terminal.","https://img.youtube.com/vi/bpuYBiaxSWk/maxresdefault.jpg","2026-03-06",[5036,5037,5038],"Bruin Cloud","Bruin AI","MCP","Advanced",[21],"https://youtu.be/bpuYBiaxSWk",{"name":24,"role":25,"image":26},{"type":28,"children":5044,"toc":5398},[5045,5055,5059,5068,5077,5084,5106,5109,5113,5119,5166,5172,5185,5248,5253,5259,5264,5272,5277,5283,5288,5296,5301,5307,5312,5330,5333,5337,5355,5358,5362,5394],{"type":31,"tag":5046,"props":5047,"children":5054},"iframe",{"width":5048,"height":5049,"src":5050,"title":5051,"frameBorder":5052,"allow":5053,"allowFullScreen":277},"100%",400,"https://www.youtube.com/embed/bpuYBiaxSWk","Bruin Features - Cloud MCP","0","accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",[],{"type":31,"tag":32,"props":5056,"children":5057},{"id":34},[5058],{"type":37,"value":38},{"type":31,"tag":40,"props":5060,"children":5061},{},[5062,5066],{"type":31,"tag":44,"props":5063,"children":5064},{},[5065],{"type":37,"value":48},{"type":37,"value":5067}," - Connect the Bruin Cloud MCP to Claude Code so you can manage pipelines, inspect runs, and trigger actions using natural language from your terminal.",{"type":31,"tag":40,"props":5069,"children":5070},{},[5071,5075],{"type":31,"tag":44,"props":5072,"children":5073},{},[5074],{"type":37,"value":78},{"type":37,"value":5076}," - Data engineers who want to interact with Bruin Cloud programmatically through an AI agent.",{"type":31,"tag":40,"props":5078,"children":5079},{},[5080],{"type":31,"tag":44,"props":5081,"children":5082},{},[5083],{"type":37,"value":88},{"type":31,"tag":90,"props":5085,"children":5086},{},[5087,5096,5101],{"type":31,"tag":94,"props":5088,"children":5089},{},[5090,5095],{"type":31,"tag":52,"props":5091,"children":5093},{"href":99,"rel":5092},[56],[5094],{"type":37,"value":14},{"type":37,"value":104},{"type":31,"tag":94,"props":5097,"children":5098},{},[5099],{"type":37,"value":5100},"Claude Code installed",{"type":31,"tag":94,"props":5102,"children":5103},{},[5104],{"type":37,"value":5105},"A Bruin Cloud account with at least one pipeline deployed",{"type":31,"tag":124,"props":5107,"children":5108},{},[],{"type":31,"tag":32,"props":5110,"children":5111},{"id":206},[5112],{"type":37,"value":209},{"type":31,"tag":211,"props":5114,"children":5116},{"id":5115},"_1-create-an-api-token",[5117],{"type":37,"value":5118},"1) Create an API token",{"type":31,"tag":147,"props":5120,"children":5121},{},[5122,5132,5149,5154],{"type":31,"tag":94,"props":5123,"children":5124},{},[5125,5127],{"type":37,"value":5126},"Go to Bruin Cloud and open ",{"type":31,"tag":44,"props":5128,"children":5129},{},[5130],{"type":37,"value":5131},"Team Settings",{"type":31,"tag":94,"props":5133,"children":5134},{},[5135,5137,5142,5144],{"type":37,"value":5136},"Navigate to ",{"type":31,"tag":44,"props":5138,"children":5139},{},[5140],{"type":37,"value":5141},"Team Members",{"type":37,"value":5143}," and scroll to ",{"type":31,"tag":44,"props":5145,"children":5146},{},[5147],{"type":37,"value":5148},"Create API Token",{"type":31,"tag":94,"props":5150,"children":5151},{},[5152],{"type":37,"value":5153},"Give the token a name and select the permissions you need",{"type":31,"tag":94,"props":5155,"children":5156},{},[5157,5159,5164],{"type":37,"value":5158},"Click ",{"type":31,"tag":44,"props":5160,"children":5161},{},[5162],{"type":37,"value":5163},"Create",{"type":37,"value":5165}," and copy the token - it will only be shown once",{"type":31,"tag":211,"props":5167,"children":5169},{"id":5168},"_2-add-the-mcp-to-claude-code",[5170],{"type":37,"value":5171},"2) Add the MCP to Claude Code",{"type":31,"tag":40,"props":5173,"children":5174},{},[5175,5177,5183],{"type":37,"value":5176},"Run the following command in your terminal, replacing ",{"type":31,"tag":63,"props":5178,"children":5180},{"className":5179},[],[5181],{"type":37,"value":5182},"YOUR_TOKEN_HERE",{"type":37,"value":5184}," with the token you just created:",{"type":31,"tag":223,"props":5186,"children":5188},{"className":2333,"code":5187,"language":2335,"meta":7,"style":7},"claude mcp add --transport http bruin_cloud https://cloud.getbruin.com/mcp \\\n  --header \"Authorization: Bearer YOUR_TOKEN_HERE\"\n",[5189],{"type":31,"tag":63,"props":5190,"children":5191},{"__ignoreMap":7},[5192,5235],{"type":31,"tag":233,"props":5193,"children":5194},{"class":235,"line":236},[5195,5200,5205,5210,5215,5220,5225,5230],{"type":31,"tag":233,"props":5196,"children":5197},{"style":431},[5198],{"type":37,"value":5199},"claude",{"type":31,"tag":233,"props":5201,"children":5202},{"style":240},[5203],{"type":37,"value":5204}," mcp",{"type":31,"tag":233,"props":5206,"children":5207},{"style":240},[5208],{"type":37,"value":5209}," add",{"type":31,"tag":233,"props":5211,"children":5212},{"style":470},[5213],{"type":37,"value":5214}," --transport",{"type":31,"tag":233,"props":5216,"children":5217},{"style":240},[5218],{"type":37,"value":5219}," http",{"type":31,"tag":233,"props":5221,"children":5222},{"style":240},[5223],{"type":37,"value":5224}," bruin_cloud",{"type":31,"tag":233,"props":5226,"children":5227},{"style":240},[5228],{"type":37,"value":5229}," https://cloud.getbruin.com/mcp",{"type":31,"tag":233,"props":5231,"children":5232},{"style":470},[5233],{"type":37,"value":5234}," \\\n",{"type":31,"tag":233,"props":5236,"children":5237},{"class":235,"line":246},[5238,5243],{"type":31,"tag":233,"props":5239,"children":5240},{"style":470},[5241],{"type":37,"value":5242},"  --header",{"type":31,"tag":233,"props":5244,"children":5245},{"style":240},[5246],{"type":37,"value":5247}," \"Authorization: Bearer YOUR_TOKEN_HERE\"\n",{"type":31,"tag":40,"props":5249,"children":5250},{},[5251],{"type":37,"value":5252},"This configures Claude Code to communicate with Bruin Cloud via the MCP protocol.",{"type":31,"tag":211,"props":5254,"children":5256},{"id":5255},"_3-query-your-pipelines",[5257],{"type":37,"value":5258},"3) Query your pipelines",{"type":31,"tag":40,"props":5260,"children":5261},{},[5262],{"type":37,"value":5263},"Open Claude Code inside a Bruin project and ask questions like:",{"type":31,"tag":184,"props":5265,"children":5266},{},[5267],{"type":31,"tag":40,"props":5268,"children":5269},{},[5270],{"type":37,"value":5271},"\"Use Bruin Cloud MCP and tell me which pipelines are enabled.\"",{"type":31,"tag":40,"props":5273,"children":5274},{},[5275],{"type":37,"value":5276},"The agent will make API calls to Bruin Cloud and return the information.",{"type":31,"tag":211,"props":5278,"children":5280},{"id":5279},"_4-trigger-runs",[5281],{"type":37,"value":5282},"4) Trigger runs",{"type":31,"tag":40,"props":5284,"children":5285},{},[5286],{"type":37,"value":5287},"You can also ask the agent to trigger pipeline runs:",{"type":31,"tag":184,"props":5289,"children":5290},{},[5291],{"type":31,"tag":40,"props":5292,"children":5293},{},[5294],{"type":37,"value":5295},"\"Create a full refresh of the stock_market_prices asset.\"",{"type":31,"tag":40,"props":5297,"children":5298},{},[5299],{"type":37,"value":5300},"The agent may ask for confirmation before executing, especially when there are similarly named assets. It will also provide a link to monitor the run in Bruin Cloud.",{"type":31,"tag":211,"props":5302,"children":5304},{"id":5303},"_5-be-careful-with-prompts",[5305],{"type":37,"value":5306},"5) Be careful with prompts",{"type":31,"tag":40,"props":5308,"children":5309},{},[5310],{"type":37,"value":5311},"Be specific when triggering actions. A vague prompt like \"do a full refresh\" could create a large backfill job spanning months of data. Always specify:",{"type":31,"tag":90,"props":5313,"children":5314},{},[5315,5320,5325],{"type":31,"tag":94,"props":5316,"children":5317},{},[5318],{"type":37,"value":5319},"Which asset or pipeline to run",{"type":31,"tag":94,"props":5321,"children":5322},{},[5323],{"type":37,"value":5324},"The date range if applicable",{"type":31,"tag":94,"props":5326,"children":5327},{},[5328],{"type":37,"value":5329},"Whether you want a full refresh or incremental run",{"type":31,"tag":124,"props":5331,"children":5332},{},[],{"type":31,"tag":32,"props":5334,"children":5335},{"id":2536},[5336],{"type":37,"value":2539},{"type":31,"tag":90,"props":5338,"children":5339},{},[5340,5345,5350],{"type":31,"tag":94,"props":5341,"children":5342},{},[5343],{"type":37,"value":5344},"The Cloud MCP lets you query pipeline status, inspect runs, and trigger actions from your terminal",{"type":31,"tag":94,"props":5346,"children":5347},{},[5348],{"type":37,"value":5349},"Always be specific when triggering runs to avoid unintended large backfills",{"type":31,"tag":94,"props":5351,"children":5352},{},[5353],{"type":37,"value":5354},"The agent will ask for confirmation before executing destructive or ambiguous actions",{"type":31,"tag":124,"props":5356,"children":5357},{},[],{"type":31,"tag":32,"props":5359,"children":5360},{"id":2636},[5361],{"type":37,"value":2639},{"type":31,"tag":90,"props":5363,"children":5364},{},[5365,5375,5385],{"type":31,"tag":94,"props":5366,"children":5367},{},[5368],{"type":31,"tag":52,"props":5369,"children":5372},{"href":5370,"rel":5371},"https://getbruin.com/docs/bruin/cloud/mcp-setup.html",[56],[5373],{"type":37,"value":5374},"Bruin Cloud MCP setup",{"type":31,"tag":94,"props":5376,"children":5377},{},[5378],{"type":31,"tag":52,"props":5379,"children":5382},{"href":5380,"rel":5381},"https://getbruin.com/docs/bruin/cloud/overview.html",[56],[5383],{"type":37,"value":5384},"Bruin Cloud overview",{"type":31,"tag":94,"props":5386,"children":5387},{},[5388],{"type":31,"tag":52,"props":5389,"children":5391},{"href":5041,"rel":5390},[56],[5392],{"type":37,"value":5393},"Video walkthrough",{"type":31,"tag":2681,"props":5395,"children":5396},{},[5397],{"type":37,"value":2685},{"title":7,"searchDepth":246,"depth":246,"links":5399},[5400,5401,5408,5409],{"id":34,"depth":246,"text":38},{"id":206,"depth":246,"text":209,"children":5402},[5403,5404,5405,5406,5407],{"id":5115,"depth":255,"text":5118},{"id":5168,"depth":255,"text":5171},{"id":5255,"depth":255,"text":5258},{"id":5279,"depth":255,"text":5282},{"id":5303,"depth":255,"text":5306},{"id":2536,"depth":246,"text":2539},{"id":2636,"depth":246,"text":2639},"content:tutorials:bruin-cloud-mcp.md","tutorials/bruin-cloud-mcp.md","tutorials/bruin-cloud-mcp",{"_path":5414,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":5415,"description":5416,"coverImage":5417,"date":5418,"readingTime":255,"category":12,"tags":5419,"difficulty":19,"journeys":5421,"hidden":6,"videoUrl":5422,"author":5423,"body":5424,"_type":2703,"_id":5645,"_source":2705,"_file":5646,"_stem":5647,"_extension":2708},"/tutorials/bruin-dashboards","Build Dashboards with an AI Agent","Use the Bruin Cloud AI agent to build interactive dashboards from natural language prompts - generate queries, create charts, and ask follow-up questions in one place.","https://img.youtube.com/vi/X3usx8IUIlk/maxresdefault.jpg","2026-03-31",[5036,5037,5420],"Dashboards",[22,21],"https://youtu.be/X3usx8IUIlk",{"name":24,"role":25,"image":26},{"type":28,"children":5425,"toc":5633},[5426,5431,5435,5444,5453,5460,5476,5479,5483,5489,5494,5500,5505,5513,5518,5524,5529,5535,5540,5558,5564,5569,5577,5582,5585,5589,5607,5610,5614],{"type":31,"tag":5046,"props":5427,"children":5430},{"width":5048,"height":5049,"src":5428,"title":5429,"frameBorder":5052,"allow":5053,"allowFullScreen":277},"https://www.youtube.com/embed/X3usx8IUIlk","Bruin Features - Dashboards",[],{"type":31,"tag":32,"props":5432,"children":5433},{"id":34},[5434],{"type":37,"value":38},{"type":31,"tag":40,"props":5436,"children":5437},{},[5438,5442],{"type":31,"tag":44,"props":5439,"children":5440},{},[5441],{"type":37,"value":48},{"type":37,"value":5443}," - Build interactive dashboards in Bruin Cloud using natural language prompts instead of manually writing queries and configuring charts.",{"type":31,"tag":40,"props":5445,"children":5446},{},[5447,5451],{"type":31,"tag":44,"props":5448,"children":5449},{},[5450],{"type":37,"value":78},{"type":37,"value":5452}," - Data analysts and engineers who want to quickly explore and visualize their data without leaving Bruin Cloud.",{"type":31,"tag":40,"props":5454,"children":5455},{},[5456],{"type":31,"tag":44,"props":5457,"children":5458},{},[5459],{"type":37,"value":88},{"type":31,"tag":90,"props":5461,"children":5462},{},[5463],{"type":31,"tag":94,"props":5464,"children":5465},{},[5466,5468,5474],{"type":37,"value":5467},"A ",{"type":31,"tag":52,"props":5469,"children":5472},{"href":5470,"rel":5471},"https://getbruin.com",[56],[5473],{"type":37,"value":5036},{"type":37,"value":5475}," account with data already materialized in your warehouse",{"type":31,"tag":124,"props":5477,"children":5478},{},[],{"type":31,"tag":32,"props":5480,"children":5481},{"id":206},[5482],{"type":37,"value":209},{"type":31,"tag":211,"props":5484,"children":5486},{"id":5485},"_1-open-the-dashboards-page",[5487],{"type":37,"value":5488},"1) Open the Dashboards page",{"type":31,"tag":40,"props":5490,"children":5491},{},[5492],{"type":37,"value":5493},"Navigate to the Dashboards section in Bruin Cloud. This is where you can create and manage all your dashboards.",{"type":31,"tag":211,"props":5495,"children":5497},{"id":5496},"_2-write-a-natural-language-prompt",[5498],{"type":37,"value":5499},"2) Write a natural language prompt",{"type":31,"tag":40,"props":5501,"children":5502},{},[5503],{"type":37,"value":5504},"Describe what you want to analyze. For example:",{"type":31,"tag":184,"props":5506,"children":5507},{},[5508],{"type":31,"tag":40,"props":5509,"children":5510},{},[5511],{"type":37,"value":5512},"\"I want to analyze the data for 2024 - show me customer satisfaction trends, revenue by quarter, and churn rate.\"",{"type":31,"tag":40,"props":5514,"children":5515},{},[5516],{"type":37,"value":5517},"The AI agent will generate the SQL queries and build the charts for you automatically.",{"type":31,"tag":211,"props":5519,"children":5521},{"id":5520},"_3-inspect-the-generated-queries",[5522],{"type":37,"value":5523},"3) Inspect the generated queries",{"type":31,"tag":40,"props":5525,"children":5526},{},[5527],{"type":37,"value":5528},"Click on any chart to see the SQL query behind it. This lets you verify the logic and understand exactly what data is being visualized.",{"type":31,"tag":211,"props":5530,"children":5532},{"id":5531},"_4-iterate-on-the-dashboard",[5533],{"type":37,"value":5534},"4) Iterate on the dashboard",{"type":31,"tag":40,"props":5536,"children":5537},{},[5538],{"type":37,"value":5539},"You can go back and forth with the AI agent to refine the dashboard:",{"type":31,"tag":90,"props":5541,"children":5542},{},[5543,5548,5553],{"type":31,"tag":94,"props":5544,"children":5545},{},[5546],{"type":37,"value":5547},"Click on a chart that needs adjustment to bring it into context",{"type":31,"tag":94,"props":5549,"children":5550},{},[5551],{"type":37,"value":5552},"Ask the agent to change a specific chart, fix an issue, or add a new visualization",{"type":31,"tag":94,"props":5554,"children":5555},{},[5556],{"type":37,"value":5557},"The agent understands conversational follow-ups",{"type":31,"tag":211,"props":5559,"children":5561},{"id":5560},"_5-ask-analytical-questions",[5562],{"type":37,"value":5563},"5) Ask analytical questions",{"type":31,"tag":40,"props":5565,"children":5566},{},[5567],{"type":37,"value":5568},"The agent is not limited to building charts. You can ask it questions about the data directly, for example:",{"type":31,"tag":184,"props":5570,"children":5571},{},[5572],{"type":31,"tag":40,"props":5573,"children":5574},{},[5575],{"type":37,"value":5576},"\"Why is there a dip in customer satisfaction in July?\"",{"type":31,"tag":40,"props":5578,"children":5579},{},[5580],{"type":37,"value":5581},"It will analyze the underlying data and provide an explanation rather than generating another chart.",{"type":31,"tag":124,"props":5583,"children":5584},{},[],{"type":31,"tag":32,"props":5586,"children":5587},{"id":2536},[5588],{"type":37,"value":2539},{"type":31,"tag":90,"props":5590,"children":5591},{},[5592,5597,5602],{"type":31,"tag":94,"props":5593,"children":5594},{},[5595],{"type":37,"value":5596},"The AI agent acts as a companion for building reports, asking questions, and getting responses - all in one place",{"type":31,"tag":94,"props":5598,"children":5599},{},[5600],{"type":37,"value":5601},"You can mix chart creation with ad-hoc analysis in the same conversation",{"type":31,"tag":94,"props":5603,"children":5604},{},[5605],{"type":37,"value":5606},"Every chart is backed by a visible SQL query you can inspect and verify",{"type":31,"tag":124,"props":5608,"children":5609},{},[],{"type":31,"tag":32,"props":5611,"children":5612},{"id":2636},[5613],{"type":37,"value":2639},{"type":31,"tag":90,"props":5615,"children":5616},{},[5617,5625],{"type":31,"tag":94,"props":5618,"children":5619},{},[5620],{"type":31,"tag":52,"props":5621,"children":5623},{"href":5380,"rel":5622},[56],[5624],{"type":37,"value":5384},{"type":31,"tag":94,"props":5626,"children":5627},{},[5628],{"type":31,"tag":52,"props":5629,"children":5631},{"href":5422,"rel":5630},[56],[5632],{"type":37,"value":5393},{"title":7,"searchDepth":246,"depth":246,"links":5634},[5635,5636,5643,5644],{"id":34,"depth":246,"text":38},{"id":206,"depth":246,"text":209,"children":5637},[5638,5639,5640,5641,5642],{"id":5485,"depth":255,"text":5488},{"id":5496,"depth":255,"text":5499},{"id":5520,"depth":255,"text":5523},{"id":5531,"depth":255,"text":5534},{"id":5560,"depth":255,"text":5563},{"id":2536,"depth":246,"text":2539},{"id":2636,"depth":246,"text":2639},"content:tutorials:bruin-dashboards.md","tutorials/bruin-dashboards.md","tutorials/bruin-dashboards",{"_path":5649,"_dir":5,"_draft":6,"_partial":6,"_locale":7,"title":5650,"description":5651,"coverImage":5652,"date":5653,"readingTime":246,"category":12,"tags":5654,"difficulty":19,"journeys":5657,"hidden":6,"videoUrl":5658,"author":5659,"body":5660,"_type":2703,"_id":5885,"_source":2705,"_file":5886,"_stem":5887,"_extension":2708},"/tutorials/bruin-database-viewer","Query Databases from Your IDE","Use the Bruin extension's built-in database viewer to browse tables, view schemas, and run queries across all your connections without leaving VS Code.","https://img.youtube.com/vi/3ySWFad-70I/maxresdefault.jpg","2026-02-20",[14,5655,5656],"IDE Extension","Database",[22,21],"https://youtu.be/3ySWFad-70I",{"name":24,"role":25,"image":26},{"type":28,"children":5661,"toc":5874},[5662,5667,5671,5680,5689,5696,5724,5727,5731,5737,5756,5762,5767,5773,5786,5791,5797,5808,5811,5817,5847,5850,5854],{"type":31,"tag":5046,"props":5663,"children":5666},{"width":5048,"height":5049,"src":5664,"title":5665,"frameBorder":5052,"allow":5053,"allowFullScreen":277},"https://www.youtube.com/embed/3ySWFad-70I","Bruin Features - Database Viewer",[],{"type":31,"tag":32,"props":5668,"children":5669},{"id":34},[5670],{"type":37,"value":38},{"type":31,"tag":40,"props":5672,"children":5673},{},[5674,5678],{"type":31,"tag":44,"props":5675,"children":5676},{},[5677],{"type":37,"value":48},{"type":37,"value":5679}," - Browse and query all your databases directly from VS Code or Cursor using the Bruin extension's built-in database viewer.",{"type":31,"tag":40,"props":5681,"children":5682},{},[5683,5687],{"type":31,"tag":44,"props":5684,"children":5685},{},[5686],{"type":37,"value":78},{"type":37,"value":5688}," - Data analysts and engineers who want to explore data without switching between multiple tools like BigQuery UI, DataGrip, or DBeaver.",{"type":31,"tag":40,"props":5690,"children":5691},{},[5692],{"type":31,"tag":44,"props":5693,"children":5694},{},[5695],{"type":37,"value":88},{"type":31,"tag":90,"props":5697,"children":5698},{},[5699,5708,5713],{"type":31,"tag":94,"props":5700,"children":5701},{},[5702,5707],{"type":31,"tag":52,"props":5703,"children":5705},{"href":99,"rel":5704},[56],[5706],{"type":37,"value":14},{"type":37,"value":104},{"type":31,"tag":94,"props":5709,"children":5710},{},[5711],{"type":37,"value":5712},"The Bruin VS Code or Cursor extension installed",{"type":31,"tag":94,"props":5714,"children":5715},{},[5716,5718],{"type":37,"value":5717},"A Bruin project with database connections configured in ",{"type":31,"tag":63,"props":5719,"children":5721},{"className":5720},[],[5722],{"type":37,"value":5723},".bruin.yml",{"type":31,"tag":124,"props":5725,"children":5726},{},[],{"type":31,"tag":32,"props":5728,"children":5729},{"id":206},[5730],{"type":37,"value":209},{"type":31,"tag":211,"props":5732,"children":5734},{"id":5733},"_1-open-the-database-viewer",[5735],{"type":37,"value":5736},"1) Open the database viewer",{"type":31,"tag":40,"props":5738,"children":5739},{},[5740,5742,5747,5749,5754],{"type":37,"value":5741},"Look for the database icon in the VS Code sidebar. Under ",{"type":31,"tag":44,"props":5743,"children":5744},{},[5745],{"type":37,"value":5746},"Databases",{"type":37,"value":5748},", you'll see all the connections defined in your ",{"type":31,"tag":63,"props":5750,"children":5752},{"className":5751},[],[5753],{"type":37,"value":5723},{"type":37,"value":5755}," file - DuckDB, BigQuery, Redshift, Postgres, or any other configured connection.",{"type":31,"tag":211,"props":5757,"children":5759},{"id":5758},"_2-browse-your-tables",[5760],{"type":37,"value":5761},"2) Browse your tables",{"type":31,"tag":40,"props":5763,"children":5764},{},[5765],{"type":37,"value":5766},"Expand a connection to see its datasets and tables. You can also view the schema (columns and types) for each table.",{"type":31,"tag":211,"props":5768,"children":5770},{"id":5769},"_3-query-a-table",[5771],{"type":37,"value":5772},"3) Query a table",{"type":31,"tag":40,"props":5774,"children":5775},{},[5776,5778,5784],{"type":37,"value":5777},"Click on any table to open a temporary file with a pre-filled ",{"type":31,"tag":63,"props":5779,"children":5781},{"className":5780},[],[5782],{"type":37,"value":5783},"SELECT",{"type":37,"value":5785}," query. Run it to see the results directly in your editor.",{"type":31,"tag":40,"props":5787,"children":5788},{},[5789],{"type":37,"value":5790},"You can modify the query, add filters, joins, or aggregations - and run it again.",{"type":31,"tag":211,"props":5792,"children":5794},{"id":5793},"_4-switch-between-databases",[5795],{"type":37,"value":5796},"4) Switch between databases",{"type":31,"tag":40,"props":5798,"children":5799},{},[5800,5802,5807],{"type":37,"value":5801},"If you have multiple database connections (e.g., DuckDB for local development and BigQuery for production), you can quickly switch between them without reconfiguring credentials or opening different tools. Everything uses the connections already defined in your ",{"type":31,"tag":63,"props":5803,"children":5805},{"className":5804},[],[5806],{"type":37,"value":5723},{"type":37,"value":200},{"type":31,"tag":124,"props":5809,"children":5810},{},[],{"type":31,"tag":32,"props":5812,"children":5814},{"id":5813},"why-this-is-useful",[5815],{"type":37,"value":5816},"Why this is useful",{"type":31,"tag":90,"props":5818,"children":5819},{},[5820,5825,5837,5842],{"type":31,"tag":94,"props":5821,"children":5822},{},[5823],{"type":37,"value":5824},"No need to switch between VS Code, BigQuery UI, DataGrip, DBeaver, or other query tools",{"type":31,"tag":94,"props":5826,"children":5827},{},[5828,5830,5835],{"type":37,"value":5829},"All your credentials are already in ",{"type":31,"tag":63,"props":5831,"children":5833},{"className":5832},[],[5834],{"type":37,"value":5723},{"type":37,"value":5836}," - no extra configuration",{"type":31,"tag":94,"props":5838,"children":5839},{},[5840],{"type":37,"value":5841},"Quick navigation between multiple databases in one interface",{"type":31,"tag":94,"props":5843,"children":5844},{},[5845],{"type":37,"value":5846},"Speeds up development by keeping everything in one place",{"type":31,"tag":124,"props":5848,"children":5849},{},[],{"type":31,"tag":32,"props":5851,"children":5852},{"id":2636},[5853],{"type":37,"value":2639},{"type":31,"tag":90,"props":5855,"children":5856},{},[5857,5866],{"type":31,"tag":94,"props":5858,"children":5859},{},[5860],{"type":31,"tag":52,"props":5861,"children":5863},{"href":99,"rel":5862},[56],[5864],{"type":37,"value":5865},"Bruin CLI installation",{"type":31,"tag":94,"props":5867,"children":5868},{},[5869],{"type":31,"tag":52,"props":5870,"children":5872},{"href":5658,"rel":5871},[56],[5873],{"type":37,"value":5393},{"title":7,"searchDepth":246,"depth":246,"links":5875},[5876,5877,5883,5884],{"id":34,"depth":246,"text":38},{"id":206,"depth":246,"text":209,"children":5878},[5879,5880,5881,5882],{"id":5733,"depth":255,"text":5736},{"id":5758,"depth":255,"text":5761},{"id":5769,"depth":255,"text":5772},{"id":5793,"depth":255,"text":5796},{"id":5813,"depth":246,"text":5816},{"id":2636,"depth":246,"text":2639},"content:tutorials:bruin-database-viewer.md","tutorials/bruin-database-viewer.md","tutorials/bruin-database-viewer",1776974975177]