[{"data":1,"prerenderedAt":1279},["ShallowReactive",2],{"doc:\u002Fdocs\u002Fcapabilities\u002Fask-your-data":3,"docs-nav":1058},{"id":4,"title":5,"body":6,"description":1049,"extension":1050,"meta":1051,"navigation":1053,"path":1054,"seo":1055,"stem":1056,"__hash__":1057},"docs\u002Fdocs\u002Fcapabilities\u002Fask-your-data.md","Ask your data",{"type":7,"value":8,"toc":1034},"minimark",[9,13,22,29,35,40,127,131,134,164,171,189,195,200,273,281,284,288,296,323,327,345,349,357,362,597,602,716,719,743,747,750,775,781,789,816,822,836,859,865,873,885,889,914,918,921,925,955,959,1003,1007,1030],[10,11,5],"h1",{"id":12},"ask-your-data",[14,15,16,17,21],"p",{},"The ",[18,19,20],"strong",{},"Assistant"," page answers questions about the datasources in plain language: it\nfinds the right datasource, reads what its fields mean, runs a query and shows the\ntable the numbers come from, with a chart when one helps. It is for people who know\nwhat they want to know but not where the data sits or how to write the SQL, and for\nanalysts who want a first answer in seconds. It reads only what the person asking may\nread, and never changes anything.",[14,23,24],{},[25,26],"img",{"alt":27,"src":28},"A question typed on the Assistant page with one datasource in focus; the steps appear, then a bar chart and a table with the answer","\u002Fmedia\u002Fguide\u002Fai\u002Fask-your-data.gif",[14,30,31],{},[32,33,34],"em",{},"«Which category has the lowest margin? Chart it.» with «Margin by Category and Month» in focus: the steps it took, the chart, the table and a two-line answer.",[36,37,39],"h2",{"id":38},"at-a-glance","At a glance",[41,42,43,54],"table",{},[44,45,46],"thead",{},[47,48,49,52],"tr",{},[50,51],"th",{},[50,53],{},[55,56,57,68,76,89,97,105,113],"tbody",{},[47,58,59,63],{},[60,61,62],"td",{},"Where",[60,64,65,67],{},[18,66,20],{}," in the main menu",[47,69,70,73],{},[60,71,72],{},"Reads",[60,74,75],{},"the datasources you can read (VIEW on their folder), never a connection directly",[47,77,78,81],{},[60,79,80],{},"Does",[60,82,83,84,88],{},"lists and describes datasources, runs read-only ",[85,86,87],"code",{},"SELECT"," queries, joins two datasources, draws charts, downloads a full result as CSV or Excel",[47,90,91,94],{},[60,92,93],{},"Does not",[60,95,96],{},"write, delete, import, run flows, read a database live, see what you cannot see",[47,98,99,102],{},[60,100,101],{},"Engine",[60,103,104],{},"the one you choose under the question, among those the administrator allows",[47,106,107,110],{},[60,108,109],{},"Model",[60,111,112],{},"one the administrator enabled, chosen under the question",[47,114,115,118],{},[60,116,117],{},"Needs",[60,119,120,121,126],{},"the AI configured by an administrator (",[122,123,125],"a",{"href":124},"\u002Fdocs\u002Fintegrations\u002Fai","AI in Tabularia",")",[36,128,130],{"id":129},"how-it-works","How it works",[14,132,133],{},"The assistant is a language model with three tools, and nothing else:",[135,136,137,144,154],"ol",{},[138,139,140,143],"li",{},[18,141,142],{},"List the datasources"," you can read: name, folder, row count and the first lines of\nthe description their owners wrote. It searches by words of the question\n(«orders», «margin») in names and descriptions.",[138,145,146,149,150,153],{},[18,147,148],{},"Describe a datasource",": its description, its columns with their types and the\n",[18,151,152],{},"field descriptions"," written by hand, the row count, and five sample rows.",[138,155,156,159,160,163],{},[18,157,158],{},"Query a datasource",": one ",[85,161,162],{},"SELECT … FROM self",", run by the engine as the SQL step\nof a flow is, with the same checks. Optionally joined with a second datasource on\nkey columns, and drawn as a bar, line, area, pie, donut or scatter chart.",[14,165,166,167,170],{},"While it works, the page names the phase («Scanning the catalog», «Reading the fields\nof orders», «Querying orders», «Writing the answer») and lists every step; ",[18,168,169],{},"show SQL","\nopens the query of a step, and its result table sits under it. The answer's numbers\ncome from those tables: check them there.",[14,172,173,176,177,180,181,184,185,188],{},[18,174,175],{},"Descriptions make the difference."," The model picks tables and columns from their\nnames and descriptions. A datasource with a description and every field described\nshows «AI ready» in the Datasources tab; the side list of the Assistant page marks it\ntoo, and shows how many fields are described for the others. Write them in the datasource's ",[18,178,179],{},"Field descriptions"," and\n",[18,182,183],{},"Datasource description",": «Order state: evaso (fulfilled), in_lavorazione (in\nprogress), annullato (cancelled)» saves the model from guessing what ",[85,186,187],{},"stato"," holds.",[14,190,191,194],{},[18,192,193],{},"Focus."," The side list shows the datasources you can read. Select some (up to eight)\nand the conversation works on them, without searching the catalog first.",[196,197,199],"h3",{"id":198},"what-the-model-sees","What the model sees",[41,201,202,212],{},[44,203,204],{},[47,205,206,209],{},[50,207,208],{},"Sent to the model",[50,210,211],{},"Not sent",[55,213,214,225,233,241,252,266],{},[47,215,216,222],{},[60,217,218,219,126],{},"your question and the earlier messages of the conversation (up to ",[85,220,221],{},"AI__MAX_HISTORY_MESSAGES",[60,223,224],{},"datasources you cannot read: to the model they do not exist",[47,226,227,230],{},[60,228,229],{},"names, folders, row counts and descriptions of the datasources you can read",[60,231,232],{},"storage paths, buckets, credentials, connection details",[47,234,235,238],{},[60,236,237],{},"columns, types and field descriptions of the ones it describes",[60,239,240],{},"the rows beyond the cap of each query",[47,242,243,249],{},[60,244,245,248],{},[18,246,247],{},"five sample rows"," of each datasource it describes",[60,250,251],{},"data of a connection that was never imported",[47,253,254,264],{},[60,255,256,259,260,263],{},[18,257,258],{},"the rows each query returns",", up to ",[85,261,262],{},"AI__MAX_RESULT_ROWS"," (200 by default), each text value cut at 300 characters",[60,265],{},[47,267,268,271],{},[60,269,270],{},"today's date, the engine's SQL dialect, the interface language",[60,272],{},[14,274,275,276,280],{},"With ",[122,277,279],{"href":278},"\u002Fdocs\u002Fintegrations\u002Fai#metadata-only-mode","metadata-only mode"," on, the rows above\ndo not go: the model works from names, types, descriptions and row counts, says it cannot\nread the data, and answers with no figures and no tables. The opening dialog says so.",[14,282,283],{},"Otherwise rows of your data do reach the provider of the model you chose, named under the\ninput: as many as the query returns, up to the cap. The default instructions tell the model to aggregate in SQL rather than\nfetch raw rows, and a well-asked question («the total per channel») sends a few\naggregated lines, not the table. Choose the provider with that in mind, and keep\npersonal data out of the datasources the assistant's users can read, or out of the\nquestion («Do not type personal or confidential data: your question, and the data the\nassistant reads to answer it, go to the provider of the model you choose», as the opening\ndialog says, with the names).",[196,285,287],{"id":286},"where-the-queries-run","Where the queries run",[14,289,290,291,295],{},"On the engine chosen under the question: Polars, DuckDB, chDB, the external ClickHouse\nor BigQuery, as the administrator allows (",[122,292,294],{"href":293},"\u002Fdocs\u002Fcapabilities\u002Fengines","engines","). The engine reads the\ndatasource's current data (its last import or publish), not the source database.",[14,297,298,299,301,302,305,306,309,310,313,314,317,318,322],{},"Every query passes two checks: the gateway accepts one statement that starts with\n",[85,300,87],{}," and reads ",[85,303,304],{},"FROM self",", and the engine accepts only the datasource it was given\n(",[85,307,308],{},"self",", and the second datasource of a join, resolved by the gateway under your\npermissions). On the external ClickHouse the queries can also run as a dedicated\nread-only account, which cannot read ",[85,311,312],{},"system",", any table or ",[85,315,316],{},"url()",": see\n",[122,319,321],{"href":320},"\u002Fdocs\u002Fengines\u002Fclickhouse-ai-user","the AI user",".",[196,324,326],{"id":325},"the-complete-result","The complete result",[14,328,329,330,332,333,336,337,340,341,344],{},"The chat shows at most ",[85,331,262],{}," rows. ",[18,334,335],{},"CSV"," and ",[18,338,339],{},"Excel"," under a step's\ntable download all of them: the gateway reads the query again from the saved\nconversation (the browser sends only the step's id), checks that you may still read\nthe datasource, and runs it on the normal export path, with its caps. Each download is\nin the audit log (",[85,342,343],{},"export.download",", with the SQL).",[36,346,348],{"id":347},"examples-with-the-sample-data","Examples with the sample data",[14,350,351,352,356],{},"The sample data (",[122,353,355],{"href":354},"\u002Fdocs\u002Fgetting-started-docker-compose#a-the-sample-data-already-there","the «Sample» folder",")\nhas a cured-meats company's orders, products, customers and sales network. The numbers\nbelow depend on the size generated; the steps are what to expect.",[14,358,359],{},[18,360,361],{},"«Which sales channel brought in the most revenue in 2025?»",[135,363,364,375,406,594],{},[138,365,366,367,370,371,374],{},"«Scanning the catalog»: it finds ",[85,368,369],{},"orders"," (one row per order, with the channel) and\n",[85,372,373],{},"order_rows"," (one row per product ordered, with quantity, price and discount).",[138,376,377,378,381,382,381,384,387,388,390,391,381,394,381,397,381,400,387,403,405],{},"«Reading the fields» of both: ",[85,379,380],{},"canale",", ",[85,383,187],{},[85,385,386],{},"data_ordine"," in ",[85,389,369],{},";\n",[85,392,393],{},"quantita",[85,395,396],{},"prezzo_unitario",[85,398,399],{},"sconto_pct",[85,401,402],{},"ordine_id",[85,404,373],{},", stored as\ntext, as their descriptions say.",[138,407,408,409,411,412,414,415,417,418,421,422],{},"One query on ",[85,410,373],{}," joined with ",[85,413,369],{}," (",[85,416,402],{}," = ",[85,419,420],{},"id","):",[423,424,429],"pre",{"className":425,"code":426,"language":427,"meta":428,"style":428},"language-sql shiki shiki-themes github-dark-dimmed github-light","SELECT canale,\n       round(sum(CAST(quantita AS DOUBLE) * CAST(prezzo_unitario AS DOUBLE)\n                 * (1 - CAST(sconto_pct AS DOUBLE) \u002F 100)), 0) AS ricavo_netto\nFROM self\nWHERE EXTRACT(YEAR FROM data_ordine) = 2025 AND stato \u003C> 'annullato'\nGROUP BY canale\nORDER BY ricavo_netto DESC\n","sql","",[85,430,431,443,484,527,536,573,582],{"__ignoreMap":428},[432,433,436,439],"span",{"class":434,"line":435},"line",1,[432,437,87],{"class":438},"s6PUj",[432,440,442],{"class":441},"ssh_m"," canale,\n",[432,444,446,450,453,456,458,461,464,467,470,473,476,479,481],{"class":434,"line":445},2,[432,447,449],{"class":448},"swcJU","       round",[432,451,452],{"class":441},"(",[432,454,455],{"class":448},"sum",[432,457,452],{"class":441},[432,459,460],{"class":448},"CAST",[432,462,463],{"class":441},"(quantita ",[432,465,466],{"class":438},"AS",[432,468,469],{"class":441}," DOUBLE) ",[432,471,472],{"class":438},"*",[432,474,475],{"class":448}," CAST",[432,477,478],{"class":441},"(prezzo_unitario ",[432,480,466],{"class":438},[432,482,483],{"class":441}," DOUBLE)\n",[432,485,487,490,492,495,498,500,503,505,507,510,513,516,519,522,524],{"class":434,"line":486},3,[432,488,489],{"class":438},"                 *",[432,491,414],{"class":441},[432,493,494],{"class":448},"1",[432,496,497],{"class":438}," -",[432,499,475],{"class":448},[432,501,502],{"class":441},"(sconto_pct ",[432,504,466],{"class":438},[432,506,469],{"class":441},[432,508,509],{"class":438},"\u002F",[432,511,512],{"class":448}," 100",[432,514,515],{"class":441},")), ",[432,517,518],{"class":448},"0",[432,520,521],{"class":441},") ",[432,523,466],{"class":438},[432,525,526],{"class":441}," ricavo_netto\n",[432,528,530,533],{"class":434,"line":529},4,[432,531,532],{"class":438},"FROM",[432,534,535],{"class":438}," self\n",[432,537,539,542,545,548,551,554,557,560,563,566,569],{"class":434,"line":538},5,[432,540,541],{"class":438},"WHERE",[432,543,544],{"class":441}," EXTRACT(",[432,546,547],{"class":438},"YEAR",[432,549,550],{"class":438}," FROM",[432,552,553],{"class":441}," data_ordine) ",[432,555,556],{"class":438},"=",[432,558,559],{"class":448}," 2025",[432,561,562],{"class":438}," AND",[432,564,565],{"class":441}," stato ",[432,567,568],{"class":438},"\u003C>",[432,570,572],{"class":571},"sXfbr"," 'annullato'\n",[432,574,576,579],{"class":434,"line":575},6,[432,577,578],{"class":438},"GROUP BY",[432,580,581],{"class":441}," canale\n",[432,583,585,588,591],{"class":434,"line":584},7,[432,586,587],{"class":438},"ORDER BY",[432,589,590],{"class":441}," ricavo_netto ",[432,592,593],{"class":438},"DESC\n",[138,595,596],{},"A table of five rows (GDO, HoReCa, Grossista, Dettaglio, Gastronomia), a bar chart,\nand a short answer that names the first channel and its share of the total, and says\nthat cancelled orders were left out and that the amounts are net of discount.",[14,598,599],{},[18,600,601],{},"«Which depot cancels the most orders, and is it getting worse?»",[423,603,605],{"className":425,"code":604,"language":427,"meta":428,"style":428},"SELECT deposito, EXTRACT(YEAR FROM data_ordine) AS anno,\n       round(100.0 * sum(CASE WHEN stato = 'annullato' THEN 1 ELSE 0 END) \u002F count(*), 1) AS annullati_pct\nFROM self\nGROUP BY deposito, anno\nORDER BY deposito, anno\n",[85,606,607,625,697,703,710],{"__ignoreMap":428},[432,608,609,611,614,616,618,620,622],{"class":434,"line":435},[432,610,87],{"class":438},[432,612,613],{"class":441}," deposito, EXTRACT(",[432,615,547],{"class":438},[432,617,550],{"class":438},[432,619,553],{"class":441},[432,621,466],{"class":438},[432,623,624],{"class":441}," anno,\n",[432,626,627,629,631,634,636,638,641,644,646,649,652,654,656,659,662,665,668,671,674,676,678,681,683,685,688,690,692,694],{"class":434,"line":445},[432,628,449],{"class":448},[432,630,452],{"class":441},[432,632,633],{"class":448},"100",[432,635,322],{"class":441},[432,637,518],{"class":448},[432,639,640],{"class":438}," *",[432,642,643],{"class":448}," sum",[432,645,452],{"class":441},[432,647,648],{"class":438},"CASE",[432,650,651],{"class":438}," WHEN",[432,653,565],{"class":441},[432,655,556],{"class":438},[432,657,658],{"class":571}," 'annullato'",[432,660,661],{"class":438}," THEN",[432,663,664],{"class":448}," 1",[432,666,667],{"class":438}," ELSE",[432,669,670],{"class":448}," 0",[432,672,673],{"class":438}," END",[432,675,521],{"class":441},[432,677,509],{"class":438},[432,679,680],{"class":448}," count",[432,682,452],{"class":441},[432,684,472],{"class":438},[432,686,687],{"class":441},"), ",[432,689,494],{"class":448},[432,691,521],{"class":441},[432,693,466],{"class":438},[432,695,696],{"class":441}," annullati_pct\n",[432,698,699,701],{"class":434,"line":486},[432,700,532],{"class":438},[432,702,535],{"class":438},[432,704,705,707],{"class":434,"line":529},[432,706,578],{"class":438},[432,708,709],{"class":441}," deposito, anno\n",[432,711,712,714],{"class":434,"line":538},[432,713,587],{"class":438},[432,715,709],{"class":441},[14,717,718],{},"A line chart per depot, and an answer along the lines of: «Napoli stands out: its\nshare of cancelled orders grows every year. Modena is higher in 2025 only.» Asked to\nlook closer, it runs a second query by month on Modena and places the cancellations\nbetween September and December 2025. The sample data was generated with exactly these\ntwo anomalies, so the answer can be checked.",[14,720,721,724,725,728,729,732,733,736,737,739,740,742],{},[18,722,723],{},"«How many CRM activities per agent last month?»"," ",[85,726,727],{},"crm_activities"," has no field\ndescriptions on purpose. The assistant still answers, but it has to guess what ",[85,730,731],{},"tipo","\nand ",[85,734,735],{},"esito"," hold from their names and five sample rows; with descriptions it would not\nneed to. The side list shows the difference: ",[85,738,369],{}," carries the «AI ready» mark\n(every field described), ",[85,741,727],{}," no mark at all.",[36,744,746],{"id":745},"asking-it-to-build","Asking it to build",[14,748,749],{},"The same page builds: a flow, its schedule, a refresh, the other objects its tools\noffer. Nothing changes until you confirm. An example on the sample data, as it went on\nthe Docker Compose stack:",[135,751,752,755],{},[138,753,754],{},"Type «Build a datasource with the monthly net revenue per sales channel from the\nSample orders and order lines, refreshed every morning.»",[138,756,757,758,336,760,762,763,766,767,770,771,774],{},"The assistant searches the catalog, lists the folders where you may write and reads\nthe fields of ",[85,759,369],{},[85,761,373],{},". One thing it cannot decide for you comes back\nas a card of questions: ",[18,764,765],{},"Which orders should count toward net revenue?",", with\n«Fulfilled only» marked ",[32,768,769],{},"Recommended",", «Fulfilled + in progress», «All orders» and\n",[18,772,773],{},"Other"," for an answer of your own.",[14,776,777],{},[25,778],{"alt":779,"src":780},"The assistant asks which orders count toward net revenue, with three choices and Other","\u002Fmedia\u002Fguide\u002Fai\u002Fagent-question-card.png",[14,782,783],{},[32,784,785,786,322],{},"The question card: pick one choice (or write yours under Other), then ",[18,787,788],{},"Send answers",[135,790,791],{"start":486},[138,792,793,794,796,797,800,801,387,804,807,808,811,812,815],{},"Pick «Fulfilled only» and ",[18,795,788],{},". The answer is a ",[18,798,799],{},"plan",": ",[32,802,803],{},"Create the flow\n«Monthly net revenue per channel»",[85,805,806],{},"Sample \u002F Flows"," on Polars, with its steps (the\ntwo sources, a filter ",[85,809,810],{},"stato = evaso",", the join on the order, the month and the net\nrevenue as computed columns, the group by, the sort, the Output) and its first five\nrows; then ",[32,813,814],{},"Schedule the flow"," at 07:00 every day. The card says «Nothing has changed\nyet» and when the plan expires (30 minutes after its last change).",[14,817,818],{},[25,819],{"alt":820,"src":821},"A plan of two actions, waiting for confirmation: create the flow with its steps and first rows, then schedule it","\u002Fmedia\u002Fguide\u002Fai\u002Fagent-plan-card.png",[14,823,824],{},[32,825,826,827,381,830,381,833,322],{},"The plan card: what each action does, what it writes, the first rows it will produce, and ",[18,828,829],{},"Confirm",[18,831,832],{},"Change",[18,834,835],{},"Cancel",[135,837,838],{"start":529},[138,839,840,842,843,846,847,850,851,854,855,858],{},[18,841,829],{},". Your permissions are checked again and the actions run in order: each\none shows ",[18,844,845],{},"Done"," with an ",[18,848,849],{},"Open"," link, here to the new flow in the editor.\n",[18,852,853],{},"Open its page"," shows the same plan at ",[85,856,857],{},"\u002Fagent-plan",", to come back to it later.",[14,860,861],{},[25,862],{"alt":863,"src":864},"The plan applied: both actions marked Done, each with an Open link","\u002Fmedia\u002Fguide\u002Fai\u002Fagent-plan-applied.png",[14,866,867],{},[32,868,869,870,872],{},"Applied: the flow exists and is scheduled; ",[18,871,849],{}," takes you to it.",[14,874,875,877,878,880,881,884],{},[18,876,832],{}," asks the assistant to rework the plan with your remarks; ",[18,879,835],{}," drops it.\nBuilding needs what the same work needs by hand: EDIT on the folder of the flow, RUN to\nschedule it, CONNECT on a connection it reads (",[122,882,125],{"href":883},"\u002Fdocs\u002Fintegrations\u002Fai#where-the-ai-is-used",").",[36,886,888],{"id":887},"permissions","Permissions",[890,891,892,895,898,901,907],"ul",{},[138,893,894],{},"Anyone signed in can use the page, once an administrator has configured the AI and\nenabled at least one model.",[138,896,897],{},"The assistant reads the datasources the person can read (VIEW on their folder,\ninherited), checked again at every tool call. A datasource outside that scope reads\nexactly like one that does not exist, also to the model.",[138,899,900],{},"A datasource never imported (no data yet) is not listed.",[138,902,903,906],{},[18,904,905],{},"Observers"," can ask questions, but their conversations are not saved («history\nunavailable»), and they cannot download a step's full result.",[138,908,909,910,913],{},"Every query is in the audit log (",[85,911,912],{},"ai.query","), with the SQL, the model, the engine and\nthe number of rows.",[36,915,917],{"id":916},"telling-people-it-is-an-ai","Telling people it is an AI",[14,919,920],{},"Before the first question, a dialog says «You are writing to an automated assistant»:\nthe answers come from a model, there is no person on the other side, it can be wrong,\nit reads only what the account may read, and the question goes to the provider of the model\nchosen, whose name it gives.\nThe chat stays locked until «I understand». The acceptance is kept in the browser, not\nin the account, so on a shared account every new browser asks again. Every answer is\nlabelled «AI assistant» with the model that wrote it and its provider, the notice «This is an AI: it can\nmake mistakes. Always check the results.» stays under the input, and a conversation\ndownloaded as Markdown opens with the same notice. This is the transparency the EU AI\nAct (article 50) asks of a system people talk to.",[36,922,924],{"id":923},"conversations","Conversations",[890,926,927,930,939,942,948],{},[138,928,929],{},"Saved on the server, private to their author: nobody else, administrators included,\ncan open them from the interface. They hold the questions, the answers, the SQL and\nthe rows each query returned.",[138,931,932,934,935,938],{},[18,933,924],{}," on the page lists them (the latest ",[85,936,937],{},"AI__MAX_CHATS_LISTED",", 100 by\ndefault), with search by title; one reopens with its steps and tables and can be\ncontinued. The model names each one from its first question.",[138,940,941],{},"Under each answer: the tokens and the estimated cost, from the model's list price,\nnot your provider's invoice; the conversation shows its total.",[138,943,944,947],{},[18,945,946],{},"Download"," saves a conversation as Markdown.",[138,949,950,951,954],{},"A conversation untouched for ",[85,952,953],{},"ORCHESTRATOR__AI_CHAT_RETENTION_DAYS"," (90 by default)\nis deleted, with its turns; all of a person's conversations go when the account is\ndeleted. The spending ledger stays, without text.",[36,956,958],{"id":957},"limits-and-good-to-know","Limits and good to know",[890,960,961,977,983,994,997,1000],{},[138,962,963,964,966,967,969,970,973,974,976],{},"One ",[85,965,87],{}," per query, reading ",[85,968,304],{},", with no leading ",[85,971,972],{},"WITH",": subqueries go in\n",[85,975,532],{},". At most two datasources in one query (one join).",[138,978,979,980,982],{},"Rows per query: ",[85,981,262],{}," (200 by default, up to 2000), to the model and\nto the chat.",[138,984,985,986,989,990,993],{},"Model round-trips per question: ",[85,987,988],{},"AI__MAX_REQUESTS"," (12). Per question, also a cost cap\n(",[85,991,992],{},"AI__MAX_COST_PER_TURN_USD",", $0.50) and an input-token cap; per day, the caps per\nperson and per installation, when the administrator sets them. A cap reached says so.",[138,995,996],{},"A new question in the same conversation stops the query still running for the\nprevious one.",[138,998,999],{},"The assistant reads datasources only: not flows, saved views, scripts or\nconnections. To ask about data still in a database, import it first.",[138,1001,1002],{},"It can be wrong. The SQL and the table of every step are there to check.",[36,1004,1006],{"id":1005},"related","Related",[890,1008,1009,1014,1019,1025],{},[138,1010,1011,1013],{},[122,1012,125],{"href":124},": every use of the AI, configuration, costs",[138,1015,1016],{},[122,1017,1018],{"href":320},"The AI user on ClickHouse",[138,1020,1021],{},[122,1022,1024],{"href":1023},"\u002Fdocs\u002Fcapabilities\u002Fpreview-and-analysis","Preview and analysis",[138,1026,1027],{},[122,1028,1029],{"href":293},"Engines",[1031,1032,1033],"style",{},"html pre.shiki code .s6PUj, html code.shiki .s6PUj{--shiki-default:#F47067;--shiki-light:#D73A49}html pre.shiki code .ssh_m, html code.shiki .ssh_m{--shiki-default:#ADBAC7;--shiki-light:#24292E}html pre.shiki code .swcJU, html code.shiki .swcJU{--shiki-default:#6CB6FF;--shiki-light:#005CC5}html pre.shiki code .sXfbr, html code.shiki .sXfbr{--shiki-default:#96D0FF;--shiki-light:#032F62}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);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}",{"title":428,"searchDepth":445,"depth":486,"links":1035},[1036,1037,1042,1043,1044,1045,1046,1047,1048],{"id":38,"depth":445,"text":39},{"id":129,"depth":445,"text":130,"children":1038},[1039,1040,1041],{"id":198,"depth":486,"text":199},{"id":286,"depth":486,"text":287},{"id":325,"depth":486,"text":326},{"id":347,"depth":445,"text":348},{"id":745,"depth":445,"text":746},{"id":887,"depth":445,"text":888},{"id":916,"depth":445,"text":917},{"id":923,"depth":445,"text":924},{"id":957,"depth":445,"text":958},{"id":1005,"depth":445,"text":1006},"The Assistant page answers questions about the datasources in plain language: it\nfinds the right datasource, reads what its fields mean, runs a query and shows the\ntable the numbers come from, with a chart when one helps. It is for people who know\nwhat they want to know but not where the data sits or how to write the SQL, and for\nanalysts who want a first answer in seconds. It reads only what the person asking may\nread, and never changes anything.","md",{"source":1052},"docs\u002Fcapabilities\u002Fask-your-data.md",true,"\u002Fdocs\u002Fcapabilities\u002Fask-your-data",{"title":5,"description":1049},"docs\u002Fcapabilities\u002Fask-your-data","wsJ8b8YKuSbMHOoy2PEoMpktq6ovYQYl3KHTmCQb4ug",[1059,1078,1129,1161,1193,1221,1245,1271],{"title":1060,"icon":1061,"intro":1062,"items":1063},"Getting started","start","Install it on one machine, learn the few ideas everything else is built on, and run a first flow.",[1064,1066,1069,1072,1075],{"path":1065,"title":1060},"\u002Fdocs\u002Fgetting-started",{"path":1067,"title":1068},"\u002Fdocs\u002Fgetting-started-docker-compose","Walkthrough with Docker Compose",{"path":1070,"title":1071},"\u002Fdocs\u002Fdeploy\u002Fminikube","Try it on your computer (minikube)",{"path":1073,"title":1074},"\u002Fdocs\u002Fconcepts","Concepts",{"path":1076,"title":1077},"\u002Fdocs\u002Foverview","Overview (README)",{"title":1079,"icon":1080,"intro":1081,"items":1082},"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.",[1083,1086,1089,1090,1092,1095,1098,1101,1104,1107,1110,1113,1116,1119,1122,1125,1126],{"path":1084,"title":1085},"\u002Fdocs\u002Fcapabilities","All capabilities",{"path":1087,"title":1088},"\u002Fdocs\u002Fcapabilities\u002Fflows","Low-code flows",{"path":1023,"title":1024},{"path":1054,"title":1091},"Ask your data with AI",{"path":1093,"title":1094},"\u002Fdocs\u002Fcapabilities\u002Freports","Pixel-perfect reports",{"path":1096,"title":1097},"\u002Fdocs\u002Fcapabilities\u002Freport-functions","Report functions",{"path":1099,"title":1100},"\u002Fdocs\u002Fcapabilities\u002Fdashboards","Dashboards",{"path":1102,"title":1103},"\u002Fdocs\u002Fscripting","Python and R",{"path":1105,"title":1106},"\u002Fdocs\u002Fsql-scripts","SQL scripts",{"path":1108,"title":1109},"\u002Fdocs\u002Fcapabilities\u002Fnotebooks","marimo notebooks as apps",{"path":1111,"title":1112},"\u002Fdocs\u002Fcontainer-node","Docker images in flows",{"path":1114,"title":1115},"\u002Fdocs\u002Fcapabilities\u002Fflow-groups","Flow groups: orchestration",{"path":1117,"title":1118},"\u002Fdocs\u002Fcapabilities\u002Fscheduling","Scheduling",{"path":1120,"title":1121},"\u002Fdocs\u002Fpushmail","Pushmail: datasources, reports and dashboards by email",{"path":1123,"title":1124},"\u002Fdocs\u002Fplaceholders","Dynamic dates",{"path":293,"title":1029},{"path":1127,"title":1128},"\u002Fdocs\u002Fengines\u002Fengine-differences","Engine differences",{"title":1130,"icon":1131,"intro":1132,"items":1133},"Sources","sources","Every way data comes in: files, databases, buckets, SFTP folders, HTTP APIs, SharePoint, Google Sheets, and the results of your own flows.",[1134,1137,1140,1143,1146,1149,1152,1155,1158],{"path":1135,"title":1136},"\u002Fdocs\u002Fsources","All sources",{"path":1138,"title":1139},"\u002Fdocs\u002Fsources\u002Ffiles","Uploaded files",{"path":1141,"title":1142},"\u002Fdocs\u002Fsources\u002Fdatabases","Database tables and queries",{"path":1144,"title":1145},"\u002Fdocs\u002Fs3-datasource","S3 buckets",{"path":1147,"title":1148},"\u002Fdocs\u002Fsftp","SFTP folders",{"path":1150,"title":1151},"\u002Fdocs\u002Fapi-datasource","HTTP APIs",{"path":1153,"title":1154},"\u002Fdocs\u002Fsources\u002Fsharepoint","Excel on SharePoint",{"path":1156,"title":1157},"\u002Fdocs\u002Fsources\u002Fgoogle-sheets","Google Sheets",{"path":1159,"title":1160},"\u002Fdocs\u002Fsources\u002Fflow-outputs","Results of flows and scripts",{"title":1162,"icon":1163,"intro":1164,"items":1165},"Connections","connections","The systems Tabularia reads from and writes to, how each connection is set up, and who may use it.",[1166,1169,1172,1175,1178,1180,1181,1183,1184,1187,1190],{"path":1167,"title":1168},"\u002Fdocs\u002Fconnections","All connections",{"path":1170,"title":1171},"\u002Fdocs\u002Fconnections\u002Fdatabases","Databases",{"path":1173,"title":1174},"\u002Fdocs\u002Fsqlserver","Microsoft SQL Server driver",{"path":1176,"title":1177},"\u002Fdocs\u002Fconnections\u002Fs3","S3 and compatible storage",{"path":1147,"title":1179},"SFTP servers",{"path":1150,"title":1151},{"path":1153,"title":1182},"SharePoint",{"path":1156,"title":1157},{"path":1185,"title":1186},"\u002Fdocs\u002Fconnections\u002Fsmtp","SMTP email",{"path":1188,"title":1189},"\u002Fdocs\u002Fcontainer-registries","Container registries",{"path":1191,"title":1192},"\u002Fdocs\u002Fconnections\u002Fdestinations","Writing data out",{"title":1194,"icon":1195,"intro":1196,"items":1197},"Integrations","integrations","How Tabularia fits your stack: AI providers, the REST API and webhooks, dbt, OpenLineage, single sign-on, SIEM and monitoring.",[1198,1201,1203,1206,1209,1212,1215,1218],{"path":1199,"title":1200},"\u002Fdocs\u002Fintegrations","All integrations",{"path":124,"title":1202},"AI: where it is used",{"path":1204,"title":1205},"\u002Fdocs\u002Fapi","API, tokens and webhooks",{"path":1207,"title":1208},"\u002Fdocs\u002Fdbt-export","Export to dbt",{"path":1210,"title":1211},"\u002Fdocs\u002Fopenlineage","OpenLineage",{"path":1213,"title":1214},"\u002Fdocs\u002Fsso-keycloak","Single sign-on with Keycloak",{"path":1216,"title":1217},"\u002Fdocs\u002Fsiem-splunk","Audit log to Splunk",{"path":1219,"title":1220},"\u002Fdocs\u002Fintegrations\u002Fmonitoring","Monitoring",{"title":1222,"icon":1223,"intro":1224,"items":1225},"Security & governance","governance","Who may see and do what, what is recorded, and how data quality and personal data are kept in check.",[1226,1229,1231,1234,1237,1240,1243],{"path":1227,"title":1228},"\u002Fdocs\u002Fgovernance","Overview",{"path":1230,"title":888},"\u002Fdocs\u002Fgovernance\u002Fpermissions",{"path":1232,"title":1233},"\u002Fdocs\u002Fgovernance\u002Faudit-log","Audit log",{"path":1235,"title":1236},"\u002Fdocs\u002Fgovernance\u002Fdata-contracts","Data contracts",{"path":1238,"title":1239},"\u002Fdocs\u002Fdesign\u002Fsso-group-mapping","SSO and group mapping",{"path":1241,"title":1242},"\u002Fdocs\u002Fexamples\u002Fkeycloak","Keycloak example on a laptop",{"path":320,"title":1244},"A ClickHouse user for the AI assistant",{"title":1246,"icon":1247,"intro":1248,"items":1249},"Install & operate","operate","Run it in production on Kubernetes, configure it, upgrade it and keep it healthy.",[1250,1253,1256,1259,1262,1265,1268],{"path":1251,"title":1252},"\u002Fdocs\u002Fdeploy\u002Fkubernetes","Kubernetes and Helm",{"path":1254,"title":1255},"\u002Fdocs\u002Fdeploy\u002Fkind","A company-like cluster on one computer (kind)",{"path":1257,"title":1258},"\u002Fdocs\u002Fdeploy\u002Fupgrading","Upgrading, backups and restore",{"path":1260,"title":1261},"\u002Fdocs\u002Fdeploy\u002Frelease-checklist","Install and upgrade checklist",{"path":1263,"title":1264},"\u002Fdocs\u002Fconfiguration","Configuration reference",{"path":1266,"title":1267},"\u002Fdocs\u002Fengine-settings","Settings from the panel",{"path":1269,"title":1270},"\u002Fdocs\u002Fdatabase-migrations","Database migrations",{"title":1272,"icon":1273,"intro":1274,"items":1275},"Reference","reference","Release process and the remaining reference pages.",[1276],{"path":1277,"title":1278},"\u002Fdocs\u002Frelease-process","Release process",1793656371506]