[{"data":1,"prerenderedAt":902},["ShallowReactive",2],{"doc:\u002Fdocs\u002Fsources":3,"docs-nav":709},{"id":4,"title":5,"body":6,"description":700,"extension":701,"meta":702,"navigation":704,"path":705,"seo":706,"stem":707,"__hash__":708},"docs\u002Fdocs\u002Fsources\u002FREADME.md","Sources",{"type":7,"value":8,"toc":683},"minimark",[9,13,22,29,49,54,280,291,302,314,318,323,326,333,336,340,343,386,389,411,414,418,421,427,431,434,449,455,461,478,482,497,500,504,527,531,534,612,619,623,633,639,646,650],[10,11,5],"h1",{"id":12},"sources",[14,15,16,17,21],"p",{},"A ",[18,19,20],"strong",{},"datasource"," is a named table in the catalog: a snapshot of data that flows, saved\nviews, SQL scripts, the Viewer and the AI assistant read. This page lists every way a\ndatasource comes into being, what each one needs, and the rules all of them share:\nsnapshots, refreshes, descriptions, sort keys, data contracts, permissions and lineage.",[14,23,24],{},[25,26],"img",{"alt":27,"src":28},"The dialog New datasource from database: name orders, connection Sample ERP (Postgres), Table vendite.ordini, order by data_ordine, a description","\u002Fmedia\u002Fguide\u002Fsources\u002Fdatasource-from-database.png",[14,30,31],{},[32,33,34,37,38,42,43,48],"em",{},[18,35,36],{},"New → Datasource from a database"," in a folder: the most common way in, here for the sample ",[39,40,41],"code",{},"orders"," (",[44,45,47],"a",{"href":46},"\u002Fdocs\u002Fsources\u002Fdatabases#a-whole-table-refreshed-every-morning","the example",").",[50,51,53],"h2",{"id":52},"every-source-at-a-glance","Every source at a glance",[55,56,57,79],"table",{},[58,59,60],"thead",{},[61,62,63,67,70,73,76],"tr",{},[64,65,66],"th",{},"Source",[64,68,69],{},"What it reads",[64,71,72],{},"Connection needed",[64,74,75],{},"How it is updated",[64,77,78],{},"Page",[80,81,82,103,123,142,161,180,199,217,237,256],"tbody",{},[61,83,84,88,91,94,97],{},[85,86,87],"td",{},"Uploaded file",[85,89,90],{},"One CSV, TSV, TXT, JSON, NDJSON, Excel or Parquet file, uploaded in the flow editor",[85,92,93],{},"None",[85,95,96],{},"Upload it again; it reaches the catalog through a flow's Output node",[85,98,99],{},[44,100,102],{"href":101},"\u002Fdocs\u002Fsources\u002Ffiles","Uploaded files",[61,104,105,108,111,114,117],{},[85,106,107],{},"Database table or query",[85,109,110],{},"A table, a view or a SQL query on PostgreSQL, MySQL, MariaDB, ClickHouse, Trino, Oracle or SQL Server",[85,112,113],{},"A database connection",[85,115,116],{},"By hand, on a schedule, or in a flow group",[85,118,119],{},[44,120,122],{"href":121},"\u002Fdocs\u002Fsources\u002Fdatabases","Database tables and queries",[61,124,125,128,131,134,136],{},[85,126,127],{},"S3 folder",[85,129,130],{},"The files of a bucket folder that match a glob, stacked into one table",[85,132,133],{},"An S3 connection",[85,135,116],{},[85,137,138],{},[44,139,141],{"href":140},"\u002Fdocs\u002Fs3-datasource","S3 buckets",[61,143,144,147,150,153,155],{},[85,145,146],{},"SFTP folder",[85,148,149],{},"The files of a server folder that match a glob, stacked into one table",[85,151,152],{},"An SFTP connection",[85,154,116],{},[85,156,157],{},[44,158,160],{"href":159},"\u002Fdocs\u002Fsftp","SFTP folders",[61,162,163,166,169,172,174],{},[85,164,165],{},"API call",[85,167,168],{},"The records of one or more requests to a REST\u002FJSON API",[85,170,171],{},"An HTTP API connection",[85,173,116],{},[85,175,176],{},[44,177,179],{"href":178},"\u002Fdocs\u002Fapi-datasource","HTTP APIs",[61,181,182,185,188,191,193],{},[85,183,184],{},"SharePoint",[85,186,187],{},"Excel and CSV files of a document library that match a path or a glob",[85,189,190],{},"A SharePoint connection",[85,192,116],{},[85,194,195],{},[44,196,198],{"href":197},"\u002Fdocs\u002Fsources\u002Fsharepoint","Excel on SharePoint",[61,200,201,204,207,210,212],{},[85,202,203],{},"Google Sheets",[85,205,206],{},"One tab of a spreadsheet, whole or a range",[85,208,209],{},"A Google Sheets connection (a service account, read-only)",[85,211,116],{},[85,213,214],{},[44,215,203],{"href":216},"\u002Fdocs\u002Fsources\u002Fgoogle-sheets",[61,218,219,222,225,228,231],{},[85,220,221],{},"Flow output",[85,223,224],{},"The result of a flow, written by an Output node «Tabularia Datasource»",[85,226,227],{},"None of its own: the flow's sources",[85,229,230],{},"At every run of the flow: by hand, on its schedule, or in a flow group",[85,232,233],{},[44,234,236],{"href":235},"\u002Fdocs\u002Fsources\u002Fflow-outputs","Flow and SQL script results",[61,238,239,242,245,248,251],{},[85,240,241],{},"SQL script result",[85,243,244],{},"The whole result of a saved SQL script",[85,246,247],{},"None, or the database connection the script runs on",[85,249,250],{},"«Refresh now», on the script's schedule, or in a flow group",[85,252,253],{},[44,254,236],{"href":255},"\u002Fdocs\u002Fsources\u002Fflow-outputs#sql-scripts",[61,257,258,261,268,271,274],{},[85,259,260],{},"Python or R script output",[85,262,263,264,267],{},"What a saved script writes at ",[39,265,266],{},"TABULARIA_OUTPUT",", with «Also publish it as a datasource»",[85,269,270],{},"None of its own: a scripting environment (Kubernetes installations)",[85,272,273],{},"At every run of the script: by hand, on its schedule, or in a flow group",[85,275,276],{},[44,277,279],{"href":278},"\u002Fdocs\u002Fscripting#output","Python and R",[14,281,282,283,286,287,290],{},"Database, S3, SFTP, API, SharePoint and Google Sheets datasources are ",[18,284,285],{},"imported",": Tabularia reads an\noutside system through a connection and keeps a copy. In the Datasources page they carry\nthe tag «db». Flow, SQL script and Python or R results are ",[18,288,289],{},"written",": a flow or a\nscript computes them, and they carry the tag «flow». An uploaded file is neither: it is\nthe source of one flow, and reaches the catalog when that flow publishes it.",[14,292,293,294,297,298,301],{},"Imported datasources are created from a folder in Explore: ",[18,295,296],{},"New → Datasource from a\ndatabase",". The dialog follows the connection you choose: a database asks for a table or\na SQL query, SharePoint for a path, SFTP and S3 for a folder and a glob, an HTTP API for\nthe call, Google Sheets for a spreadsheet and one of its tabs. The first import starts as soon as you confirm with ",[18,299,300],{},"Create & import",".",[14,303,304,305,309,310,301],{},"Connections are described in ",[44,306,308],{"href":307},"\u002Fdocs\u002Fconnections","Connections","; the database ones,\ndialect by dialect, in ",[44,311,313],{"href":312},"\u002Fdocs\u002Fconnections\u002Fdatabases","Databases",[50,315,317],{"id":316},"what-every-datasource-has-in-common","What every datasource has in common",[319,320,322],"h3",{"id":321},"a-snapshot-in-parquet","A snapshot in parquet",[14,324,325],{},"Whatever its source, a datasource is one parquet file in the installation's object\nstorage, with a name, a folder, a column list and a row count in the catalog. Reading a\ndatasource never touches the source system: flows, previews and scripts read the parquet.",[14,327,328,329,332],{},"A refresh, a flow run or a script write produces a ",[18,330,331],{},"new"," file. The datasource points at\nit only when the whole write has succeeded, so whoever is reading keeps the previous data\nuntil the new one is complete, and a failed refresh leaves the datasource exactly as it\nwas. The replaced file is deleted later, after a grace period longer than any run, since\na run that started earlier may still be reading it. When two updates of the same\ndatasource overlap, the one that read the source later wins: a run that read earlier and\nfinished later does not replace newer data.",[14,334,335],{},"The id of a datasource never changes across refreshes and overwrites, so flows, saved\nviews and scripts that use it keep working.",[319,337,339],{"id":338},"refreshing-by-hand-and-on-a-schedule","Refreshing by hand and on a schedule",[14,341,342],{},"An imported datasource is refreshed from the Datasources page:",[344,345,346,353,371],"ul",{},[347,348,349,352],"li",{},[18,350,351],{},"Refresh snapshot now"," runs the source again and replaces the snapshot. One refresh\nat a time: a second one, by hand, is refused while the first is running; a scheduled\none skips its turn.",[347,354,355,358,359,362,363,366,367,370],{},[18,356,357],{},"Schedule automatic refresh (cron)"," takes a five-field cron (",[39,360,361],{},"0 6 * * *"," every day at\nsix, ",[39,364,365],{},"*\u002F30 * * * *"," every half hour), read in the installation's time zone\n(",[39,368,369],{},"APP__TIMEZONE","). Clear it to switch the schedule off.",[347,372,373,374,377,378,381,382,301],{},"In a ",[18,375,376],{},"flow group",", the panel ",[18,379,380],{},"Datasources to refresh"," puts a refresh in a step, so\nthe flows in the next step read fresh data. See ",[44,383,385],{"href":384},"\u002Fdocs\u002Fcapabilities\u002Fscheduling","Scheduling",[14,387,388],{},"A scheduled refresh runs with the authority of the person who set it, checked again at\nevery firing: if they no longer have RUN on the datasource's folder or CONNECT on the\nconnection's folder, or their account is disabled, the schedule switches itself off. A\ndatasource moved to another folder by someone else loses its schedule for the same\nreason.",[14,390,391,392,395,396,399,400,402,403,399,405,407,408,48],{},"While an import runs, the list shows its progress: «the database is preparing the data»,\n«",[32,393,394],{},"n"," rows received», «file ",[32,397,398],{},"i"," of ",[32,401,394],{},"» for the file sources, «call ",[32,404,398],{},[32,406,394],{},"» for APIs,\n«checking the contract», «saving». Afterwards it shows the row count, or «import failed»\nwith the error; the API lists the last 50 imports of a datasource\n(",[39,409,410],{},"GET \u002Fdatasources\u002F{id}\u002Fruns",[14,412,413],{},"Written datasources are not refreshed from here: they change when the flow or the script\nthat writes them runs.",[319,415,417],{"id":416},"what-a-datasources-source-is","What a datasource's source is",[14,419,420],{},"The source of an imported datasource — the table, the query, the path, the folder and\nglob, the API call — is fixed when the datasource is created. Name, folder, description,\nfield descriptions and sort keys can be changed later; the source cannot. To read\nsomething else, create another datasource.",[14,422,423,426],{},[18,424,425],{},"Duplicate",", in Explore, makes a copy in the same folder, named «name (1)», with its definition, its\ndata (copied to a file of its own) and its data contract. The schedule stays with the\noriginal. Duplicating an imported datasource asks for CONNECT on its connection, as\ncreating one does.",[319,428,430],{"id":429},"descriptions","Descriptions",[14,432,433],{},"Open a datasource in the Datasources page to write:",[344,435,436,443],{},[347,437,438,439,442],{},"the ",[18,440,441],{},"Datasource description",": what it holds, what one row stands for, the period\ncovered, the caveats (up to 4,000 characters);",[347,444,438,445,448],{},[18,446,447],{},"Field descriptions",": the meaning of each column (up to 2,000 characters each).",[14,450,451,452,301],{},"Field descriptions are kept apart from the column list, so a refresh that rewrites the\ncolumns does not lose them. People read them in the catalog, and the AI assistant reads\nthem to choose a table and understand its columns. A datasource whose description and\nevery field description are filled in shows the badge ",[18,453,454],{},"AI ready",[14,456,457],{},[25,458],{"alt":459,"src":460},"The Datasources page with orders opened: its source vendite.ordini on Sample ERP, the Datasource description and a description for each field, the badge AI ready","\u002Fmedia\u002Fguide\u002Fsources\u002Fdatasource-descriptions.png",[14,462,463],{},[32,464,465,467,468,471,472,474,475,477],{},[39,466,41],{}," in the ",[18,469,470],{},"Datasources"," page: where it is read from, the ",[18,473,441],{},", a description for every field, and the ",[18,476,454],{}," badge they earn.",[319,479,481],{"id":480},"sort-keys","Sort keys",[14,483,484,485,488,489,492,493,496],{},"A datasource from a database table or query can be written ",[18,486,487],{},"ordered"," by some of its\ncolumns («Order by» when you create it, ",[18,490,491],{},"Order"," in the Datasources page later). The\nimport adds an ",[39,494,495],{},"ORDER BY"," on those columns, in that order, and the parquet comes out\nsorted: filters and charts on them in the Viewer read less. A change applies from the\nnext refresh. Prefer columns the source database has an index on.",[14,498,499],{},"A datasource written by a flow takes its order from the flow's Output node, at every\nrun. File, SharePoint, API and Google Sheets datasources keep the rows in the order of the\nfiles, of the responses or of the sheet and take no sort keys.",[319,501,503],{"id":502},"data-contract","Data contract",[14,505,506,507,510,511,514,515,518,519,522,523,301],{},"A datasource can carry a ",[18,508,509],{},"data contract",": rules on its columns, values and row count,\neach with a severity. The contract is checked on the new data ",[18,512,513],{},"before"," it replaces the\nsnapshot, for a refresh as for a flow or a script that writes the datasource. A rule of\nseverity ",[32,516,517],{},"error"," that fails refuses the new data: the datasource keeps the last good\nsnapshot and the report says which rule failed. A ",[32,520,521],{},"warning"," is recorded and the data\ngoes through. See ",[44,524,526],{"href":525},"\u002Fdocs\u002Fgovernance\u002Fdata-contracts","Data contracts",[319,528,530],{"id":529},"folders-and-permissions","Folders and permissions",[14,532,533],{},"A datasource lives in a folder and follows that folder's permissions, like flows do.\nConnections live in folders too, and the CONNECT permission on a connection's folder is\nwhat lets someone read through it.",[55,535,536,546],{},[58,537,538],{},[61,539,540,543],{},[64,541,542],{},"To",[64,544,545],{},"You need",[80,547,548,556,564,572,580,588,596,604],{},[61,549,550,553],{},[85,551,552],{},"See a datasource and use it in flows, views, scripts, the Viewer",[85,554,555],{},"VIEW on its folder",[61,557,558,561],{},[85,559,560],{},"Create an imported datasource",[85,562,563],{},"EDIT on the destination folder and CONNECT on the connection's folder",[61,565,566,569],{},[85,567,568],{},"Refresh it now, or set its schedule",[85,570,571],{},"RUN on its folder and CONNECT on the connection's folder",[61,573,574,577],{},[85,575,576],{},"Rename it, describe it, change its sort keys, delete it",[85,578,579],{},"EDIT on its folder",[61,581,582,585],{},[85,583,584],{},"Move it",[85,586,587],{},"EDIT on its folder and on the destination",[61,589,590,593],{},[85,591,592],{},"Upload a file in the flow editor",[85,594,595],{},"EDIT on at least one folder",[61,597,598,601],{},[85,599,600],{},"Write it from a flow's Output node",[85,602,603],{},"RUN on the flow's folder and EDIT on the datasource's folder",[61,605,606,609],{},[85,607,608],{},"Write it from a SQL script",[85,610,611],{},"RUN on the script's folder and EDIT on the datasource's folder",[14,613,614,615,301],{},"MANAGE on a folder includes all of these, CONNECT too. Administrators can do everything.\nA datasource used by saved views cannot be deleted until the views are. Every creation,\nrefresh, schedule change, rename, move and deletion is in the audit log. See\n",[44,616,618],{"href":617},"\u002Fdocs\u002Fgovernance\u002Fpermissions","Permissions",[319,620,622],{"id":621},"lineage","Lineage",[14,624,625,626,628,629,301],{},"The ",[18,627,622],{}," page draws, for what you can read, which connection a datasource is\nimported from, which flow, saved script or SQL script writes it, which flows,\nscripts, SQL scripts and notebooks read it, which flow groups refresh it or send it by\nemail. With OpenLineage turned on, every refresh and every write is also reported to\nyour data catalog as a job with its inputs and outputs, and every notebook session\nwith what it read: see ",[44,630,632],{"href":631},"\u002Fdocs\u002Fopenlineage","OpenLineage",[14,634,635],{},[25,636],{"alt":637,"src":638},"The Lineage page centred on the flow Margin by Category and Month: five datasources read from the database on the left, the flow in the middle, the datasource it publishes on the right","\u002Fmedia\u002Fguide\u002Flineage\u002Flineage-margin-flow.png",[14,640,641],{},[32,642,643,645],{},[18,644,622],{}," centred on «Margin by Category and Month»: the five datasources it reads, and the one it publishes.",[50,647,649],{"id":648},"related","Related",[344,651,652,657,664,671,676],{},[347,653,654,656],{},[44,655,308],{"href":307},": every connection type, how to set it up, who may use it.",[347,658,659,663],{},[44,660,662],{"href":661},"\u002Fdocs\u002Fcapabilities\u002Fflows","Low-code flows",": reading datasources and publishing new ones.",[347,665,666,670],{},[44,667,669],{"href":668},"\u002Fdocs\u002Fplaceholders","Dynamic dates",": placeholders and variables in file paths and API calls.",[347,672,673,675],{},[44,674,385],{"href":384},": refreshes, flows, scripts and groups on a clock.",[347,677,678,680,681,301],{},[44,679,526],{"href":525}," and ",[44,682,618],{"href":617},{"title":684,"searchDepth":685,"depth":686,"links":687},"",2,3,[688,689,699],{"id":52,"depth":685,"text":53},{"id":316,"depth":685,"text":317,"children":690},[691,692,693,694,695,696,697,698],{"id":321,"depth":686,"text":322},{"id":338,"depth":686,"text":339},{"id":416,"depth":686,"text":417},{"id":429,"depth":686,"text":430},{"id":480,"depth":686,"text":481},{"id":502,"depth":686,"text":503},{"id":529,"depth":686,"text":530},{"id":621,"depth":686,"text":622},{"id":648,"depth":685,"text":649},"A datasource is a named table in the catalog: a snapshot of data that flows, saved\nviews, SQL scripts, the Viewer and the AI assistant read. This page lists every way a\ndatasource comes into being, what each one needs, and the rules all of them share:\nsnapshots, refreshes, descriptions, sort keys, data contracts, permissions and lineage.","md",{"source":703},"docs\u002Fsources\u002FREADME.md",true,"\u002Fdocs\u002Fsources",{"title":5,"description":700},"docs\u002Fsources\u002FREADME","GztRV78HBoNxjdRVlc8ioHCgfFSXDKfNOcpBMJZzx3Y",[710,729,778,792,819,846,868,894],{"title":711,"icon":712,"intro":713,"items":714},"Getting started","start","Install it on one machine, learn the few ideas everything else is built on, and run a first flow.",[715,717,720,723,726],{"path":716,"title":711},"\u002Fdocs\u002Fgetting-started",{"path":718,"title":719},"\u002Fdocs\u002Fgetting-started-docker-compose","Walkthrough with Docker Compose",{"path":721,"title":722},"\u002Fdocs\u002Fdeploy\u002Fminikube","Try it on your computer (minikube)",{"path":724,"title":725},"\u002Fdocs\u002Fconcepts","Concepts",{"path":727,"title":728},"\u002Fdocs\u002Foverview","Overview (README)",{"title":730,"icon":731,"intro":732,"items":733},"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.",[734,737,738,741,744,747,750,753,755,758,761,764,767,768,771,772,775],{"path":735,"title":736},"\u002Fdocs\u002Fcapabilities","All capabilities",{"path":661,"title":662},{"path":739,"title":740},"\u002Fdocs\u002Fcapabilities\u002Fpreview-and-analysis","Preview and analysis",{"path":742,"title":743},"\u002Fdocs\u002Fcapabilities\u002Fask-your-data","Ask your data with AI",{"path":745,"title":746},"\u002Fdocs\u002Fcapabilities\u002Freports","Pixel-perfect reports",{"path":748,"title":749},"\u002Fdocs\u002Fcapabilities\u002Freport-functions","Report functions",{"path":751,"title":752},"\u002Fdocs\u002Fcapabilities\u002Fdashboards","Dashboards",{"path":754,"title":279},"\u002Fdocs\u002Fscripting",{"path":756,"title":757},"\u002Fdocs\u002Fsql-scripts","SQL scripts",{"path":759,"title":760},"\u002Fdocs\u002Fcapabilities\u002Fnotebooks","marimo notebooks as apps",{"path":762,"title":763},"\u002Fdocs\u002Fcontainer-node","Docker images in flows",{"path":765,"title":766},"\u002Fdocs\u002Fcapabilities\u002Fflow-groups","Flow groups: orchestration",{"path":384,"title":385},{"path":769,"title":770},"\u002Fdocs\u002Fpushmail","Pushmail: datasources, reports and dashboards by email",{"path":668,"title":669},{"path":773,"title":774},"\u002Fdocs\u002Fcapabilities\u002Fengines","Engines",{"path":776,"title":777},"\u002Fdocs\u002Fengines\u002Fengine-differences","Engine differences",{"title":5,"icon":12,"intro":779,"items":780},"Every way data comes in: files, databases, buckets, SFTP folders, HTTP APIs, SharePoint, Google Sheets, and the results of your own flows.",[781,783,784,785,786,787,788,789,790],{"path":705,"title":782},"All sources",{"path":101,"title":102},{"path":121,"title":122},{"path":140,"title":141},{"path":159,"title":160},{"path":178,"title":179},{"path":197,"title":198},{"path":216,"title":203},{"path":235,"title":791},"Results of flows and scripts",{"title":308,"icon":793,"intro":794,"items":795},"connections","The systems Tabularia reads from and writes to, how each connection is set up, and who may use it.",[796,798,799,802,805,807,808,809,810,813,816],{"path":307,"title":797},"All connections",{"path":312,"title":313},{"path":800,"title":801},"\u002Fdocs\u002Fsqlserver","Microsoft SQL Server driver",{"path":803,"title":804},"\u002Fdocs\u002Fconnections\u002Fs3","S3 and compatible storage",{"path":159,"title":806},"SFTP servers",{"path":178,"title":179},{"path":197,"title":184},{"path":216,"title":203},{"path":811,"title":812},"\u002Fdocs\u002Fconnections\u002Fsmtp","SMTP email",{"path":814,"title":815},"\u002Fdocs\u002Fcontainer-registries","Container registries",{"path":817,"title":818},"\u002Fdocs\u002Fconnections\u002Fdestinations","Writing data out",{"title":820,"icon":821,"intro":822,"items":823},"Integrations","integrations","How Tabularia fits your stack: AI providers, the REST API and webhooks, dbt, OpenLineage, single sign-on, SIEM and monitoring.",[824,827,830,833,836,837,840,843],{"path":825,"title":826},"\u002Fdocs\u002Fintegrations","All integrations",{"path":828,"title":829},"\u002Fdocs\u002Fintegrations\u002Fai","AI: where it is used",{"path":831,"title":832},"\u002Fdocs\u002Fapi","API, tokens and webhooks",{"path":834,"title":835},"\u002Fdocs\u002Fdbt-export","Export to dbt",{"path":631,"title":632},{"path":838,"title":839},"\u002Fdocs\u002Fsso-keycloak","Single sign-on with Keycloak",{"path":841,"title":842},"\u002Fdocs\u002Fsiem-splunk","Audit log to Splunk",{"path":844,"title":845},"\u002Fdocs\u002Fintegrations\u002Fmonitoring","Monitoring",{"title":847,"icon":848,"intro":849,"items":850},"Security & governance","governance","Who may see and do what, what is recorded, and how data quality and personal data are kept in check.",[851,854,855,858,859,862,865],{"path":852,"title":853},"\u002Fdocs\u002Fgovernance","Overview",{"path":617,"title":618},{"path":856,"title":857},"\u002Fdocs\u002Fgovernance\u002Faudit-log","Audit log",{"path":525,"title":526},{"path":860,"title":861},"\u002Fdocs\u002Fdesign\u002Fsso-group-mapping","SSO and group mapping",{"path":863,"title":864},"\u002Fdocs\u002Fexamples\u002Fkeycloak","Keycloak example on a laptop",{"path":866,"title":867},"\u002Fdocs\u002Fengines\u002Fclickhouse-ai-user","A ClickHouse user for the AI assistant",{"title":869,"icon":870,"intro":871,"items":872},"Install & operate","operate","Run it in production on Kubernetes, configure it, upgrade it and keep it healthy.",[873,876,879,882,885,888,891],{"path":874,"title":875},"\u002Fdocs\u002Fdeploy\u002Fkubernetes","Kubernetes and Helm",{"path":877,"title":878},"\u002Fdocs\u002Fdeploy\u002Fkind","A company-like cluster on one computer (kind)",{"path":880,"title":881},"\u002Fdocs\u002Fdeploy\u002Fupgrading","Upgrading, backups and restore",{"path":883,"title":884},"\u002Fdocs\u002Fdeploy\u002Frelease-checklist","Install and upgrade checklist",{"path":886,"title":887},"\u002Fdocs\u002Fconfiguration","Configuration reference",{"path":889,"title":890},"\u002Fdocs\u002Fengine-settings","Settings from the panel",{"path":892,"title":893},"\u002Fdocs\u002Fdatabase-migrations","Database migrations",{"title":895,"icon":896,"intro":897,"items":898},"Reference","reference","Release process and the remaining reference pages.",[899],{"path":900,"title":901},"\u002Fdocs\u002Frelease-process","Release process",1793656371787]