[{"data":1,"prerenderedAt":1028},["ShallowReactive",2],{"doc:\u002Fdocs\u002Fconnections\u002Fdestinations":3,"docs-nav":816},{"id":4,"title":5,"body":6,"description":807,"extension":808,"meta":809,"navigation":811,"path":812,"seo":813,"stem":814,"__hash__":815},"docs\u002Fdocs\u002Fconnections\u002Fdestinations.md","Writing data out",{"type":7,"value":8,"toc":792},"minimark",[9,13,22,27,169,172,176,179,186,192,200,260,274,277,281,287,296,301,358,390,394,428,455,459,495,530,534,550,578,582,631,667,671,700,703,707,757,761],[10,11,5],"h1",{"id":12},"writing-data-out",[14,15,16,17,21],"p",{},"An ",[18,19,20],"strong",{},"Output node"," ends a flow and decides where its result goes: a datasource in\nTabularia, a table of a database, a file on S3 or on an SFTP server, or an email with the\nresult attached. This page lists the five destinations with an example each, on the sample\ndata, and links to the connection each one needs.",[23,24,26],"h2",{"id":25},"at-a-glance","At a glance",[28,29,30,52],"table",{},[31,32,33],"thead",{},[34,35,36,40,43,46,49],"tr",{},[37,38,39],"th",{},"Destination (as in the node)",[37,41,42],{},"Writes",[37,44,45],{},"Connection",[37,47,48],{},"Formats",[37,50,51],{},"Names with placeholders",[53,54,55,75,100,123,146],"tbody",{},[34,56,57,63,66,69,72],{},[58,59,60],"td",{},[18,61,62],{},"Tabularia Datasource",[58,64,65],{},"a datasource in a folder, optionally copied to S3",[58,67,68],{},"none (an S3 one for the copy)",[58,70,71],{},"Parquet in Tabularia's storage",[58,73,74],{},"the copy's path",[34,76,77,82,85,94,97],{},[58,78,79],{},[18,80,81],{},"Database table",[58,83,84],{},"a table, appended or replaced, then optional SQL",[58,86,87,88,93],{},"PostgreSQL, MySQL, MariaDB, ClickHouse, Trino, Oracle or SQL Server (",[89,90,92],"a",{"href":91},"\u002Fdocs\u002Fconnections\u002Fdatabases","Databases",")",[58,95,96],{},"the database's types",[58,98,99],{},"no",[34,101,102,107,110,117,120],{},[58,103,104],{},[18,105,106],{},"File on S3 \u002F object storage",[58,108,109],{},"one object, or a hive-partitioned dataset",[58,111,112,113,93],{},"S3 (",[89,114,116],{"href":115},"\u002Fdocs\u002Fconnections\u002Fs3","S3",[58,118,119],{},"Parquet, CSV",[58,121,122],{},"the key",[34,124,125,130,133,140,143],{},[58,126,127],{},[18,128,129],{},"SFTP server (file)",[58,131,132],{},"a file in a folder of the server",[58,134,135,136,93],{},"SFTP (",[89,137,139],{"href":138},"\u002Fdocs\u002Fsftp","SFTP",[58,141,142],{},"CSV, Parquet, Excel",[58,144,145],{},"folder and file name",[34,147,148,153,156,163,166],{},[58,149,150],{},[18,151,152],{},"Email with attachment",[58,154,155],{},"an email with the result attached",[58,157,158,159,93],{},"SMTP (",[89,160,162],{"href":161},"\u002Fdocs\u002Fconnections\u002Fsmtp","SMTP",[58,164,165],{},"Excel (.xlsx), CSV",[58,167,168],{},"subject and attachment name",[14,170,171],{},"A flow can have several Output nodes, each with its own destination: every Output is its\nown write, and the run of the flow reports each one.",[23,173,175],{"id":174},"how-it-works","How it works",[14,177,178],{},"The Output node takes the result of the chain before it, as computed by the flow's engine,\nand hands it to a worker, which writes it where the node says. The worker opens the\nconnection with the credentials the gateway sends it, still encrypted, after checking that\nwhoever runs the flow — you, or the author of the schedule — may use it.",[14,180,181],{},[182,183],"img",{"alt":184,"src":185},"The Destination list of an Output node: Tabularia Datasource, Database table, File on S3 \u002F object storage, Email with attachment, SFTP server (file)","\u002Fmedia\u002Fguide\u002Fconnections\u002Foutput-destinations.png",[14,187,188],{},[189,190,191],"em",{},"The five destinations of an Output node. The fields below the list change with the choice.",[14,193,194,195,199],{},"Names marked as templates above take the ",[89,196,198],{"href":197},"\u002Fdocs\u002Fplaceholders","placeholder language"," and\nfour names of the Outputs:",[28,201,202,212],{},[31,203,204],{},[34,205,206,209],{},[37,207,208],{},"Placeholder",[37,210,211],{},"Becomes",[53,213,214,228,240,250],{},[34,215,216,222],{},[58,217,218],{},[219,220,221],"code",{},"{date}",[58,223,224,227],{},[219,225,226],{},"2026-10-27",", in the node's time zone (UTC when empty)",[34,229,230,235],{},[58,231,232],{},[219,233,234],{},"{datetime}",[58,236,237],{},[219,238,239],{},"2026-10-27_143005",[34,241,242,247],{},[58,243,244],{},[219,245,246],{},"{run_id}",[58,248,249],{},"the run's number, as in the run history",[34,251,252,257],{},[58,253,254],{},[219,255,256],{},"{flow}",[58,258,259],{},"the flow's name, made safe for a file name",[14,261,262,263,266,267,266,270,273],{},"and the whole grammar: ",[219,264,265],{},"{yesterday:yyyyMMdd}",", ",[219,268,269],{},"{today:yyyy\u002FMM}",[219,271,272],{},"{now:HHmm}",". The panel\nshows what each name resolves to while you type, and a run whose names cannot be resolved\nis refused before it starts.",[14,275,276],{},"When a run ends, its entry in the history says what was written: the datasource, the\ntable and its rows, the bucket and key, the SFTP path and size, or the recipients and the\nattachment.",[23,278,280],{"id":279},"a-datasource","A datasource",[14,282,283],{},[182,284],{"alt":285,"src":286},"The Output node of the sample flow with destination Tabularia Datasource, its name, folder and the overwrite option","\u002Fmedia\u002Fguide\u002Fsources\u002Foutput-node-datasource.png",[14,288,289],{},[189,290,291,292,295],{},"The Output node of «Margin by Category and Month»: the datasource of the same name in ",[219,293,294],{},"Sample \u002F Private tables",", overwritten at every run.",[14,297,298,300],{},[18,299,62],{}," publishes the result as a datasource that other flows, the viewer\nand the AI assistant can read.",[28,302,303,312],{},[31,304,305],{},[34,306,307,310],{},[37,308,309],{},"Field",[37,311],{},[53,313,314,322,330,338,346],{},[34,315,316,319],{},[58,317,318],{},"Datasource name, Folder",[58,320,321],{},"where it appears in Explore",[34,323,324,327],{},[58,325,326],{},"Description",[58,328,329],{},"optional",[34,331,332,335],{},[58,333,334],{},"Overwrite if it already exists",[58,336,337],{},"refresh the datasource of that name in that folder (same id, so the flows that read it keep working) instead of failing; only a datasource a flow produced can be overwritten",[34,339,340,343],{},[58,341,342],{},"Order by",[58,344,345],{},"optional columns: the data is stored sorted by them, which makes the viewer's filters and charts faster",[34,347,348,351],{},[58,349,350],{},"Also copy the file to external S3",[58,352,353,354,357],{},"optional: an S3 connection, a bucket and a ",[18,355,356],{},"Path in the bucket","; the copy is Parquet, and a failure of the copy is recorded without failing the run",[14,359,360,363,364,367,368,370,371,373,374,377,378,381,382,385,386,389],{},[18,361,362],{},"Example."," The sample flow ",[18,365,366],{},"Top 20 Products by Revenue"," ends with an Output named\n",[189,369,366],{}," in ",[18,372,294],{},", with ",[18,375,376],{},"Overwrite if it already\nexists"," ticked: its schedule (",[219,379,380],{},"30 5 * * *",") refreshes it every morning at 05:30. Tick ",[18,383,384],{},"Also\ncopy the file to external S3",", choose an S3 connection and the path\n",[219,387,388],{},"published\u002Ftop20\u002F{date}.parquet",": every run also leaves a dated copy in the bucket.",[23,391,393],{"id":392},"a-database-table","A database table",[14,395,396,398,399,266,401,404,405,408,409,404,412,415,416,419,420,423,424,427],{},[18,397,81],{}," writes into a table of a PostgreSQL, MySQL, MariaDB, ClickHouse, Trino,\nOracle or SQL Server connection: ",[18,400,45],{},[18,402,403],{},"Destination table"," (",[219,406,407],{},"schema.table","\nsupported), ",[18,410,411],{},"Write mode",[18,413,414],{},"Append (INSERT)"," or ",[18,417,418],{},"Replace (empty + INSERT)",") and an\noptional ",[18,421,422],{},"Post-insert SQL",". The table is created at the first run with the flow's\ncolumns; columns are matched by name. PostgreSQL, MySQL\u002FMariaDB, Oracle and SQL Server\nwrite in one transaction, ClickHouse through a staging table. The details, per database,\nare on ",[89,425,92],{"href":426},"\u002Fdocs\u002Fconnections\u002Fdatabases#writing-into-a-table",".",[14,429,430,432,433,436,437,439,440,443,444,266,447,450,451,454],{},[18,431,362],{}," Add to the sample flow ",[18,434,435],{},"Margin by Category and Month"," an Output node:\n",[18,438,81],{},", a PostgreSQL connection whose user may create tables in ",[219,441,442],{},"reporting",",\ndestination table ",[219,445,446],{},"reporting.margine_mensile",[18,448,449],{},"Replace",", post-insert SQL\n",[219,452,453],{},"ANALYZE reporting.margine_mensile",". Every run replaces the table's rows with the\nmonth-by-month margins in one transaction: a reporting tool reading that table never sees\nit half written.",[23,456,458],{"id":457},"a-file-on-s3","A file on S3",[14,460,461,463,464,266,467,470,471,266,474,404,477,415,480,483,484,487,488,491,492,427],{},[18,462,106],{},": ",[18,465,466],{},"S3 connection",[18,468,469],{},"Bucket"," (empty = the connection's\ndefault), ",[18,472,473],{},"Key \u002F path",[18,475,476],{},"Format",[18,478,479],{},"Parquet",[18,481,482],{},"CSV",") and, optionally, ",[18,485,486],{},"Partition\nby"," columns. Without partitions one object is written at the key, replacing the previous\none; with partitions a hive tree ",[219,489,490],{},"key\u002Fcolumn=value\u002F…",", and the objects under the prefix\nthat the run did not write are removed. At most 1,000 partitions. See ",[89,493,116],{"href":494},"\u002Fdocs\u002Fconnections\u002Fs3#writing",[14,496,497,363,499,502,503,506,507,510,511,514,515,518,519,522,523,266,526,529],{},[18,498,362],{},[18,500,501],{},"Cost to Serve by Channel"," runs every Monday. An Output\nnode with the key ",[219,504,505],{},"exports\u002Fcost_to_serve\u002F{today:yyyy}\u002Fweek_of_{start_of_week}.csv"," and\nformat CSV leaves one file per week, ",[219,508,509],{},"exports\u002Fcost_to_serve\u002F2026\u002Fweek_of_2026-10-26.csv",",\nfor a partner who reads the bucket. With key ",[219,512,513],{},"lake\u002Fcost_to_serve",", format Parquet and ",[18,516,517],{},"Partition by"," ",[219,520,521],{},"canale",",\nthe same output becomes ",[219,524,525],{},"lake\u002Fcost_to_serve\u002Fcanale=GDO\u002F…",[219,527,528],{},"canale=HoReCa\u002F…",", one folder\nper sales channel.",[23,531,533],{"id":532},"a-file-on-an-sftp-server","A file on an SFTP server",[14,535,536,538,539,266,541,415,543,546,547,427],{},[18,537,129],{},": the SFTP connection, the folder (empty = the login folder), the\nfile name, the format (",[18,540,482],{},[18,542,479],{},[18,544,545],{},"Excel (.xlsx)","). The file is uploaded\nunder a hidden temporary name and renamed onto the final one, so whoever polls the folder\nnever reads half a file; an existing file with the same name is replaced. A dated folder\nis created when missing. See ",[89,548,139],{"href":549},"\u002Fdocs\u002Fsftp#output-to-an-sftp-server",[14,551,552,363,554,557,558,561,562,565,566,569,570,573,574,577],{},[18,553,362],{},[18,555,556],{},"Agent Leaderboard"," ends in an Output: SFTP connection\n",[219,559,560],{},"exports-server",", folder ",[219,563,564],{},"\u002Foutbox\u002F{today:yyyy}",", file name ",[219,567,568],{},"leaderboard_{date}",", format\nExcel. The first run of the year creates ",[219,571,572],{},"\u002Foutbox\u002F2026","; each run writes\n",[219,575,576],{},"leaderboard_2026-10-27.xlsx"," there.",[23,579,581],{"id":580},"an-email-with-an-attachment","An email with an attachment",[14,583,584,463,586,266,589,266,592,266,595,598,599,602,603,606,607,598,610,404,612,415,614,616,617,620,621,624,625,628,629,427],{},[18,585,152],{},[18,587,588],{},"SMTP connection",[18,590,591],{},"Recipients",[18,593,594],{},"Cc",[18,596,597],{},"Subject",",\n",[18,600,601],{},"Message body"," (HTML when ",[18,604,605],{},"The body is HTML"," is ticked), ",[18,608,609],{},"Attachment name",[18,611,476],{},[18,613,545],{},[18,615,482],{},") and ",[18,618,619],{},"Stop the flow if the send fails"," (on by\ndefault; off, a failed send is recorded and the following steps go on). The attachment is\nmade at every run, even with no rows. Every recipient must belong to the connection's\n",[18,622,623],{},"allowed domains",", or the run does not start. ",[18,626,627],{},"Send it to me"," runs the flow and sends\nthe real attachment to your own address only, writing nothing anywhere. See\n",[89,630,162],{"href":161},[14,632,633,635,636,638,639,642,643,646,647,650,651,654,655,658,659,662,663,666],{},[18,634,362],{}," On ",[18,637,366],{},": SMTP connection ",[219,640,641],{},"Company mail",",\nrecipients ",[219,644,645],{},"sales@example.com",", Cc ",[219,648,649],{},"controller@example.com",", subject\n",[219,652,653],{},"Top 20 products, {yesterday:dd\u002FMM\u002Fyyyy}",", body ",[219,656,657],{},"The twenty products with the highest revenue, updated this morning.",", attachment name ",[219,660,661],{},"top20_{date}",", Excel. Press ",[18,664,665],{},"Send it to\nme"," first to see the file as the recipients will.",[23,668,670],{"id":669},"permissions","Permissions",[28,672,673,683],{},[31,674,675],{},[34,676,677,680],{},[37,678,679],{},"Destination",[37,681,682],{},"Besides RUN on the flow, you need",[53,684,685,692],{},[34,686,687,689],{},[58,688,62],{},[58,690,691],{},"EDIT on the destination folder (and CONNECT on the S3 connection's folder for the copy)",[34,693,694,697],{},[58,695,696],{},"Database table, S3, SFTP, Email",[58,698,699],{},"CONNECT on the connection's folder",[14,701,702],{},"A scheduled run uses the rights of the schedule's author, checked again when it fires.",[23,704,706],{"id":705},"limits-and-good-to-know","Limits and good to know",[708,709,710,719,722,731,737,744],"ul",{},[711,712,713,714,718],"li",{},"SQL Server is written only where its optional driver is installed, as for reading\n(",[89,715,717],{"href":716},"\u002Fdocs\u002Fsqlserver","SQL Server",").",[711,720,721],{},"An email carries at most 15 MB of attachment; an Excel file holds at most 1,048,575\nrows, by email or on SFTP.",[711,723,724,725,727,728,730],{},"An S3 output deletes, under a partitioned prefix, what the run did not write; a\nsingle-file S3 output and an SFTP output replace a file with the same name: use ",[219,726,221],{},"\nor ",[219,729,246],{}," to keep one per run.",[711,732,733,734,736],{},"A ",[18,735,81],{}," name is not a template: one table, written at every run.",[711,738,739,740,718],{},"The workers open every connection: on Kubernetes with the network policy, the\ndestinations' addresses must be allowed (",[89,741,743],{"href":742},"\u002Fdocs\u002Fconnections#network","Network",[711,745,746,747,751,752,756],{},"Data also leaves Tabularia through ",[89,748,750],{"href":749},"\u002Fdocs\u002Fpushmail","Pushmail"," cells of flow groups and\nthrough ",[89,753,755],{"href":754},"\u002Fdocs\u002Fsql-scripts","SQL scripts"," (a whole result exported as CSV or Excel).",[23,758,760],{"id":759},"related","Related",[708,762,763,777,787],{},[711,764,765,266,769,266,771,266,773,598,775],{},[89,766,768],{"href":767},"\u002Fdocs\u002Fconnections","Connections",[89,770,92],{"href":91},[89,772,116],{"href":115},[89,774,162],{"href":161},[89,776,139],{"href":138},[711,778,779,266,783],{},[89,780,782],{"href":781},"\u002Fdocs\u002Fcapabilities\u002Fflows","Flows",[89,784,786],{"href":785},"\u002Fdocs\u002Fcapabilities\u002Fflow-groups","Flow groups",[711,788,789],{},[89,790,791],{"href":197},"Placeholders",{"title":793,"searchDepth":794,"depth":795,"links":796},"",2,3,[797,798,799,800,801,802,803,804,805,806],{"id":25,"depth":794,"text":26},{"id":174,"depth":794,"text":175},{"id":279,"depth":794,"text":280},{"id":392,"depth":794,"text":393},{"id":457,"depth":794,"text":458},{"id":532,"depth":794,"text":533},{"id":580,"depth":794,"text":581},{"id":669,"depth":794,"text":670},{"id":705,"depth":794,"text":706},{"id":759,"depth":794,"text":760},"An Output node ends a flow and decides where its result goes: a datasource in\nTabularia, a table of a database, a file on S3 or on an SFTP server, or an email with the\nresult attached. This page lists the five destinations with an example each, on the sample\ndata, and links to the connection each one needs.","md",{"source":810},"docs\u002Fconnections\u002Fdestinations.md",true,"\u002Fdocs\u002Fconnections\u002Fdestinations",{"title":5,"description":807},"docs\u002Fconnections\u002Fdestinations","cfIenmgrbIAWdm4yTCbMQDDt_TiV-EArbahKNah5S_E",[817,836,886,917,940,969,994,1020],{"title":818,"icon":819,"intro":820,"items":821},"Getting started","start","Install it on one machine, learn the few ideas everything else is built on, and run a first flow.",[822,824,827,830,833],{"path":823,"title":818},"\u002Fdocs\u002Fgetting-started",{"path":825,"title":826},"\u002Fdocs\u002Fgetting-started-docker-compose","Walkthrough with Docker Compose",{"path":828,"title":829},"\u002Fdocs\u002Fdeploy\u002Fminikube","Try it on your computer (minikube)",{"path":831,"title":832},"\u002Fdocs\u002Fconcepts","Concepts",{"path":834,"title":835},"\u002Fdocs\u002Foverview","Overview (README)",{"title":837,"icon":838,"intro":839,"items":840},"Capabilities","capabilities","What you can build: visual flows, analysis on any step, AI questions, pixel-perfect reports, dashboards, Python, R and SQL scripts, containers and the orchestration that ties them together.",[841,844,846,849,852,855,858,861,864,865,868,871,873,876,878,880,883],{"path":842,"title":843},"\u002Fdocs\u002Fcapabilities","All capabilities",{"path":781,"title":845},"Low-code flows",{"path":847,"title":848},"\u002Fdocs\u002Fcapabilities\u002Fpreview-and-analysis","Preview and analysis",{"path":850,"title":851},"\u002Fdocs\u002Fcapabilities\u002Fask-your-data","Ask your data with AI",{"path":853,"title":854},"\u002Fdocs\u002Fcapabilities\u002Freports","Pixel-perfect reports",{"path":856,"title":857},"\u002Fdocs\u002Fcapabilities\u002Freport-functions","Report functions",{"path":859,"title":860},"\u002Fdocs\u002Fcapabilities\u002Fdashboards","Dashboards",{"path":862,"title":863},"\u002Fdocs\u002Fscripting","Python and R",{"path":754,"title":755},{"path":866,"title":867},"\u002Fdocs\u002Fcapabilities\u002Fnotebooks","marimo notebooks as apps",{"path":869,"title":870},"\u002Fdocs\u002Fcontainer-node","Docker images in flows",{"path":785,"title":872},"Flow groups: orchestration",{"path":874,"title":875},"\u002Fdocs\u002Fcapabilities\u002Fscheduling","Scheduling",{"path":749,"title":877},"Pushmail: datasources, reports and dashboards by email",{"path":197,"title":879},"Dynamic dates",{"path":881,"title":882},"\u002Fdocs\u002Fcapabilities\u002Fengines","Engines",{"path":884,"title":885},"\u002Fdocs\u002Fengines\u002Fengine-differences","Engine differences",{"title":887,"icon":888,"intro":889,"items":890},"Sources","sources","Every way data comes in: files, databases, buckets, SFTP folders, HTTP APIs, SharePoint, Google Sheets, and the results of your own flows.",[891,894,897,900,903,905,908,911,914],{"path":892,"title":893},"\u002Fdocs\u002Fsources","All sources",{"path":895,"title":896},"\u002Fdocs\u002Fsources\u002Ffiles","Uploaded files",{"path":898,"title":899},"\u002Fdocs\u002Fsources\u002Fdatabases","Database tables and queries",{"path":901,"title":902},"\u002Fdocs\u002Fs3-datasource","S3 buckets",{"path":138,"title":904},"SFTP folders",{"path":906,"title":907},"\u002Fdocs\u002Fapi-datasource","HTTP APIs",{"path":909,"title":910},"\u002Fdocs\u002Fsources\u002Fsharepoint","Excel on SharePoint",{"path":912,"title":913},"\u002Fdocs\u002Fsources\u002Fgoogle-sheets","Google Sheets",{"path":915,"title":916},"\u002Fdocs\u002Fsources\u002Fflow-outputs","Results of flows and scripts",{"title":768,"icon":918,"intro":919,"items":920},"connections","The systems Tabularia reads from and writes to, how each connection is set up, and who may use it.",[921,923,924,926,928,930,931,933,934,936,939],{"path":767,"title":922},"All connections",{"path":91,"title":92},{"path":716,"title":925},"Microsoft SQL Server driver",{"path":115,"title":927},"S3 and compatible storage",{"path":138,"title":929},"SFTP servers",{"path":906,"title":907},{"path":909,"title":932},"SharePoint",{"path":912,"title":913},{"path":161,"title":935},"SMTP email",{"path":937,"title":938},"\u002Fdocs\u002Fcontainer-registries","Container registries",{"path":812,"title":5},{"title":941,"icon":942,"intro":943,"items":944},"Integrations","integrations","How Tabularia fits your stack: AI providers, the REST API and webhooks, dbt, OpenLineage, single sign-on, SIEM and monitoring.",[945,948,951,954,957,960,963,966],{"path":946,"title":947},"\u002Fdocs\u002Fintegrations","All integrations",{"path":949,"title":950},"\u002Fdocs\u002Fintegrations\u002Fai","AI: where it is used",{"path":952,"title":953},"\u002Fdocs\u002Fapi","API, tokens and webhooks",{"path":955,"title":956},"\u002Fdocs\u002Fdbt-export","Export to dbt",{"path":958,"title":959},"\u002Fdocs\u002Fopenlineage","OpenLineage",{"path":961,"title":962},"\u002Fdocs\u002Fsso-keycloak","Single sign-on with Keycloak",{"path":964,"title":965},"\u002Fdocs\u002Fsiem-splunk","Audit log to Splunk",{"path":967,"title":968},"\u002Fdocs\u002Fintegrations\u002Fmonitoring","Monitoring",{"title":970,"icon":971,"intro":972,"items":973},"Security & governance","governance","Who may see and do what, what is recorded, and how data quality and personal data are kept in check.",[974,977,979,982,985,988,991],{"path":975,"title":976},"\u002Fdocs\u002Fgovernance","Overview",{"path":978,"title":670},"\u002Fdocs\u002Fgovernance\u002Fpermissions",{"path":980,"title":981},"\u002Fdocs\u002Fgovernance\u002Faudit-log","Audit log",{"path":983,"title":984},"\u002Fdocs\u002Fgovernance\u002Fdata-contracts","Data contracts",{"path":986,"title":987},"\u002Fdocs\u002Fdesign\u002Fsso-group-mapping","SSO and group mapping",{"path":989,"title":990},"\u002Fdocs\u002Fexamples\u002Fkeycloak","Keycloak example on a laptop",{"path":992,"title":993},"\u002Fdocs\u002Fengines\u002Fclickhouse-ai-user","A ClickHouse user for the AI assistant",{"title":995,"icon":996,"intro":997,"items":998},"Install & operate","operate","Run it in production on Kubernetes, configure it, upgrade it and keep it healthy.",[999,1002,1005,1008,1011,1014,1017],{"path":1000,"title":1001},"\u002Fdocs\u002Fdeploy\u002Fkubernetes","Kubernetes and Helm",{"path":1003,"title":1004},"\u002Fdocs\u002Fdeploy\u002Fkind","A company-like cluster on one computer (kind)",{"path":1006,"title":1007},"\u002Fdocs\u002Fdeploy\u002Fupgrading","Upgrading, backups and restore",{"path":1009,"title":1010},"\u002Fdocs\u002Fdeploy\u002Frelease-checklist","Install and upgrade checklist",{"path":1012,"title":1013},"\u002Fdocs\u002Fconfiguration","Configuration reference",{"path":1015,"title":1016},"\u002Fdocs\u002Fengine-settings","Settings from the panel",{"path":1018,"title":1019},"\u002Fdocs\u002Fdatabase-migrations","Database migrations",{"title":1021,"icon":1022,"intro":1023,"items":1024},"Reference","reference","Release process and the remaining reference pages.",[1025],{"path":1026,"title":1027},"\u002Fdocs\u002Frelease-process","Release process",1793656372048]