[{"data":1,"prerenderedAt":1341},["ShallowReactive",2],{"doc:\u002Fdocs\u002Fconcepts":3,"docs-nav":1149},{"id":4,"title":5,"body":6,"description":16,"extension":1141,"meta":1142,"navigation":1144,"path":1145,"seo":1146,"stem":1147,"__hash__":1148},"docs\u002Fdocs\u002Fconcepts.md","Concepts",{"type":7,"value":8,"toc":1128},"minimark",[9,13,17,22,247,251,283,290,313,316,379,382,386,396,402,410,420,447,454,458,482,485,663,679,685,692,696,717,721,773,785,789,827,833,837,845,950,962,966,971,1060,1064,1082,1086,1124],[10,11,5],"h1",{"id":12},"concepts",[14,15,16],"p",{},"Tabularia is a workspace of folders that hold connections, datasources, flows, scripts\nand flow groups, with permissions set on the folders. This page is the mental model in\none place, for anyone arriving: what each object is, how they work together, who may do\nwhat, and which services run behind them. Every section points to the page that goes\ninto detail.",[18,19,21],"h2",{"id":20},"at-a-glance","At a glance",[23,24,25,44],"table",{},[26,27,28],"thead",{},[29,30,31,35,38,41],"tr",{},[32,33,34],"th",{},"Object",[32,36,37],{},"What it is",[32,39,40],{},"Lives in",[32,42,43],{},"More",[45,46,47,66,83,99,115,131,147,163,179,195,211,230],"tbody",{},[29,48,49,53,56,59],{},[50,51,52],"td",{},"Folder",[50,54,55],{},"A node of the workspace tree; carries the permissions",[50,57,58],{},"Explore",[50,60,61],{},[62,63,65],"a",{"href":64},"\u002Fdocs\u002Fgovernance\u002Fpermissions","Permissions",[29,67,68,71,74,77],{},[50,69,70],{},"Connection",[50,72,73],{},"The address and credentials of a database, SFTP server, S3 bucket, HTTP API, SharePoint site or SMTP server",[50,75,76],{},"a folder",[50,78,79],{},[62,80,82],{"href":81},"\u002Fdocs\u002Fconnections","Connections",[29,84,85,88,91,93],{},[50,86,87],{},"Datasource",[50,89,90],{},"A named table of the catalog: a parquet snapshot in the object storage",[50,92,76],{},[50,94,95],{},[62,96,98],{"href":97},"\u002Fdocs\u002Fsources","Sources",[29,100,101,104,107,109],{},[50,102,103],{},"Flow",[50,105,106],{},"A pipeline drawn on a canvas: source nodes, operations, Output nodes",[50,108,76],{},[50,110,111],{},[62,112,114],{"href":113},"\u002Fdocs\u002Fcapabilities\u002Fflows","Flows",[29,116,117,120,123,125],{},[50,118,119],{},"Saved view",[50,121,122],{},"A Viewer configuration (filters, pivots, charts) over a datasource; never the rows",[50,124,76],{},[50,126,127],{},[62,128,130],{"href":129},"\u002Fdocs\u002Fcapabilities\u002Fpreview-and-analysis","Preview and analysis",[29,132,133,136,139,141],{},[50,134,135],{},"Script",[50,137,138],{},"Python or R code with its versions, run on Kubernetes",[50,140,76],{},[50,142,143],{},[62,144,146],{"href":145},"\u002Fdocs\u002Fscripting","Python and R",[29,148,149,152,155,157],{},[50,150,151],{},"SQL script",[50,153,154],{},"SQL over the catalog or over a database connection",[50,156,76],{},[50,158,159],{},[62,160,162],{"href":161},"\u002Fdocs\u002Fsql-scripts","SQL scripts",[29,164,165,168,171,173],{},[50,166,167],{},"Report",[50,169,170],{},"A paginated, pixel-perfect document over datasets, with parameters: read on screen, downloaded as PDF or Excel, sent by email",[50,172,76],{},[50,174,175],{},[62,176,178],{"href":177},"\u002Fdocs\u002Fcapabilities\u002Freports","Reports",[29,180,181,184,187,189],{},[50,182,183],{},"Dashboard",[50,185,186],{},"A screen of live tiles on a grid, over datasets, with parameters: a click on a chart filters the others; downloaded as PDF or image, sent by email",[50,188,76],{},[50,190,191],{},[62,192,194],{"href":193},"\u002Fdocs\u002Fcapabilities\u002Fdashboards","Dashboards",[29,196,197,200,203,205],{},[50,198,199],{},"Flow group",[50,201,202],{},"Flows, refreshes, scripts, SQL scripts, images and emails in steps",[50,204,76],{},[50,206,207],{},[62,208,210],{"href":209},"\u002Fdocs\u002Fcapabilities\u002Fflow-groups","Flow groups",[29,212,213,216,219,227],{},[50,214,215],{},"Run",[50,217,218],{},"One execution, with its outcome, timings, engine and log",[50,220,221,222,226],{},"the ",[223,224,225],"strong",{},"Runs"," page",[50,228,229],{},"below",[29,231,232,235,238,243],{},[50,233,234],{},"User, group, service account",[50,236,237],{},"Who signs in or calls the API, and how they are grouped",[50,239,240],{},[223,241,242],{},"Administration",[50,244,245],{},[62,246,65],{"href":64},[18,248,250],{"id":249},"folders-and-permissions","Folders and permissions",[14,252,253,254,256,257,260,261,264,265,269,270,273,274,277,278,282],{},"Everything lives in a folder, and folders nest. ",[223,255,58],{}," shows the tree: a folder\nlists its subfolders, flows, datasources, views, connections, scripts, SQL scripts,\nnotebooks, reports, dashboards and flow groups.\nRoot folders are created by administrators; a subfolder by whoever has ",[223,258,259],{},"MANAGE"," on\nits parent. Every person also has a ",[223,262,263],{},"personal folder",", born with their account and\nnamed after their email (",[266,267,268],"code",{},"leonardtriv"," for ",[266,271,272],{},"leonardtriv@example.com","): first in Explore as\n",[223,275,276],{},"My folder",", seen only by them and the administrators\n(",[62,279,281],{"href":280},"\u002Fdocs\u002Fgovernance\u002Fpermissions#personal-folders","Personal folders",").",[14,284,285],{},[286,287],"img",{"alt":288,"src":289},"Explore inside the Sample folder: three subfolders, four saved views and two connections, each with its description and actions","\u002Fmedia\u002Fguide\u002Fexplore\u002Fexplore-sample-folder.png",[14,291,292],{},[293,294,295,297,298,301,302,304,305,308,309,312],"em",{},[223,296,58],{}," in the ",[266,299,300],{},"Sample"," folder: the subfolders ",[266,303,114],{},", ",[266,306,307],{},"Private tables"," and ",[266,310,311],{},"Public tables",", the saved views and the two connections, with a filter by kind at the top.",[14,314,315],{},"Permissions are granted on a folder, to a user or to a group, and hold for every folder\nbelow it. There are five:",[23,317,318,328],{},[26,319,320],{},[29,321,322,325],{},[32,323,324],{},"Permission",[32,326,327],{},"Allows",[45,329,330,340,350,360,369],{},[29,331,332,337],{},[50,333,334],{},[223,335,336],{},"VIEW",[50,338,339],{},"seeing the folder and opening what it holds, its connections excepted",[29,341,342,347],{},[50,343,344],{},[223,345,346],{},"RUN",[50,348,349],{},"VIEW, and running its flows, refreshes and flow groups",[29,351,352,357],{},[50,353,354],{},[223,355,356],{},"EDIT",[50,358,359],{},"RUN, and creating, changing, moving and deleting what it holds",[29,361,362,366],{},[50,363,364],{},[223,365,259],{},[50,367,368],{},"everything, including the folder's permissions and its subfolders",[29,370,371,376],{},[50,372,373],{},[223,374,375],{},"CONNECT",[50,377,378],{},"seeing, using and creating the folder's connections, and nothing else; MANAGE includes it",[14,380,381],{},"Grants only add: there are no deny rules. Administrators can do everything. Access to\ndata follows the same rules: a flow, a script or the AI assistant reads only the\ndatasources its user may see.",[18,383,385],{"id":384},"connections-and-datasources","Connections and datasources",[14,387,388,389,392,393,395],{},"A ",[223,390,391],{},"connection"," holds where a system is and how to sign in to it. Its secrets are\nencrypted at rest and never returned by the API. Creating, testing or reading through a\nconnection needs ",[223,394,375],{}," on its folder.",[14,397,398],{},[286,399],{"alt":400,"src":401},"The Connections page: the sample ERP on Postgres and CRM on ClickHouse, an SFTP server, an HTTP API, an SMTP server and an S3 bucket, each with type, host and folder","\u002Fmedia\u002Fguide\u002Fconnections\u002Fconnections-page.png",[14,403,404],{},[293,405,406,407,409],{},"The ",[223,408,82],{}," page lists every connection you can see, with its type, address and folder.",[14,411,388,412,415,416,419],{},[223,413,414],{},"datasource"," is the unit of data everyone else works with: a name in a folder, a\nschema, field descriptions and, when you want one, a data contract. Its rows are a\n",[223,417,418],{},"parquet snapshot"," in the object storage. A datasource is made by:",[421,422,423,434,441],"ul",{},[424,425,426,429,430,433],"li",{},[223,427,428],{},"«Datasource from a database»"," in Explore, which reads a table or a query through a\nconnection (databases, an SFTP or S3 folder, an HTTP API, SharePoint) and keeps the\nresult; a ",[223,431,432],{},"refresh"," reads the source again, by hand or on a schedule, and replaces\nthe snapshot (or appends by key, for the sources that support it);",[424,435,436,437,440],{},"an ",[223,438,439],{},"Output node"," of a flow that publishes its result as a datasource;",[424,442,443,444,446],{},"a ",[223,445,151],{}," that writes its result into a datasource.",[14,448,449,450,453],{},"Files can also be uploaded straight into a flow from the editor's toolbar\n(",[223,451,452],{},"«Upload file»","). Reading from a datasource never touches the source system: flows,\nthe Viewer and the assistant read the snapshot.",[18,455,457],{"id":456},"flows-engines-and-previews","Flows, engines and previews",[14,459,388,460,463,464,467,468,471,472,475,476,308,478,481],{},[223,461,462],{},"flow"," is a graph drawn in the editor: ",[223,465,466],{},"source"," nodes that read datasources,\n",[223,469,470],{},"operations"," (select, filter, join, group by, pivot, compute, SQL…) and ",[223,473,474],{},"Output","\nnodes that write the result: a datasource, a database table, a file on SFTP or S3, an\nemail. On Kubernetes, ",[223,477,135],{},[223,479,480],{},"Container"," nodes run your code and your images\nas steps of the same flow.",[14,483,484],{},"Saved, a flow is a declarative description, not code for one engine. At preview or run\ntime the gateway turns each Output's branch into a list of typed operations, for\nexample:",[486,487,492],"pre",{"className":488,"code":489,"language":490,"meta":491,"style":491},"language-json shiki shiki-themes github-dark-dimmed github-light","[\n  {\"type\": \"group_by\", \"params\": {\"by\": [\"codice\", \"nome\", \"categoria\"],\n    \"aggregations\": [{\"column\": \"ricavo_netto\", \"func\": \"sum\", \"alias\": \"ricavo\"}]}},\n  {\"type\": \"sort\", \"params\": {\"by\": \"ricavo\", \"descending\": true}},\n  {\"type\": \"limit\", \"params\": {\"n\": 20}}\n]\n","json","",[266,493,494,503,550,590,628,657],{"__ignoreMap":491},[495,496,499],"span",{"class":497,"line":498},"line",1,[495,500,502],{"class":501},"ssh_m","[\n",[495,504,506,509,513,516,520,522,525,528,531,534,537,539,542,544,547],{"class":497,"line":505},2,[495,507,508],{"class":501},"  {",[495,510,512],{"class":511},"sJK54","\"type\"",[495,514,515],{"class":501},": ",[495,517,519],{"class":518},"sXfbr","\"group_by\"",[495,521,304],{"class":501},[495,523,524],{"class":511},"\"params\"",[495,526,527],{"class":501},": {",[495,529,530],{"class":511},"\"by\"",[495,532,533],{"class":501},": [",[495,535,536],{"class":518},"\"codice\"",[495,538,304],{"class":501},[495,540,541],{"class":518},"\"nome\"",[495,543,304],{"class":501},[495,545,546],{"class":518},"\"categoria\"",[495,548,549],{"class":501},"],\n",[495,551,553,556,559,562,564,567,569,572,574,577,579,582,584,587],{"class":497,"line":552},3,[495,554,555],{"class":511},"    \"aggregations\"",[495,557,558],{"class":501},": [{",[495,560,561],{"class":511},"\"column\"",[495,563,515],{"class":501},[495,565,566],{"class":518},"\"ricavo_netto\"",[495,568,304],{"class":501},[495,570,571],{"class":511},"\"func\"",[495,573,515],{"class":501},[495,575,576],{"class":518},"\"sum\"",[495,578,304],{"class":501},[495,580,581],{"class":511},"\"alias\"",[495,583,515],{"class":501},[495,585,586],{"class":518},"\"ricavo\"",[495,588,589],{"class":501},"}]}},\n",[495,591,593,595,597,599,602,604,606,608,610,612,614,616,619,621,625],{"class":497,"line":592},4,[495,594,508],{"class":501},[495,596,512],{"class":511},[495,598,515],{"class":501},[495,600,601],{"class":518},"\"sort\"",[495,603,304],{"class":501},[495,605,524],{"class":511},[495,607,527],{"class":501},[495,609,530],{"class":511},[495,611,515],{"class":501},[495,613,586],{"class":518},[495,615,304],{"class":501},[495,617,618],{"class":511},"\"descending\"",[495,620,515],{"class":501},[495,622,624],{"class":623},"swcJU","true",[495,626,627],{"class":501},"}},\n",[495,629,631,633,635,637,640,642,644,646,649,651,654],{"class":497,"line":630},5,[495,632,508],{"class":501},[495,634,512],{"class":511},[495,636,515],{"class":501},[495,638,639],{"class":518},"\"limit\"",[495,641,304],{"class":501},[495,643,524],{"class":511},[495,645,527],{"class":501},[495,647,648],{"class":511},"\"n\"",[495,650,515],{"class":501},[495,652,653],{"class":623},"20",[495,655,656],{"class":501},"}}\n",[495,658,660],{"class":497,"line":659},6,[495,661,662],{"class":501},"]\n",[14,664,665,666,669,670,673,674,678],{},"and an ",[223,667,668],{},"engine"," executes it: Polars (the default), DuckDB or chDB inside the workers,\nor an external ClickHouse or Google BigQuery. A flow has a development engine, used by\nthe editor, and an optional production engine, used by schedules and ",[223,671,672],{},"«Run in\nproduction»",". The engines follow one data standard; the differences that remain are\nlisted in ",[62,675,677],{"href":676},"\u002Fdocs\u002Fengines\u002Fengine-differences","Engine differences",".",[14,680,388,681,684],{},[223,682,683],{},"preview"," is what you see when you click a node: the result of the flow up to that\nstep, computed on the whole dataset unless a development sample is set on the source\nnode (or the installation sets an automatic one). Previews run on workers of their own,\nso they never wait behind a run; a newer preview of the same step replaces one still\nrunning; the output of intermediate steps is cached up to a size cap, so changing the\nlast step usually does not recompute the first ones.",[14,686,687,688,308,690,678],{},"Every save that changes a flow keeps a version; an old version can be brought back.\nMore in ",[62,689,114],{"href":113},[62,691,130],{"href":129},[18,693,695],{"id":694},"runs-and-history","Runs and history",[14,697,388,698,701,702,705,706,709,710,712,713,716],{},[223,699,700],{},"run"," is one execution: of a flow, of a datasource refresh, of a SQL script, of a\nscript or of a flow group. It is queued, taken by a worker and closed as ",[266,703,704],{},"SUCCESS"," or\n",[266,707,708],{},"FAILURE",", with the engine it ran on, its timings, the rows it wrote and, when it failed,\nthe error. The ",[223,711,225],{}," page lists them, with who started each or whether a schedule\ndid; a run's result can be downloaded. The log a script or a\ncontainer printed is kept with the run for ",[266,714,715],{},"ORCHESTRATOR__LOG_RETENTION_DAYS"," days.",[18,718,720],{"id":719},"scripts-flow-groups-and-schedules","Scripts, flow groups and schedules",[421,722,723,731,738,751,759],{},[424,724,725,728,729,678],{},[223,726,727],{},"Python and R scripts"," run as Kubernetes Jobs in environments an administrator\ndefines; they are saved in folders with their versions, and run on their own, in a\nflow (Script node) or in a flow group. Kubernetes only: ",[62,730,146],{"href":145},[424,732,733,735,736,678],{},[223,734,162],{}," run SQL on the catalog's datasources, with the engine you choose, or\non a database through a connection, and can write a datasource:\n",[62,737,162],{"href":161},[424,739,388,740,743,744,748,749,678],{},[223,741,742],{},"flow group"," is a grid of steps: the cells of a step run in parallel (flows,\ndatasource refreshes, scripts, SQL scripts, container images, ",[62,745,747],{"href":746},"\u002Fdocs\u002Fpushmail","Pushmail","\nemails), the steps one after the other, and a failed step stops the group:\n",[62,750,210],{"href":209},[424,752,388,753,756,757,678],{},[223,754,755],{},"report"," is a page designed in millimetres over datasets, with parameters, read on\nscreen and downloaded as PDF or Excel; it has no schedule of its own: a flow group's\nPushmail cell sends it after the data is refreshed: ",[62,758,178],{"href":177},[424,760,388,761,764,765,768,769,678],{},[223,762,763],{},"schedule"," is a cron expression on a flow, a datasource refresh, a script, a SQL\nscript or a flow group, read in the installation's time zone (",[266,766,767],{},"APP__TIMEZONE","). A\nscheduled run acts with the permissions of the person who set the schedule:\n",[62,770,772],{"href":771},"\u002Fdocs\u002Fcapabilities\u002Fscheduling","Scheduling",[14,774,775,776,780,781,784],{},"Inputs and outputs can carry ",[62,777,779],{"href":778},"\u002Fdocs\u002Fplaceholders","dynamic dates"," such as\n",[266,782,783],{},"sales_{yesterday:yyyyMMdd}.csv",", resolved at every run.",[18,786,788],{"id":787},"users-groups-and-service-accounts","Users, groups and service accounts",[421,790,791,801,807,817],{},[424,792,793,796,797,282],{},[223,794,795],{},"Users"," sign in with an email and a password, or through single sign-on with an\nOIDC provider (",[62,798,800],{"href":799},"\u002Fdocs\u002Fsso-keycloak","Single sign-on with Keycloak",[424,802,803,806],{},[223,804,805],{},"Groups"," collect users; permissions granted to a group hold for its members. With\nSSO, groups can follow the identity provider's groups or roles.",[424,808,809,812,813,816],{},[223,810,811],{},"Administrators"," see and change everything, as a personal flag or as members of an\nadministrators group. ",[223,814,815],{},"Observers"," read the administration pages without changing\nanything.",[424,818,819,822,823,282],{},[223,820,821],{},"Service accounts"," are integrations, not people: they have no password, receive\npermissions like a user and call the API with tokens (",[62,824,826],{"href":825},"\u002Fdocs\u002Fapi","API",[14,828,829,830,678],{},"Every sign-in, change, run, export and permission change is written to the ",[223,831,832],{},"audit\nlog",[18,834,836],{"id":835},"architecture-in-brief","Architecture in brief",[486,838,843],{"className":839,"code":841,"language":842},[840],"language-text","                 Browser\n          pages │       │ API calls (HTTPS)\n                ▼       ▼\n Frontend (Nuxt)        Gateway (FastAPI) ──────── PostgreSQL\n                        sign-in, permissions,      users, folders, flows,\n                        audit, schedules, runs     runs, schedules, audit\n                             │ internal token\n                             ▼\n                        Engine API (FastAPI) ───── Valkey\n                             │                     queues, step-cache index,\n                             ▼                     preview slots, counters\n                        Celery workers\n                        «celery»: runs, imports, exports\n                        «preview»: previews\n                             │\n         ┌───────────────────┼──────────────────────┐\n         ▼                   ▼                      ▼\n   Object storage      External engines       Your databases, SFTP,\n   raw\u002F datasets\u002F      ClickHouse, BigQuery   S3, HTTP APIs, SMTP\n   cache\u002F out\u002F         (optional)\n","text",[266,844,841],{"__ignoreMap":491},[23,846,847,857],{},[26,848,849],{},[29,850,851,854],{},[32,852,853],{},"Component",[32,855,856],{},"Role",[45,858,859,867,882,890,898,906,918,942],{},[29,860,861,864],{},[50,862,863],{},"Frontend",[50,865,866],{},"The web interface. The browser calls the gateway directly.",[29,868,869,872],{},[50,870,871],{},"Gateway",[50,873,874,875,878,879,282],{},"The only entry point: sign-in, permissions, audit log, the metadata. Its ",[223,876,877],{},"orchestrator"," role fires the schedules and runs flows and flow groups; it can run as a separate process (",[266,880,881],{},"APP__ROLE",[29,883,884,887],{},[50,885,886],{},"PostgreSQL",[50,888,889],{},"The metadata: users, groups, folders, flows and their versions, connections, runs, schedules, the audit log.",[29,891,892,895],{},[50,893,894],{},"Engine API",[50,896,897],{},"Internal, reachable only by the gateway: turns every preview and run into a task for the workers.",[29,899,900,903],{},[50,901,902],{},"Valkey",[50,904,905],{},"The Celery broker, the index of the step cache, the preview slots, the counters behind the metrics. Any Redis-compatible server works.",[29,907,908,911],{},[50,909,910],{},"Workers",[50,912,913,914,917],{},"Celery processes on two queues, running the in-process engines and the clients of the external ones. ",[223,915,916],{},"Beat"," schedules the periodic housekeeping.",[29,919,920,923],{},[50,921,922],{},"Object storage",[50,924,925,926,929,930,933,934,937,938,941],{},"One S3-compatible bucket (MinIO, AWS S3, Google Cloud Storage…): ",[266,927,928],{},"raw\u002F"," uploads, ",[266,931,932],{},"datasets\u002F"," snapshots, ",[266,935,936],{},"cache\u002F"," steps, ",[266,939,940],{},"out\u002F"," results.",[29,943,944,947],{},[50,945,946],{},"Kubernetes Jobs",[50,948,949],{},"On Kubernetes, scripts and container images run as Jobs in namespaces of their own, with limits and network policies.",[14,951,952,953,957,958,678],{},"The interactive diagrams: ",[62,954,956],{"href":955},"\u002Farchitecture\u002Fruntime-architecture.html","runtime architecture","\nand ",[62,959,961],{"href":960},"\u002Farchitecture\u002Fmetadata-schema.html","metadata database schema",[18,963,965],{"id":964},"example-from-a-database-table-to-a-daily-report","Example: from a database table to a daily report",[14,967,406,968,970],{},[266,969,300],{}," folder of the development stack, step by step:",[972,973,974,983,1008,1023,1032,1045],"ol",{},[424,975,976,979,980,982],{},[223,977,978],{},"A connection."," ",[266,981,300],{}," holds the connection «Sample ERP (Postgres)» to the\norder system.",[424,984,985,988,989,992,993,996,997,1000,1001,996,1004,1007],{},[223,986,987],{},"Datasources."," In ",[266,990,991],{},"Sample \u002F Private tables",", the datasources ",[266,994,995],{},"order_rows"," and\n",[266,998,999],{},"products"," are snapshots of the tables ",[266,1002,1003],{},"vendite.righe_ordine",[266,1005,1006],{},"catalogo.prodotti",", read through that connection.",[424,1009,1010,988,1013,1016,1017,1019,1020,1022],{},[223,1011,1012],{},"A flow.",[266,1014,1015],{},"Sample \u002F Flows",", «Top 20 Products by Revenue» reads ",[266,1018,995],{},",\ncomputes the net revenue of each line, joins ",[266,1021,999],{},", groups by product, sorts by\nrevenue and keeps 20 rows. Clicking any node previews its result.",[424,1024,1025,1028,1029,1031],{},[223,1026,1027],{},"An output."," Its Output node publishes the datasource «Top 20 Products by Revenue»\nin ",[266,1030,991],{},", which the Viewer, the assistant and other flows can read.",[424,1033,1034,1037,1038,1041,1042,1044],{},[223,1035,1036],{},"A schedule."," The flow runs at ",[266,1039,1040],{},"30 5 * * *",", every day at 05:30, on its production\nengine; each run appears on the ",[223,1043,225],{}," page.",[424,1046,1047,1050,1051,1053,1054,1056,1057,1059],{},[223,1048,1049],{},"Permissions."," A sales team given ",[223,1052,336],{}," on ",[266,1055,991],{}," reads the\nreport; nobody in it needs ",[223,1058,375],{}," on the ERP connection, because the report reads\nthe snapshot, not the database.",[18,1061,1063],{"id":1062},"good-to-know","Good to know",[421,1065,1066,1069,1072,1075],{},[424,1067,1068],{},"Python and R scripts, Script and Container nodes need Kubernetes; on Docker Compose\nthey are greyed out with the reason. SQL scripts work everywhere.",[424,1070,1071],{},"A datasource is a snapshot: it is as fresh as its last refresh or publish.",[424,1073,1074],{},"An administrator decides which engines may be chosen; the external ones exist only\nonce configured.",[424,1076,1077,1078,282],{},"Docker Compose is for trying Tabularia; production runs on Kubernetes with the Helm\nchart (",[62,1079,1081],{"href":1080},"\u002Fdocs\u002Fdeploy\u002Fkubernetes","Kubernetes and Helm",[18,1083,1085],{"id":1084},"related","Related",[421,1087,1088,1094,1100,1104,1108,1114,1118],{},[424,1089,1090],{},[62,1091,1093],{"href":1092},"\u002Fdocs\u002Fgetting-started-docker-compose","Getting started with Docker Compose",[424,1095,1096],{},[62,1097,1099],{"href":1098},"\u002Fdocs\u002Fcapabilities","Capabilities",[424,1101,1102],{},[62,1103,98],{"href":97},[424,1105,1106],{},[62,1107,82],{"href":81},[424,1109,1110],{},[62,1111,1113],{"href":1112},"\u002Fdocs\u002Fintegrations","Integrations",[424,1115,1116],{},[62,1117,65],{"href":64},[424,1119,1120],{},[62,1121,1123],{"href":1122},"\u002Fdocs\u002Fconfiguration","Configuration reference",[1125,1126,1127],"style",{},"html pre.shiki code .ssh_m, html code.shiki .ssh_m{--shiki-default:#ADBAC7;--shiki-light:#24292E}html pre.shiki code .sJK54, html code.shiki .sJK54{--shiki-default:#8DDB8C;--shiki-light:#005CC5}html pre.shiki code .sXfbr, html code.shiki .sXfbr{--shiki-default:#96D0FF;--shiki-light:#032F62}html pre.shiki code .swcJU, html code.shiki .swcJU{--shiki-default:#6CB6FF;--shiki-light:#005CC5}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":491,"searchDepth":505,"depth":552,"links":1129},[1130,1131,1132,1133,1134,1135,1136,1137,1138,1139,1140],{"id":20,"depth":505,"text":21},{"id":249,"depth":505,"text":250},{"id":384,"depth":505,"text":385},{"id":456,"depth":505,"text":457},{"id":694,"depth":505,"text":695},{"id":719,"depth":505,"text":720},{"id":787,"depth":505,"text":788},{"id":835,"depth":505,"text":836},{"id":964,"depth":505,"text":965},{"id":1062,"depth":505,"text":1063},{"id":1084,"depth":505,"text":1085},"md",{"source":1143},"docs\u002Fconcepts.md",true,"\u002Fdocs\u002Fconcepts",{"title":5,"description":16},"docs\u002Fconcepts","4hRKOh-xeetK7NPj0IxRLFjahxfgQbZTcMWdUCsRcx4",[1150,1166,1203,1233,1263,1287,1311,1333],{"title":1151,"icon":1152,"intro":1153,"items":1154},"Getting started","start","Install it on one machine, learn the few ideas everything else is built on, and run a first flow.",[1155,1157,1159,1162,1163],{"path":1156,"title":1151},"\u002Fdocs\u002Fgetting-started",{"path":1092,"title":1158},"Walkthrough with Docker Compose",{"path":1160,"title":1161},"\u002Fdocs\u002Fdeploy\u002Fminikube","Try it on your computer (minikube)",{"path":1145,"title":5},{"path":1164,"title":1165},"\u002Fdocs\u002Foverview","Overview (README)",{"title":1099,"icon":1167,"intro":1168,"items":1169},"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.",[1170,1172,1174,1175,1178,1180,1183,1184,1185,1186,1189,1192,1194,1195,1197,1199,1202],{"path":1098,"title":1171},"All capabilities",{"path":113,"title":1173},"Low-code flows",{"path":129,"title":130},{"path":1176,"title":1177},"\u002Fdocs\u002Fcapabilities\u002Fask-your-data","Ask your data with AI",{"path":177,"title":1179},"Pixel-perfect reports",{"path":1181,"title":1182},"\u002Fdocs\u002Fcapabilities\u002Freport-functions","Report functions",{"path":193,"title":194},{"path":145,"title":146},{"path":161,"title":162},{"path":1187,"title":1188},"\u002Fdocs\u002Fcapabilities\u002Fnotebooks","marimo notebooks as apps",{"path":1190,"title":1191},"\u002Fdocs\u002Fcontainer-node","Docker images in flows",{"path":209,"title":1193},"Flow groups: orchestration",{"path":771,"title":772},{"path":746,"title":1196},"Pushmail: datasources, reports and dashboards by email",{"path":778,"title":1198},"Dynamic dates",{"path":1200,"title":1201},"\u002Fdocs\u002Fcapabilities\u002Fengines","Engines",{"path":676,"title":677},{"title":98,"icon":1204,"intro":1205,"items":1206},"sources","Every way data comes in: files, databases, buckets, SFTP folders, HTTP APIs, SharePoint, Google Sheets, and the results of your own flows.",[1207,1209,1212,1215,1218,1221,1224,1227,1230],{"path":97,"title":1208},"All sources",{"path":1210,"title":1211},"\u002Fdocs\u002Fsources\u002Ffiles","Uploaded files",{"path":1213,"title":1214},"\u002Fdocs\u002Fsources\u002Fdatabases","Database tables and queries",{"path":1216,"title":1217},"\u002Fdocs\u002Fs3-datasource","S3 buckets",{"path":1219,"title":1220},"\u002Fdocs\u002Fsftp","SFTP folders",{"path":1222,"title":1223},"\u002Fdocs\u002Fapi-datasource","HTTP APIs",{"path":1225,"title":1226},"\u002Fdocs\u002Fsources\u002Fsharepoint","Excel on SharePoint",{"path":1228,"title":1229},"\u002Fdocs\u002Fsources\u002Fgoogle-sheets","Google Sheets",{"path":1231,"title":1232},"\u002Fdocs\u002Fsources\u002Fflow-outputs","Results of flows and scripts",{"title":82,"icon":1234,"intro":1235,"items":1236},"connections","The systems Tabularia reads from and writes to, how each connection is set up, and who may use it.",[1237,1239,1242,1245,1248,1250,1251,1253,1254,1257,1260],{"path":81,"title":1238},"All connections",{"path":1240,"title":1241},"\u002Fdocs\u002Fconnections\u002Fdatabases","Databases",{"path":1243,"title":1244},"\u002Fdocs\u002Fsqlserver","Microsoft SQL Server driver",{"path":1246,"title":1247},"\u002Fdocs\u002Fconnections\u002Fs3","S3 and compatible storage",{"path":1219,"title":1249},"SFTP servers",{"path":1222,"title":1223},{"path":1225,"title":1252},"SharePoint",{"path":1228,"title":1229},{"path":1255,"title":1256},"\u002Fdocs\u002Fconnections\u002Fsmtp","SMTP email",{"path":1258,"title":1259},"\u002Fdocs\u002Fcontainer-registries","Container registries",{"path":1261,"title":1262},"\u002Fdocs\u002Fconnections\u002Fdestinations","Writing data out",{"title":1113,"icon":1264,"intro":1265,"items":1266},"integrations","How Tabularia fits your stack: AI providers, the REST API and webhooks, dbt, OpenLineage, single sign-on, SIEM and monitoring.",[1267,1269,1272,1274,1277,1280,1281,1284],{"path":1112,"title":1268},"All integrations",{"path":1270,"title":1271},"\u002Fdocs\u002Fintegrations\u002Fai","AI: where it is used",{"path":825,"title":1273},"API, tokens and webhooks",{"path":1275,"title":1276},"\u002Fdocs\u002Fdbt-export","Export to dbt",{"path":1278,"title":1279},"\u002Fdocs\u002Fopenlineage","OpenLineage",{"path":799,"title":800},{"path":1282,"title":1283},"\u002Fdocs\u002Fsiem-splunk","Audit log to Splunk",{"path":1285,"title":1286},"\u002Fdocs\u002Fintegrations\u002Fmonitoring","Monitoring",{"title":1288,"icon":1289,"intro":1290,"items":1291},"Security & governance","governance","Who may see and do what, what is recorded, and how data quality and personal data are kept in check.",[1292,1295,1296,1299,1302,1305,1308],{"path":1293,"title":1294},"\u002Fdocs\u002Fgovernance","Overview",{"path":64,"title":65},{"path":1297,"title":1298},"\u002Fdocs\u002Fgovernance\u002Faudit-log","Audit log",{"path":1300,"title":1301},"\u002Fdocs\u002Fgovernance\u002Fdata-contracts","Data contracts",{"path":1303,"title":1304},"\u002Fdocs\u002Fdesign\u002Fsso-group-mapping","SSO and group mapping",{"path":1306,"title":1307},"\u002Fdocs\u002Fexamples\u002Fkeycloak","Keycloak example on a laptop",{"path":1309,"title":1310},"\u002Fdocs\u002Fengines\u002Fclickhouse-ai-user","A ClickHouse user for the AI assistant",{"title":1312,"icon":1313,"intro":1314,"items":1315},"Install & operate","operate","Run it in production on Kubernetes, configure it, upgrade it and keep it healthy.",[1316,1317,1320,1323,1326,1327,1330],{"path":1080,"title":1081},{"path":1318,"title":1319},"\u002Fdocs\u002Fdeploy\u002Fkind","A company-like cluster on one computer (kind)",{"path":1321,"title":1322},"\u002Fdocs\u002Fdeploy\u002Fupgrading","Upgrading, backups and restore",{"path":1324,"title":1325},"\u002Fdocs\u002Fdeploy\u002Frelease-checklist","Install and upgrade checklist",{"path":1122,"title":1123},{"path":1328,"title":1329},"\u002Fdocs\u002Fengine-settings","Settings from the panel",{"path":1331,"title":1332},"\u002Fdocs\u002Fdatabase-migrations","Database migrations",{"title":1334,"icon":1335,"intro":1336,"items":1337},"Reference","reference","Release process and the remaining reference pages.",[1338],{"path":1339,"title":1340},"\u002Fdocs\u002Frelease-process","Release process",1793656371460]