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