[{"data":1,"prerenderedAt":2166},["ShallowReactive",2],{"doc:\u002Fdocs\u002Fcapabilities\u002Fflows":3,"docs-nav":1961},{"id":4,"title":5,"body":6,"description":16,"extension":1953,"meta":1954,"navigation":1956,"path":1957,"seo":1958,"stem":1959,"__hash__":1960},"docs\u002Fdocs\u002Fcapabilities\u002Fflows.md","Flows: low-code data preparation",{"type":7,"value":8,"toc":1930},"minimark",[9,13,17,24,43,48,141,145,148,265,275,281,286,290,297,302,390,394,502,506,595,599,675,678,729,743,747,751,775,779,784,789,808,822,826,844,855,859,862,866,877,1069,1077,1083,1091,1101,1105,1111,1751,1754,1757,1764,1840,1843,1847,1889,1893,1926],[10,11,5],"h1",{"id":12},"flows-low-code-data-preparation",[14,15,16],"p",{},"A flow is a data pipeline drawn on a canvas: sources on the left, transformations in the\nmiddle, outputs on the right, each step a node you configure in a form instead of\nwriting code. Every node shows the data it produces as soon as you click it, computed on\nthe whole table by the engine the flow runs on. A saved flow keeps its versions, runs by\nhand or on a schedule, and publishes its result as a datasource, a database table, a file\nor an email.",[14,18,19],{},[20,21],"img",{"alt":22,"src":23},"Building a flow in the editor: a source, a filter, a group by and a sort, each previewed as it is added","\u002Fmedia\u002Fguide\u002Fflows\u002Fbuild-a-flow.gif",[14,25,26],{},[27,28,29,30,34,35,38,39,42],"em",{},"A flow built on the sample ",[31,32,33],"code",{},"orders",": the source, a Filter on ",[31,36,37],{},"stato",", a Group by on ",[31,40,41],{},"canale"," with a count, a Sort. Each node shows its rows as soon as it is set.",[44,45,47],"h2",{"id":46},"at-a-glance","At a glance",[49,50,51,62],"table",{},[52,53,54],"thead",{},[55,56,57,60],"tr",{},[58,59],"th",{},[58,61],{},[63,64,65,97,109,117,130],"tbody",{},[55,66,67,71],{},[68,69,70],"td",{},"Where",[68,72,73,77,78,81,82,85,86,89,90,92,93,96],{},[74,75,76],"strong",{},"Explore"," → a folder → ",[74,79,80],{},"New"," → ",[74,83,84],{},"New flow",", or the ",[74,87,88],{},"Flows"," tab → ",[74,91,84],{},". Both ask for the ",[74,94,95],{},"Execution engine"," first.",[55,98,99,102],{},[68,100,101],{},"What a flow holds",[68,103,104,105,108],{},"Source nodes, transformations (19 operations plus the ",[74,106,107],{},"Foreach loop","), Script and Container nodes, Output nodes, notes",[55,110,111,114],{},[68,112,113],{},"What you see",[68,115,116],{},"The selected node's first 100 rows as a table, or a chart computed on all its rows",[55,118,119,122],{},[68,120,121],{},"Engines",[68,123,124,125,129],{},"Polars, DuckDB, chDB, ClickHouse (external), BigQuery: one for the editor, optionally another for production (",[126,127,121],"a",{"href":128},"\u002Fdocs\u002Fcapabilities\u002Fengines",")",[55,131,132,135],{},[68,133,134],{},"Permissions",[68,136,137,138,129],{},"VIEW to open, EDIT to save, RUN to run; publishing and connections need more (",[126,139,134],{"href":140},"#permissions",[44,142,144],{"id":143},"the-editor","The editor",[14,146,147],{},"The editor has five areas:",[149,150,151,187,205,220,238],"ul",{},[152,153,154,157,158,161,162,165,166,169,170,165,172,175,176,179,180,175,183,186],"li",{},[74,155,156],{},"The palette",", on the left, with a search box. Its groups are ",[74,159,160],{},"Sources",",\n",[74,163,164],{},"Transforms",", ",[74,167,168],{},"Control"," (the ",[74,171,107],{},[74,173,174],{},"Script"," and ",[74,177,178],{},"Container","),\n",[74,181,182],{},"Output",[74,184,185],{},"Notes",". Drag an item onto the canvas to create the node.",[152,188,189,192,193,196,197,200,201,204],{},[74,190,191],{},"The canvas",", where you connect nodes by dragging from the handle on a node's right\nto the handle on the next one's left. A connection is removed with a click on it or\nfrom the keyboard. ",[74,194,195],{},"Arrange the flow"," lays the nodes out, ",[74,198,199],{},"Undo (Ctrl+Z)"," and\n",[74,202,203],{},"Redo (Ctrl+Shift+Z)"," step through your changes, and a minimap helps on large flows.",[152,206,207,210,211,214,215,219],{},[74,208,209],{},"The panel",", on the right, with the selected node's settings. Column pickers list the\ncolumns that reach the node, so a filter or a group-by is chosen, not typed. When an\nAI model is configured, a second tab, ",[74,212,213],{},"Assistant",", builds the flow with you\n(",[126,216,218],{"href":217},"\u002Fdocs\u002Fintegrations\u002Fai","AI in Tabularia",").",[152,221,222,225,226,229,230,233,234,219],{},[74,223,224],{},"The data view",", at the bottom, with a ",[74,227,228],{},"Table"," tab and a ",[74,231,232],{},"Chart"," tab for the\nselected node (",[126,235,237],{"href":236},"\u002Fdocs\u002Fcapabilities\u002Fpreview-and-analysis","Preview and analysis",[152,239,240,243,244,247,248,251,252,165,255,165,258,200,261,264],{},[74,241,242],{},"The toolbar",": the flow's name and folder, ",[74,245,246],{},"Save"," (Ctrl+S, with an ",[74,249,250],{},"Unsaved","\nmarker while there are changes), ",[74,253,254],{},"Upload file",[74,256,257],{},"Source",[74,259,260],{},"Operation",[74,262,263],{},"Run",".",[14,266,267,268,175,271,274],{},"Nodes that need a second input, ",[74,269,270],{},"Join",[74,272,273],{},"Union (append rows)",", have two handles\non their left: the top one takes the previous step (the left table), the bottom one the\nbranch to join or append (the right table). The right branch can be transformed before\nit arrives, like any chain.",[14,276,277],{},[20,278],{"alt":279,"src":280},"The flow editor with the sample flow Margin by Category and Month: the palette on the left, five chains joined on the canvas, the Join node's settings on the right and its rows below","\u002Fmedia\u002Fguide\u002Fflows\u002Fflow-editor-margin.png",[14,282,283],{},[27,284,285],{},"The sample flow «Margin by Category and Month» in the editor: the palette, the canvas with five source chains, the selected Join's settings in the panel and its first rows in the data view.",[44,287,289],{"id":288},"the-node-catalogue","The node catalogue",[14,291,292,293,264],{},"Every transformation below is part of the flow's declarative definition and runs on\nevery engine, with the exceptions listed in ",[126,294,296],{"href":295},"\u002Fdocs\u002Fengines\u002Fengine-differences","Engine differences",[298,299,301],"h3",{"id":300},"sources-and-outputs","Sources and outputs",[49,303,304,314],{},[52,305,306],{},[55,307,308,311],{},[58,309,310],{},"Node",[58,312,313],{},"What it does",[63,315,316,345,380],{},[55,317,318,322],{},[68,319,320],{},[74,321,257],{},[68,323,324,325,328,329,332,333,336,337,340,341,344],{},"Reads a datasource of the catalogue (an uploaded file, a database table or query, an SFTP or S3 folder, a SharePoint file, an HTTP API call: see ",[126,326,160],{"href":327},"\u002Fdocs\u002Fsources","), or a file uploaded from the toolbar. It can carry ",[74,330,331],{},"Upstream filters",", AND-ed conditions applied right after the read in development and in production, and a ",[74,334,335],{},"Development sample"," (",[74,338,339],{},"first N rows"," or ",[74,342,343],{},"random %",") that only previews and editor runs use.",[55,346,347,352],{},[68,348,349],{},[74,350,351],{},"Output (datasource \u002F database)",[68,353,354,355,358,359,165,362,365,366,165,369,340,372,375,376,264],{},"Writes the result of the chain. ",[74,356,357],{},"Destination",": ",[74,360,361],{},"Tabularia Datasource",[74,363,364],{},"Database table"," (append or replace, optional post-insert SQL), ",[74,367,368],{},"File on S3 \u002F object storage",[74,370,371],{},"SFTP server (file)",[74,373,374],{},"Email with attachment",". See ",[126,377,379],{"href":378},"\u002Fdocs\u002Fconnections\u002Fdestinations","Destinations",[55,381,382,387],{},[68,383,384],{},[74,385,386],{},"Note",[68,388,389],{},"An annotation on the canvas. It is not part of the flow and never runs.",[298,391,393],{"id":392},"columns","Columns",[49,395,396,404],{},[52,397,398],{},[55,399,400,402],{},[58,401,310],{},[58,403,313],{},[63,405,406,416,426,436,446,456,477],{},[55,407,408,413],{},[68,409,410],{},[74,411,412],{},"Select columns",[68,414,415],{},"Keeps the listed columns, in that order.",[55,417,418,423],{},[68,419,420],{},[74,421,422],{},"Reorder columns",[68,424,425],{},"Puts the listed columns first, in the order you drag them; the others follow.",[55,427,428,433],{},[68,429,430],{},[74,431,432],{},"Drop columns",[68,434,435],{},"Removes the listed columns.",[55,437,438,443],{},[68,439,440],{},[74,441,442],{},"Rename",[68,444,445],{},"Renames columns.",[55,447,448,453],{},[68,449,450],{},[74,451,452],{},"Change type",[68,454,455],{},"Converts columns to integer, decimal, text, boolean, date or datetime. A value that cannot be converted becomes null, never an error; a number converted to an integer is truncated.",[55,457,458,463],{},[68,459,460],{},[74,461,462],{},"Computed column",[68,464,465,466,165,469,472,473,476],{},"Adds or overwrites columns from SQL expressions in the engine's dialect (",[31,467,468],{},"quantita * prezzo_unitario",[31,470,471],{},"CASE WHEN … END",", window functions with ",[31,474,475],{},"OVER","). The columns are computed in order, so one can use the previous ones.",[55,478,479,484],{},[68,480,481],{},[74,482,483],{},"Execute SQL",[68,485,486,487,490,491,494,495,498,499,264],{},"A whole ",[31,488,489],{},"SELECT"," over the node's input, named ",[31,492,493],{},"self"," (or ",[31,496,497],{},"input","). It may read its input and nothing else: any other table, table function or file is refused before it runs. Its preview starts only when you press ",[74,500,501],{},"Preview",[298,503,505],{"id":504},"rows","Rows",[49,507,508,516],{},[52,509,510],{},[55,511,512,514],{},[58,513,310],{},[58,515,313],{},[63,517,518,532,542,552,565,575,585],{},[55,519,520,525],{},[68,521,522],{},[74,523,524],{},"Filter",[68,526,527,528,531],{},"Keeps the rows that match one condition: equals, not equal to, greater\u002Fless (or equal) than, is one of, is not one of, between, contains, starts with, ends with, is null, is not null. Dates get a calendar; ",[74,529,530],{},"is one of"," offers the column's distinct values.",[55,533,534,539],{},[68,535,536],{},[74,537,538],{},"Sort",[68,540,541],{},"Sorts on one or more columns, each ascending or descending; nulls always go last.",[55,543,544,549],{},[68,545,546],{},[74,547,548],{},"Limit rows",[68,550,551],{},"Keeps the first N rows.",[55,553,554,559],{},[68,555,556],{},[74,557,558],{},"Unique rows",[68,560,561,562,564],{},"Removes duplicates, on all columns or on the ones you list, keeping one row per group. Put a ",[74,563,538],{}," before it when it matters which one.",[55,566,567,572],{},[68,568,569],{},[74,570,571],{},"Sample rows",[68,573,574],{},"Keeps a fraction of the rows, chosen by a hash of their content: the same rows at every preview.",[55,576,577,582],{},[68,578,579],{},[74,580,581],{},"Fill nulls",[68,583,584],{},"Replaces nulls with a value, column by column.",[55,586,587,592],{},[68,588,589],{},[74,590,591],{},"Drop nulls",[68,593,594],{},"Removes the rows with a null in any column, or in the ones you list.",[298,596,598],{"id":597},"combining-and-reshaping","Combining and reshaping",[49,600,601,609],{},[52,602,603],{},[55,604,605,607],{},[58,606,310],{},[58,608,313],{},[63,610,611,621,638,655,665],{},[55,612,613,618],{},[68,614,615],{},[74,616,617],{},"Group by",[68,619,620],{},"Groups on columns and computes aggregations: sum, average, minimum, maximum, count, median, std deviation, variance, first, last, distinct count. Nulls are ignored, as in SQL.",[55,622,623,627],{},[68,624,625],{},[74,626,270],{},[68,628,629,630,633,634,637],{},"Joins the right branch: inner, left, right, full, semi, anti or cross. Keys with the same name on both sides become one column; a non-key column present on both sides gets the ",[31,631,632],{},"_right"," suffix. A cross join that would exceed ",[31,635,636],{},"ENGINE_MAX_CROSS_JOIN_ROWS"," (50 million by default) is refused.",[55,639,640,644],{},[68,641,642],{},[74,643,273],{},[68,645,646,647,650,651,654],{},"Appends the right branch's rows: ",[74,648,649],{},"align by name"," (missing columns become null) or ",[74,652,653],{},"require identical schemas",". Chain several unions to append more sources.",[55,656,657,662],{},[68,658,659],{},[74,660,661],{},"Pivot (rows→columns)",[68,663,664],{},"Turns the values of a column into columns, aggregated with one function. Column names are the values as text; at most 500 new columns.",[55,666,667,672],{},[68,668,669],{},[74,670,671],{},"Unpivot (columns→rows)",[68,673,674],{},"Turns columns into a label column and a value column.",[298,676,168],{"id":677},"control",[49,679,680,688],{},[52,681,682],{},[55,683,684,686],{},[58,685,310],{},[58,687,313],{},[63,689,690,703,716],{},[55,691,692,696],{},[68,693,694],{},[74,695,107],{},[68,697,698,699,702],{},"Runs the operations placed inside it once per row of a driver table (or per item of a static list), with ",[31,700,701],{},"{{column}}"," placeholders in their parameters, and appends the results. At most 1,000 iterations per loop and 100,000 in all. Not available on chDB, ClickHouse and BigQuery.",[55,704,705,709],{},[68,706,707],{},[74,708,174],{},[68,710,711,712,219],{},"Runs Python or R code as a Kubernetes Job in an environment an administrator defines (",[126,713,715],{"href":714},"\u002Fdocs\u002Fscripting","Python and R",[55,717,718,722],{},[68,719,720],{},[74,721,178],{},[68,723,724,725,219],{},"Runs an image from a registry an administrator grants (",[126,726,728],{"href":727},"\u002Fdocs\u002Fcontainer-node","Docker images in flows",[14,730,731,732,175,735,738,739,264],{},"Script and Container need Kubernetes: on a Docker Compose installation they appear\ngreyed out with the reason. Flows saved before flow groups existed may still hold\n",[74,733,734],{},"Refresh datasource",[74,736,737],{},"Run flow"," nodes: they keep running, but are no longer\noffered; ordering refreshes and flows is the job of a ",[126,740,742],{"href":741},"\u002Fdocs\u002Fcapabilities\u002Fflow-groups","flow group",[44,744,746],{"id":745},"how-it-works","How it works",[298,748,750],{"id":749},"the-definition-is-declarative","The definition is declarative",[14,752,753,754,757,758,761,762,765,766,769,770,774],{},"A flow is stored as JSON: the nodes and the edges of the canvas. To preview a node or\nrun an output, the chain that leads to it is turned into a ",[74,755,756],{},"list of typed operations",",\neach a ",[31,759,760],{},"type"," and its ",[31,763,764],{},"params","; the right branch of a join becomes a sub-flow (a source\nplus its own operations). Nothing in that list is code to evaluate: each engine\ntranslates the same operations into its own plan, which is why a flow designed on one\nengine can run on another. The same list is what the API accepts on\n",[31,767,768],{},"POST \u002Ftasks\u002Fpreview",", and what the ",[126,771,773],{"href":772},"\u002Fdocs\u002Fdbt-export","dbt export"," turns into models.",[298,776,778],{"id":777},"previews-cache-and-runs","Previews, cache and runs",[14,780,781,782,264],{},"Clicking a node previews it: the chain up to that node runs on the whole input (or on\nthe development sample, if the source has one) and the first 100 rows come back with\nthe schema. The node then shows the rows and columns of that preview («100+ rows» when\nthere are more). Repeated previews reuse a\nper-step cache, and clicking quickly through the nodes cancels the previews you left\nbehind: see ",[126,783,237],{"href":236},[14,785,786,788],{},[74,787,263],{}," works on the whole data:",[149,790,791,798],{},[152,792,793,794,797],{},"with Output nodes, it starts ",[74,795,796],{},"one run per output",", each recorded in the run history\nwith its engine, its rows and its outcome (the flow must be saved first);",[152,799,800,801,803,804,807],{},"without Output nodes, it opens ",[74,802,737],{},", where ",[74,805,806],{},"Publish the output as a\ndatasource"," names a datasource and a folder for the result of the last node.",[14,809,810,811,814,815,817,818,264],{},"Scheduled runs and ",[74,812,813],{},"Run in production"," (the run button on the flow's card in the\n",[74,816,88],{}," tab, «Run now with the production engine») use the flow's production engine,\nnever the development sample. See ",[126,819,821],{"href":820},"\u002Fdocs\u002Fcapabilities\u002Fscheduling","Scheduling",[298,823,825],{"id":824},"versions-copies-and-names","Versions, copies and names",[14,827,828,829,831,832,835,836,839,840,843],{},"Every save that changes the canvas records a version, with who saved it. In the\n",[74,830,88],{}," tab, a flow's card lists its ",[74,833,834],{},"Versions","; ",[74,837,838],{},"Promote"," makes an old one the\ncurrent definition again, recorded as a new version («promoted from vN»). The latest\n",[31,841,842],{},"ORCHESTRATOR__VERSIONS_KEPT"," versions are kept per flow (50 by default); the current\none always stays.",[14,845,846,847,165,849,175,851,854],{},"In ",[74,848,76],{},[74,850,442],{},[74,852,853],{},"Duplicate"," act on a flow like on any object. A\nduplicate is created in the same folder as «name (1)», without the schedule; its Output\nnodes still write where the original writes, so give them a new name and path before\nrunning it.",[298,856,858],{"id":857},"someone-else-has-it-open","Someone else has it open",[14,860,861],{},"When another person has the same flow open, the editor says so above the canvas:\n«Also open by …, the last one to save overwrites the other». There is no merge: agree\nwho saves.",[44,863,865],{"id":864},"example-revenue-by-region-and-channel-on-the-sample-data","Example: revenue by region and channel, on the sample data",[14,867,868,869,872,873,876],{},"The sample databases of the Compose stack (a cured-meats company: orders on Postgres,\ncustomers on ClickHouse) are imported into ",[74,870,871],{},"Sample \u002F Private tables",". This flow\ncomputes the net revenue of fulfilled orders by region and sales channel, joining the\norder system with the CRM. An administrator grants you EDIT on the folder you work in\nand VIEW on ",[74,874,875],{},"Sample"," first: the sample folder starts with no permissions.",[878,879,880,912,927,939,966,978,991,1019,1045,1053],"ol",{},[152,881,882,884,885,888,889,891,892,895,896,165,899,165,902,165,905,161,908,911],{},[74,883,84],{},", engine ",[74,886,887],{},"Polars",". Drag a ",[74,890,257],{}," and choose ",[31,893,894],{},"order_rows","\n(one row per order line: ",[31,897,898],{},"ordine_id",[31,900,901],{},"prodotto_id",[31,903,904],{},"quantita",[31,906,907],{},"prezzo_unitario",[31,909,910],{},"sconto_pct","). Its preview shows the first 100 rows.",[152,913,914,358,916,165,918,175,920,922,923,926],{},[74,915,452],{},[31,917,904],{},[31,919,907],{},[31,921,910],{}," to ",[27,924,925],{},"decimal"," (the\nquantities and prices are stored as text).",[152,928,929,931,932,935,936,264],{},[74,930,462],{},": name ",[31,933,934],{},"ricavo_netto",", expression\n",[31,937,938],{},"quantita * prezzo_unitario * (1 - sconto_pct \u002F 100)",[152,940,941,942,165,944,946,947,949,950,165,953,165,956,161,958,946,960,949,962,81,964,264],{},"A second ",[74,943,257],{},[31,945,33],{},", then ",[74,948,412],{}," ",[31,951,952],{},"id",[31,954,955],{},"cliente_id",[31,957,41],{},[31,959,37],{},[74,961,442],{},[31,963,952],{},[31,965,898],{},[152,967,968,970,971,974,975,977],{},[74,969,270],{},": the computed column into the top handle, the renamed orders into the bottom\none; type ",[27,972,973],{},"inner",", key ",[31,976,898],{}," on both sides.",[152,979,980,358,982,949,984,949,987,990],{},[74,981,524],{},[31,983,37],{},[27,985,986],{},"equals",[31,988,989],{},"evaso"," (fulfilled).",[152,992,993,994,165,996,999,1000,949,1002,161,1004,946,1007,949,1009,81,1011,1013,1014,1016,1017,264],{},"A third ",[74,995,257],{},[31,997,998],{},"customers"," (from the CRM), then ",[74,1001,412],{},[31,1003,952],{},[31,1005,1006],{},"regione",[74,1008,442],{},[31,1010,952],{},[31,1012,955],{},", into a second ",[74,1015,270],{}," on\n",[31,1018,955],{},[152,1020,1021,949,1023,165,1025,358,1027,1030,1031,1033,1034,165,1037,1030,1040,1033,1042,264],{},[74,1022,617],{},[31,1024,1006],{},[31,1026,41],{},[27,1028,1029],{},"sum"," of ",[31,1032,934],{}," as ",[31,1035,1036],{},"ricavo",[27,1038,1039],{},"distinct\ncount",[31,1041,898],{},[31,1043,1044],{},"ordini",[152,1046,1047,1049,1050,1052],{},[74,1048,538],{}," on ",[31,1051,1036],{},", descending.",[152,1054,1055,1057,1058,1060,1061,1064,1065,946,1067,264],{},[74,1056,182],{},", destination ",[74,1059,361],{},", name ",[31,1062,1063],{},"Revenue by Region and Channel",", a folder you can edit. ",[74,1066,246],{},[74,1068,263],{},[14,1070,1071,1072,1076],{},"Each step can be checked as you go: click the Join to see the order lines with their\norder attached, the Group by to see one row per region and channel. The run publishes the datasource; the\n",[126,1073,1075],{"href":1074},"\u002Fdocs\u002Fcapabilities\u002Fpreview-and-analysis#the-viewer","Viewer"," and the other flows read it from then on.",[14,1078,1079],{},[20,1080],{"alt":1081,"src":1082},"Clicking the nodes of the sample flow one after another: the table under the canvas changes to each step's result","\u002Fmedia\u002Fguide\u002Fflows\u002Fpreview-any-step.gif",[14,1084,1085],{},[27,1086,1087,1088,1090],{},"Click a node, see its data: the raw order lines, the computed ",[31,1089,934],{},", the join with the orders, then the margin per category and month.",[14,1092,1093,1094,1097,1098,1100],{},"The ",[74,1095,1096],{},"Sample \u002F Flows"," folder holds the complete version of this analysis, «Margin by\nCategory and Month»: five sources, six joins, an ",[74,1099,483],{}," step that picks the\nlist price and the production cost in force on the day of each order, and the margin\nper category.",[298,1102,1104],{"id":1103},"what-the-engine-receives","What the engine receives",[14,1106,1107,1108,1110],{},"The chain up to the Group by of step 8, as the editor sends it to ",[31,1109,768],{},"\n(the storage keys are examples, and the preview slot is left out):",[1112,1113,1118],"pre",{"className":1114,"code":1115,"language":1116,"meta":1117,"style":1117},"language-json shiki shiki-themes github-dark-dimmed github-light","{\n  \"bucket\": \"data-prep\",\n  \"input_key\": \"datasets\u002F5\u002F20261027T050000Z-3f9a1c2e.parquet\",\n  \"engine\": \"polars\",\n  \"limit\": 100,\n  \"operations\": [\n    {\"type\": \"cast\", \"params\": {\"columns\": {\"quantita\": \"float\", \"prezzo_unitario\": \"float\", \"sconto_pct\": \"float\"}}},\n    {\"type\": \"compute\", \"params\": {\"columns\": [{\"name\": \"ricavo_netto\", \"expr\": \"quantita * prezzo_unitario * (1 - sconto_pct \u002F 100)\"}]}},\n    {\"type\": \"join\", \"params\": {\"how\": \"inner\", \"on\": [\"ordine_id\"], \"right\": {\n      \"source\": {\"bucket\": \"data-prep\", \"key\": \"datasets\u002F4\u002F20261027T050000Z-8b1d0e77.parquet\"},\n      \"operations\": [\n        {\"type\": \"select\", \"params\": {\"columns\": [\"id\", \"cliente_id\", \"canale\", \"stato\"]}},\n        {\"type\": \"rename\", \"params\": {\"mapping\": {\"id\": \"ordine_id\"}}}\n      ]}}},\n    {\"type\": \"filter\", \"params\": {\"column\": \"stato\", \"operator\": \"eq\", \"value\": \"evaso\"}},\n    {\"type\": \"join\", \"params\": {\"how\": \"inner\", \"on\": [\"cliente_id\"], \"right\": {\n      \"source\": {\"bucket\": \"data-prep\", \"key\": \"datasets\u002F7\u002F20261027T050000Z-c42f9a10.parquet\"},\n      \"operations\": [\n        {\"type\": \"select\", \"params\": {\"columns\": [\"id\", \"regione\"]}},\n        {\"type\": \"rename\", \"params\": {\"mapping\": {\"id\": \"cliente_id\"}}}\n      ]}}},\n    {\"type\": \"group_by\", \"params\": {\"by\": [\"regione\", \"canale\"], \"aggregations\": [\n      {\"column\": \"ricavo_netto\", \"func\": \"sum\", \"alias\": \"ricavo\"},\n      {\"column\": \"ordine_id\", \"func\": \"n_unique\", \"alias\": \"ordini\"}]}}\n  ]\n}\n","json","",[31,1119,1120,1129,1144,1157,1170,1184,1193,1249,1293,1339,1367,1375,1419,1451,1457,1505,1542,1566,1573,1603,1632,1637,1673,1707,1739,1745],{"__ignoreMap":1117},[1121,1122,1125],"span",{"class":1123,"line":1124},"line",1,[1121,1126,1128],{"class":1127},"ssh_m","{\n",[1121,1130,1132,1136,1138,1142],{"class":1123,"line":1131},2,[1121,1133,1135],{"class":1134},"sJK54","  \"bucket\"",[1121,1137,358],{"class":1127},[1121,1139,1141],{"class":1140},"sXfbr","\"data-prep\"",[1121,1143,161],{"class":1127},[1121,1145,1147,1150,1152,1155],{"class":1123,"line":1146},3,[1121,1148,1149],{"class":1134},"  \"input_key\"",[1121,1151,358],{"class":1127},[1121,1153,1154],{"class":1140},"\"datasets\u002F5\u002F20261027T050000Z-3f9a1c2e.parquet\"",[1121,1156,161],{"class":1127},[1121,1158,1160,1163,1165,1168],{"class":1123,"line":1159},4,[1121,1161,1162],{"class":1134},"  \"engine\"",[1121,1164,358],{"class":1127},[1121,1166,1167],{"class":1140},"\"polars\"",[1121,1169,161],{"class":1127},[1121,1171,1173,1176,1178,1182],{"class":1123,"line":1172},5,[1121,1174,1175],{"class":1134},"  \"limit\"",[1121,1177,358],{"class":1127},[1121,1179,1181],{"class":1180},"swcJU","100",[1121,1183,161],{"class":1127},[1121,1185,1187,1190],{"class":1123,"line":1186},6,[1121,1188,1189],{"class":1134},"  \"operations\"",[1121,1191,1192],{"class":1127},": [\n",[1121,1194,1196,1199,1202,1204,1207,1209,1212,1215,1218,1220,1223,1225,1228,1230,1233,1235,1237,1239,1242,1244,1246],{"class":1123,"line":1195},7,[1121,1197,1198],{"class":1127},"    {",[1121,1200,1201],{"class":1134},"\"type\"",[1121,1203,358],{"class":1127},[1121,1205,1206],{"class":1140},"\"cast\"",[1121,1208,165],{"class":1127},[1121,1210,1211],{"class":1134},"\"params\"",[1121,1213,1214],{"class":1127},": {",[1121,1216,1217],{"class":1134},"\"columns\"",[1121,1219,1214],{"class":1127},[1121,1221,1222],{"class":1134},"\"quantita\"",[1121,1224,358],{"class":1127},[1121,1226,1227],{"class":1140},"\"float\"",[1121,1229,165],{"class":1127},[1121,1231,1232],{"class":1134},"\"prezzo_unitario\"",[1121,1234,358],{"class":1127},[1121,1236,1227],{"class":1140},[1121,1238,165],{"class":1127},[1121,1240,1241],{"class":1134},"\"sconto_pct\"",[1121,1243,358],{"class":1127},[1121,1245,1227],{"class":1140},[1121,1247,1248],{"class":1127},"}}},\n",[1121,1250,1252,1254,1256,1258,1261,1263,1265,1267,1269,1272,1275,1277,1280,1282,1285,1287,1290],{"class":1123,"line":1251},8,[1121,1253,1198],{"class":1127},[1121,1255,1201],{"class":1134},[1121,1257,358],{"class":1127},[1121,1259,1260],{"class":1140},"\"compute\"",[1121,1262,165],{"class":1127},[1121,1264,1211],{"class":1134},[1121,1266,1214],{"class":1127},[1121,1268,1217],{"class":1134},[1121,1270,1271],{"class":1127},": [{",[1121,1273,1274],{"class":1134},"\"name\"",[1121,1276,358],{"class":1127},[1121,1278,1279],{"class":1140},"\"ricavo_netto\"",[1121,1281,165],{"class":1127},[1121,1283,1284],{"class":1134},"\"expr\"",[1121,1286,358],{"class":1127},[1121,1288,1289],{"class":1140},"\"quantita * prezzo_unitario * (1 - sconto_pct \u002F 100)\"",[1121,1291,1292],{"class":1127},"}]}},\n",[1121,1294,1296,1298,1300,1302,1305,1307,1309,1311,1314,1316,1319,1321,1324,1327,1330,1333,1336],{"class":1123,"line":1295},9,[1121,1297,1198],{"class":1127},[1121,1299,1201],{"class":1134},[1121,1301,358],{"class":1127},[1121,1303,1304],{"class":1140},"\"join\"",[1121,1306,165],{"class":1127},[1121,1308,1211],{"class":1134},[1121,1310,1214],{"class":1127},[1121,1312,1313],{"class":1134},"\"how\"",[1121,1315,358],{"class":1127},[1121,1317,1318],{"class":1140},"\"inner\"",[1121,1320,165],{"class":1127},[1121,1322,1323],{"class":1134},"\"on\"",[1121,1325,1326],{"class":1127},": [",[1121,1328,1329],{"class":1140},"\"ordine_id\"",[1121,1331,1332],{"class":1127},"], ",[1121,1334,1335],{"class":1134},"\"right\"",[1121,1337,1338],{"class":1127},": {\n",[1121,1340,1342,1345,1347,1350,1352,1354,1356,1359,1361,1364],{"class":1123,"line":1341},10,[1121,1343,1344],{"class":1134},"      \"source\"",[1121,1346,1214],{"class":1127},[1121,1348,1349],{"class":1134},"\"bucket\"",[1121,1351,358],{"class":1127},[1121,1353,1141],{"class":1140},[1121,1355,165],{"class":1127},[1121,1357,1358],{"class":1134},"\"key\"",[1121,1360,358],{"class":1127},[1121,1362,1363],{"class":1140},"\"datasets\u002F4\u002F20261027T050000Z-8b1d0e77.parquet\"",[1121,1365,1366],{"class":1127},"},\n",[1121,1368,1370,1373],{"class":1123,"line":1369},11,[1121,1371,1372],{"class":1134},"      \"operations\"",[1121,1374,1192],{"class":1127},[1121,1376,1378,1381,1383,1385,1388,1390,1392,1394,1396,1398,1401,1403,1406,1408,1411,1413,1416],{"class":1123,"line":1377},12,[1121,1379,1380],{"class":1127},"        {",[1121,1382,1201],{"class":1134},[1121,1384,358],{"class":1127},[1121,1386,1387],{"class":1140},"\"select\"",[1121,1389,165],{"class":1127},[1121,1391,1211],{"class":1134},[1121,1393,1214],{"class":1127},[1121,1395,1217],{"class":1134},[1121,1397,1326],{"class":1127},[1121,1399,1400],{"class":1140},"\"id\"",[1121,1402,165],{"class":1127},[1121,1404,1405],{"class":1140},"\"cliente_id\"",[1121,1407,165],{"class":1127},[1121,1409,1410],{"class":1140},"\"canale\"",[1121,1412,165],{"class":1127},[1121,1414,1415],{"class":1140},"\"stato\"",[1121,1417,1418],{"class":1127},"]}},\n",[1121,1420,1422,1424,1426,1428,1431,1433,1435,1437,1440,1442,1444,1446,1448],{"class":1123,"line":1421},13,[1121,1423,1380],{"class":1127},[1121,1425,1201],{"class":1134},[1121,1427,358],{"class":1127},[1121,1429,1430],{"class":1140},"\"rename\"",[1121,1432,165],{"class":1127},[1121,1434,1211],{"class":1134},[1121,1436,1214],{"class":1127},[1121,1438,1439],{"class":1134},"\"mapping\"",[1121,1441,1214],{"class":1127},[1121,1443,1400],{"class":1134},[1121,1445,358],{"class":1127},[1121,1447,1329],{"class":1140},[1121,1449,1450],{"class":1127},"}}}\n",[1121,1452,1454],{"class":1123,"line":1453},14,[1121,1455,1456],{"class":1127},"      ]}}},\n",[1121,1458,1460,1462,1464,1466,1469,1471,1473,1475,1478,1480,1482,1484,1487,1489,1492,1494,1497,1499,1502],{"class":1123,"line":1459},15,[1121,1461,1198],{"class":1127},[1121,1463,1201],{"class":1134},[1121,1465,358],{"class":1127},[1121,1467,1468],{"class":1140},"\"filter\"",[1121,1470,165],{"class":1127},[1121,1472,1211],{"class":1134},[1121,1474,1214],{"class":1127},[1121,1476,1477],{"class":1134},"\"column\"",[1121,1479,358],{"class":1127},[1121,1481,1415],{"class":1140},[1121,1483,165],{"class":1127},[1121,1485,1486],{"class":1134},"\"operator\"",[1121,1488,358],{"class":1127},[1121,1490,1491],{"class":1140},"\"eq\"",[1121,1493,165],{"class":1127},[1121,1495,1496],{"class":1134},"\"value\"",[1121,1498,358],{"class":1127},[1121,1500,1501],{"class":1140},"\"evaso\"",[1121,1503,1504],{"class":1127},"}},\n",[1121,1506,1508,1510,1512,1514,1516,1518,1520,1522,1524,1526,1528,1530,1532,1534,1536,1538,1540],{"class":1123,"line":1507},16,[1121,1509,1198],{"class":1127},[1121,1511,1201],{"class":1134},[1121,1513,358],{"class":1127},[1121,1515,1304],{"class":1140},[1121,1517,165],{"class":1127},[1121,1519,1211],{"class":1134},[1121,1521,1214],{"class":1127},[1121,1523,1313],{"class":1134},[1121,1525,358],{"class":1127},[1121,1527,1318],{"class":1140},[1121,1529,165],{"class":1127},[1121,1531,1323],{"class":1134},[1121,1533,1326],{"class":1127},[1121,1535,1405],{"class":1140},[1121,1537,1332],{"class":1127},[1121,1539,1335],{"class":1134},[1121,1541,1338],{"class":1127},[1121,1543,1545,1547,1549,1551,1553,1555,1557,1559,1561,1564],{"class":1123,"line":1544},17,[1121,1546,1344],{"class":1134},[1121,1548,1214],{"class":1127},[1121,1550,1349],{"class":1134},[1121,1552,358],{"class":1127},[1121,1554,1141],{"class":1140},[1121,1556,165],{"class":1127},[1121,1558,1358],{"class":1134},[1121,1560,358],{"class":1127},[1121,1562,1563],{"class":1140},"\"datasets\u002F7\u002F20261027T050000Z-c42f9a10.parquet\"",[1121,1565,1366],{"class":1127},[1121,1567,1569,1571],{"class":1123,"line":1568},18,[1121,1570,1372],{"class":1134},[1121,1572,1192],{"class":1127},[1121,1574,1576,1578,1580,1582,1584,1586,1588,1590,1592,1594,1596,1598,1601],{"class":1123,"line":1575},19,[1121,1577,1380],{"class":1127},[1121,1579,1201],{"class":1134},[1121,1581,358],{"class":1127},[1121,1583,1387],{"class":1140},[1121,1585,165],{"class":1127},[1121,1587,1211],{"class":1134},[1121,1589,1214],{"class":1127},[1121,1591,1217],{"class":1134},[1121,1593,1326],{"class":1127},[1121,1595,1400],{"class":1140},[1121,1597,165],{"class":1127},[1121,1599,1600],{"class":1140},"\"regione\"",[1121,1602,1418],{"class":1127},[1121,1604,1606,1608,1610,1612,1614,1616,1618,1620,1622,1624,1626,1628,1630],{"class":1123,"line":1605},20,[1121,1607,1380],{"class":1127},[1121,1609,1201],{"class":1134},[1121,1611,358],{"class":1127},[1121,1613,1430],{"class":1140},[1121,1615,165],{"class":1127},[1121,1617,1211],{"class":1134},[1121,1619,1214],{"class":1127},[1121,1621,1439],{"class":1134},[1121,1623,1214],{"class":1127},[1121,1625,1400],{"class":1134},[1121,1627,358],{"class":1127},[1121,1629,1405],{"class":1140},[1121,1631,1450],{"class":1127},[1121,1633,1635],{"class":1123,"line":1634},21,[1121,1636,1456],{"class":1127},[1121,1638,1640,1642,1644,1646,1649,1651,1653,1655,1658,1660,1662,1664,1666,1668,1671],{"class":1123,"line":1639},22,[1121,1641,1198],{"class":1127},[1121,1643,1201],{"class":1134},[1121,1645,358],{"class":1127},[1121,1647,1648],{"class":1140},"\"group_by\"",[1121,1650,165],{"class":1127},[1121,1652,1211],{"class":1134},[1121,1654,1214],{"class":1127},[1121,1656,1657],{"class":1134},"\"by\"",[1121,1659,1326],{"class":1127},[1121,1661,1600],{"class":1140},[1121,1663,165],{"class":1127},[1121,1665,1410],{"class":1140},[1121,1667,1332],{"class":1127},[1121,1669,1670],{"class":1134},"\"aggregations\"",[1121,1672,1192],{"class":1127},[1121,1674,1676,1679,1681,1683,1685,1687,1690,1692,1695,1697,1700,1702,1705],{"class":1123,"line":1675},23,[1121,1677,1678],{"class":1127},"      {",[1121,1680,1477],{"class":1134},[1121,1682,358],{"class":1127},[1121,1684,1279],{"class":1140},[1121,1686,165],{"class":1127},[1121,1688,1689],{"class":1134},"\"func\"",[1121,1691,358],{"class":1127},[1121,1693,1694],{"class":1140},"\"sum\"",[1121,1696,165],{"class":1127},[1121,1698,1699],{"class":1134},"\"alias\"",[1121,1701,358],{"class":1127},[1121,1703,1704],{"class":1140},"\"ricavo\"",[1121,1706,1366],{"class":1127},[1121,1708,1710,1712,1714,1716,1718,1720,1722,1724,1727,1729,1731,1733,1736],{"class":1123,"line":1709},24,[1121,1711,1678],{"class":1127},[1121,1713,1477],{"class":1134},[1121,1715,358],{"class":1127},[1121,1717,1329],{"class":1140},[1121,1719,165],{"class":1127},[1121,1721,1689],{"class":1134},[1121,1723,358],{"class":1127},[1121,1725,1726],{"class":1140},"\"n_unique\"",[1121,1728,165],{"class":1127},[1121,1730,1699],{"class":1134},[1121,1732,358],{"class":1127},[1121,1734,1735],{"class":1140},"\"ordini\"",[1121,1737,1738],{"class":1127},"}]}}\n",[1121,1740,1742],{"class":1123,"line":1741},25,[1121,1743,1744],{"class":1127},"  ]\n",[1121,1746,1748],{"class":1123,"line":1747},26,[1121,1749,1750],{"class":1127},"}\n",[14,1752,1753],{},"The gateway checks that you may read every storage key in the request before the\nengine sees it.",[44,1755,134],{"id":1756},"permissions",[14,1758,1759,1760,1763],{},"Permissions are those of the flow's folder (",[126,1761,134],{"href":1762},"\u002Fdocs\u002Fgovernance\u002Fpermissions","):",[49,1765,1766,1776],{},[52,1767,1768],{},[55,1769,1770,1773],{},[58,1771,1772],{},"To",[58,1774,1775],{},"You need",[63,1777,1778,1789,1800,1811,1821,1832],{},[55,1779,1780,1783],{},[68,1781,1782],{},"Open a flow, see its versions",[68,1784,1785,1788],{},[74,1786,1787],{},"VIEW"," on its folder, and read access to the datasources its previews read",[55,1790,1791,1794],{},[68,1792,1793],{},"Create, save, rename, duplicate, move, delete, promote a version",[68,1795,1796,1799],{},[74,1797,1798],{},"EDIT"," on its folder (and on the destination folder, to move it)",[55,1801,1802,1805],{},[68,1803,1804],{},"Run it, by hand or in production",[68,1806,1807,1810],{},[74,1808,1809],{},"RUN"," on its folder",[55,1812,1813,1816],{},[68,1814,1815],{},"Publish a datasource",[68,1817,1818,1820],{},[74,1819,1798],{}," on the destination folder",[55,1822,1823,1826],{},[68,1824,1825],{},"Write to a database, S3, SFTP, or send an email",[68,1827,1828,1831],{},[74,1829,1830],{},"CONNECT"," on the connection's folder",[55,1833,1834,1837],{},[68,1835,1836],{},"Open a flow with a Script or Container node",[68,1838,1839],{},"The node's environment or registry granted to you by an administrator; otherwise the flow is listed greyed out and does not open",[14,1841,1842],{},"An observer account sees the editor read-only: it can preview and add transformations to\nexplore, but not save, run, or add sources and outputs. Every save, run, promotion and\ndeletion is in the audit log.",[44,1844,1846],{"id":1845},"limits-and-good-to-know","Limits and good to know",[149,1848,1849,1856,1863,1870,1877,1886],{},[152,1850,1851,1852,1855],{},"The editor shows 100 rows per node; downloads (",[74,1853,1854],{},"Download this node's data",", CSV or\nExcel) and runs read everything.",[152,1857,1858,1859,1862],{},"A development sample never reaches production: scheduled runs and ",[74,1860,1861],{},"Run in\nproduction"," read the whole table. Sample the big table only: joining two sampled\nsources loses most matches.",[152,1864,1865,1866,1869],{},"A step's result is cached only up to ",[31,1867,1868],{},"CACHE__MAX_STEP_ROWS"," rows (1 million by\ndefault); larger steps are recomputed at every preview, and the node says so.",[152,1871,1872,1873,1876],{},"Previews wait at most ",[31,1874,1875],{},"PREVIEW_TIMEOUT_SECONDS"," (120 by default).",[152,1878,1879,175,1881,1883,1884,264],{},[74,1880,483],{},[74,1882,462],{}," use the engine's SQL dialect: an expression\nwritten for one engine may fail, or round differently, on another. See\n",[126,1885,296],{"href":295},[152,1887,1888],{},"Two people saving the same flow: the last save wins.",[44,1890,1892],{"id":1891},"related","Related",[149,1894,1895,1900,1905,1913,1920],{},[152,1896,1897,1899],{},[126,1898,237],{"href":236},": the data view, the Viewer, saved views",[152,1901,1902,1904],{},[126,1903,121],{"href":128},": where a flow runs, development and production engines",[152,1906,1907,175,1909,1912],{},[126,1908,821],{"href":820},[126,1910,1911],{"href":741},"Flow groups",": running flows unattended and in order",[152,1914,1915,1919],{},[126,1916,1918],{"href":1917},"\u002Fdocs\u002Fplaceholders","Dynamic dates",": file and table names that change with the date",[152,1921,1922,1925],{},[126,1923,1924],{"href":772},"Export to dbt",": a flow as a dbt project",[1927,1928,1929],"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":1117,"searchDepth":1131,"depth":1146,"links":1931},[1932,1933,1934,1941,1947,1950,1951,1952],{"id":46,"depth":1131,"text":47},{"id":143,"depth":1131,"text":144},{"id":288,"depth":1131,"text":289,"children":1935},[1936,1937,1938,1939,1940],{"id":300,"depth":1146,"text":301},{"id":392,"depth":1146,"text":393},{"id":504,"depth":1146,"text":505},{"id":597,"depth":1146,"text":598},{"id":677,"depth":1146,"text":168},{"id":745,"depth":1131,"text":746,"children":1942},[1943,1944,1945,1946],{"id":749,"depth":1146,"text":750},{"id":777,"depth":1146,"text":778},{"id":824,"depth":1146,"text":825},{"id":857,"depth":1146,"text":858},{"id":864,"depth":1131,"text":865,"children":1948},[1949],{"id":1103,"depth":1146,"text":1104},{"id":1756,"depth":1131,"text":134},{"id":1845,"depth":1131,"text":1846},{"id":1891,"depth":1131,"text":1892},"md",{"source":1955},"docs\u002Fcapabilities\u002Fflows.md",true,"\u002Fdocs\u002Fcapabilities\u002Fflows",{"title":5,"description":16},"docs\u002Fcapabilities\u002Fflows","zoDWpnbHaOQalnGX1DaDqbdXBHHU9_tGqxAe2k2LVHM",[1962,1981,2021,2051,2082,2108,2132,2158],{"title":1963,"icon":1964,"intro":1965,"items":1966},"Getting started","start","Install it on one machine, learn the few ideas everything else is built on, and run a first flow.",[1967,1969,1972,1975,1978],{"path":1968,"title":1963},"\u002Fdocs\u002Fgetting-started",{"path":1970,"title":1971},"\u002Fdocs\u002Fgetting-started-docker-compose","Walkthrough with Docker Compose",{"path":1973,"title":1974},"\u002Fdocs\u002Fdeploy\u002Fminikube","Try it on your computer (minikube)",{"path":1976,"title":1977},"\u002Fdocs\u002Fconcepts","Concepts",{"path":1979,"title":1980},"\u002Fdocs\u002Foverview","Overview (README)",{"title":1982,"icon":1983,"intro":1984,"items":1985},"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.",[1986,1989,1991,1992,1995,1998,2001,2004,2005,2008,2011,2012,2014,2015,2018,2019,2020],{"path":1987,"title":1988},"\u002Fdocs\u002Fcapabilities","All capabilities",{"path":1957,"title":1990},"Low-code flows",{"path":236,"title":237},{"path":1993,"title":1994},"\u002Fdocs\u002Fcapabilities\u002Fask-your-data","Ask your data with AI",{"path":1996,"title":1997},"\u002Fdocs\u002Fcapabilities\u002Freports","Pixel-perfect reports",{"path":1999,"title":2000},"\u002Fdocs\u002Fcapabilities\u002Freport-functions","Report functions",{"path":2002,"title":2003},"\u002Fdocs\u002Fcapabilities\u002Fdashboards","Dashboards",{"path":714,"title":715},{"path":2006,"title":2007},"\u002Fdocs\u002Fsql-scripts","SQL scripts",{"path":2009,"title":2010},"\u002Fdocs\u002Fcapabilities\u002Fnotebooks","marimo notebooks as apps",{"path":727,"title":728},{"path":741,"title":2013},"Flow groups: orchestration",{"path":820,"title":821},{"path":2016,"title":2017},"\u002Fdocs\u002Fpushmail","Pushmail: datasources, reports and dashboards by email",{"path":1917,"title":1918},{"path":128,"title":121},{"path":295,"title":296},{"title":160,"icon":2022,"intro":2023,"items":2024},"sources","Every way data comes in: files, databases, buckets, SFTP folders, HTTP APIs, SharePoint, Google Sheets, and the results of your own flows.",[2025,2027,2030,2033,2036,2039,2042,2045,2048],{"path":327,"title":2026},"All sources",{"path":2028,"title":2029},"\u002Fdocs\u002Fsources\u002Ffiles","Uploaded files",{"path":2031,"title":2032},"\u002Fdocs\u002Fsources\u002Fdatabases","Database tables and queries",{"path":2034,"title":2035},"\u002Fdocs\u002Fs3-datasource","S3 buckets",{"path":2037,"title":2038},"\u002Fdocs\u002Fsftp","SFTP folders",{"path":2040,"title":2041},"\u002Fdocs\u002Fapi-datasource","HTTP APIs",{"path":2043,"title":2044},"\u002Fdocs\u002Fsources\u002Fsharepoint","Excel on SharePoint",{"path":2046,"title":2047},"\u002Fdocs\u002Fsources\u002Fgoogle-sheets","Google Sheets",{"path":2049,"title":2050},"\u002Fdocs\u002Fsources\u002Fflow-outputs","Results of flows and scripts",{"title":2052,"icon":2053,"intro":2054,"items":2055},"Connections","connections","The systems Tabularia reads from and writes to, how each connection is set up, and who may use it.",[2056,2059,2062,2065,2068,2070,2071,2073,2074,2077,2080],{"path":2057,"title":2058},"\u002Fdocs\u002Fconnections","All connections",{"path":2060,"title":2061},"\u002Fdocs\u002Fconnections\u002Fdatabases","Databases",{"path":2063,"title":2064},"\u002Fdocs\u002Fsqlserver","Microsoft SQL Server driver",{"path":2066,"title":2067},"\u002Fdocs\u002Fconnections\u002Fs3","S3 and compatible storage",{"path":2037,"title":2069},"SFTP servers",{"path":2040,"title":2041},{"path":2043,"title":2072},"SharePoint",{"path":2046,"title":2047},{"path":2075,"title":2076},"\u002Fdocs\u002Fconnections\u002Fsmtp","SMTP email",{"path":2078,"title":2079},"\u002Fdocs\u002Fcontainer-registries","Container registries",{"path":378,"title":2081},"Writing data out",{"title":2083,"icon":2084,"intro":2085,"items":2086},"Integrations","integrations","How Tabularia fits your stack: AI providers, the REST API and webhooks, dbt, OpenLineage, single sign-on, SIEM and monitoring.",[2087,2090,2092,2095,2096,2099,2102,2105],{"path":2088,"title":2089},"\u002Fdocs\u002Fintegrations","All integrations",{"path":217,"title":2091},"AI: where it is used",{"path":2093,"title":2094},"\u002Fdocs\u002Fapi","API, tokens and webhooks",{"path":772,"title":1924},{"path":2097,"title":2098},"\u002Fdocs\u002Fopenlineage","OpenLineage",{"path":2100,"title":2101},"\u002Fdocs\u002Fsso-keycloak","Single sign-on with Keycloak",{"path":2103,"title":2104},"\u002Fdocs\u002Fsiem-splunk","Audit log to Splunk",{"path":2106,"title":2107},"\u002Fdocs\u002Fintegrations\u002Fmonitoring","Monitoring",{"title":2109,"icon":2110,"intro":2111,"items":2112},"Security & governance","governance","Who may see and do what, what is recorded, and how data quality and personal data are kept in check.",[2113,2116,2117,2120,2123,2126,2129],{"path":2114,"title":2115},"\u002Fdocs\u002Fgovernance","Overview",{"path":1762,"title":134},{"path":2118,"title":2119},"\u002Fdocs\u002Fgovernance\u002Faudit-log","Audit log",{"path":2121,"title":2122},"\u002Fdocs\u002Fgovernance\u002Fdata-contracts","Data contracts",{"path":2124,"title":2125},"\u002Fdocs\u002Fdesign\u002Fsso-group-mapping","SSO and group mapping",{"path":2127,"title":2128},"\u002Fdocs\u002Fexamples\u002Fkeycloak","Keycloak example on a laptop",{"path":2130,"title":2131},"\u002Fdocs\u002Fengines\u002Fclickhouse-ai-user","A ClickHouse user for the AI assistant",{"title":2133,"icon":2134,"intro":2135,"items":2136},"Install & operate","operate","Run it in production on Kubernetes, configure it, upgrade it and keep it healthy.",[2137,2140,2143,2146,2149,2152,2155],{"path":2138,"title":2139},"\u002Fdocs\u002Fdeploy\u002Fkubernetes","Kubernetes and Helm",{"path":2141,"title":2142},"\u002Fdocs\u002Fdeploy\u002Fkind","A company-like cluster on one computer (kind)",{"path":2144,"title":2145},"\u002Fdocs\u002Fdeploy\u002Fupgrading","Upgrading, backups and restore",{"path":2147,"title":2148},"\u002Fdocs\u002Fdeploy\u002Frelease-checklist","Install and upgrade checklist",{"path":2150,"title":2151},"\u002Fdocs\u002Fconfiguration","Configuration reference",{"path":2153,"title":2154},"\u002Fdocs\u002Fengine-settings","Settings from the panel",{"path":2156,"title":2157},"\u002Fdocs\u002Fdatabase-migrations","Database migrations",{"title":2159,"icon":2160,"intro":2161,"items":2162},"Reference","reference","Release process and the remaining reference pages.",[2163],{"path":2164,"title":2165},"\u002Fdocs\u002Frelease-process","Release process",1793656371460]