[{"data":1,"prerenderedAt":1107},["ShallowReactive",2],{"doc:\u002Fdocs\u002Fsources\u002Fsharepoint":3,"docs-nav":895},{"id":4,"title":5,"body":6,"description":886,"extension":887,"meta":888,"navigation":890,"path":891,"seo":892,"stem":893,"__hash__":894},"docs\u002Fdocs\u002Fsources\u002Fsharepoint.md","Excel on SharePoint",{"type":7,"value":8,"toc":871},"minimark",[9,13,26,31,141,145,152,198,201,205,215,275,284,291,297,317,321,326,450,455,462,465,484,495,499,524,535,539,566,614,683,695,698,708,714,717,770,773,777,828,832],[10,11,5],"h1",{"id":12},"excel-on-sharepoint",[14,15,16,17,21,22,25],"p",{},"A ",[18,19,20],"strong",{},"SharePoint connection"," reads the Excel and CSV files of a document library through\nMicrosoft Graph, with an application registered in Entra ID. A ",[18,23,24],{},"SharePoint datasource","\ntakes the files that match a path or a glob, stacks them into one table, and keeps it as\na snapshot, refreshed by hand or on a schedule. It suits the workbooks finance and\noperations keep on SharePoint: monthly closings, budgets, stock counts.",[27,28,30],"h2",{"id":29},"at-a-glance","At a glance",[32,33,34,45],"table",{},[35,36,37],"thead",{},[38,39,40,43],"tr",{},[41,42],"th",{},[41,44],{},[46,47,48,57,69,106,114,125,133],"tbody",{},[38,49,50,54],{},[51,52,53],"td",{},"Connection",[51,55,56],{},"Site URL, document library, and an Entra ID app: tenant ID, client ID, client secret",[38,58,59,62],{},[51,60,61],{},"Datasource",[51,63,64,65,68],{},"Explore, in a folder: ",[18,66,67],{},"New → Datasource from a database",", then the SharePoint connection",[38,70,71,74],{},[51,72,73],{},"Reads",[51,75,76,80,81,80,84,80,87,90,91,80,94,97,98,101,102,105],{},[77,78,79],"code",{},".xlsx"," ",[77,82,83],{},".xlsm",[77,85,86],{},".xlsb",[77,88,89],{},".xls",", and ",[77,92,93],{},".csv",[77,95,96],{},".tsv","; a path, or a glob (",[77,99,100],{},"*"," within one folder, ",[77,103,104],{},"**"," any depth)",[38,107,108,111],{},[51,109,110],{},"Writes",[51,112,113],{},"Nothing: the app only reads, and the files stay where they are",[38,115,116,119],{},[51,117,118],{},"Updated",[51,120,121,124],{},[18,122,123],{},"Refresh snapshot now",", a cron schedule, or a flow group step",[38,126,127,130],{},[51,128,129],{},"Permissions",[51,131,132],{},"CONNECT on the connection's folder; EDIT on the destination folder to create, RUN to refresh",[38,134,135,138],{},[51,136,137],{},"Status",[51,139,140],{},"Built and tested against the documented contract of Microsoft Graph, not yet against a production tenant",[27,142,144],{"id":143},"before-you-start-the-app-in-entra-id","Before you start: the app in Entra ID",[14,146,147,148,151],{},"Tabularia signs in to Microsoft Graph as an ",[18,149,150],{},"application"," (OAuth2 client credentials),\nnot as a person. Ask your Microsoft 365 administrators for:",[153,154,155,171,183],"ol",{},[156,157,158,159,162,163,166,167,170],"li",{},"An app registration in Entra ID, with a ",[18,160,161],{},"client secret",". Its overview page shows the\n",[18,164,165],{},"Application (client) ID"," and the ",[18,168,169],{},"Directory (tenant) ID",".",[156,172,173,174,176,177,182],{},"The Microsoft Graph ",[18,175,150],{}," permission ",[18,178,179],{},[77,180,181],{},"Sites.Selected",", with admin\nconsent. On its own it gives access to no site at all.",[156,184,185,186,189,190,193,194,197],{},"A grant of ",[18,187,188],{},"read"," access for that app on the one site that holds the files\n(Microsoft documents it through Graph's ",[77,191,192],{},"POST \u002Fsites\u002F{site-id}\u002Fpermissions",", or PnP\nPowerShell's ",[77,195,196],{},"Grant-PnPAzureADAppSitePermission",").",[14,199,200],{},"The app then sees that site and nothing else in SharePoint. Read access is enough:\nTabularia only lists folders and downloads files.",[27,202,204],{"id":203},"the-connection","The connection",[14,206,207,208,211,212,170],{},"From a folder in Explore: ",[18,209,210],{},"New → New connection",", type ",[18,213,214],{},"SharePoint",[32,216,217,227],{},[35,218,219],{},[38,220,221,224],{},[41,222,223],{},"Field",[41,225,226],{},"Meaning",[46,228,229,243,251,259,267],{},[38,230,231,234],{},[51,232,233],{},"Site URL",[51,235,236,239,240,170],{},[77,237,238],{},"https:\u002F\u002Fyourcompany.sharepoint.com\u002Fsites\u002FFinance",". It must start with ",[77,241,242],{},"https:\u002F\u002F",[38,244,245,248],{},[51,246,247],{},"Client ID (Entra ID app)",[51,249,250],{},"The app's Application (client) ID.",[38,252,253,256],{},[51,254,255],{},"Client secret",[51,257,258],{},"The secret created for the app.",[38,260,261,264],{},[51,262,263],{},"Tenant ID",[51,265,266],{},"The Directory (tenant) ID.",[38,268,269,272],{},[51,270,271],{},"Document library",[51,273,274],{},"The library's name, as SharePoint shows it; empty = the site's default library («Documents»). Matched regardless of case; a wrong name is refused with the list of the site's libraries.",[14,276,277,280,281,283],{},[18,278,279],{},"Test connection"," asks Microsoft for a token, then finds the site and the library:\neverything that can be wrong with the connection shows here. A token refused says to\ncheck the tenant, client ID and secret; an access denied names ",[77,282,181],{}," and the\ngrant on the site.",[14,285,286],{},[287,288],"img",{"alt":289,"src":290},"The New connection dialog with type SharePoint: site URL, client ID, client secret hidden, tenant ID, document library empty","\u002Fmedia\u002Fguide\u002Fconnections\u002Fsharepoint-connection.png",[14,292,293],{},[294,295,296],"em",{},"A SharePoint connection with example values: the site, the app's client ID and tenant ID, its secret (hidden), the default library.",[14,298,299,300,303,304,307,308,311,312,197],{},"The client secret is encrypted at rest with the same Fernet key as every other\nconnection secret (",[77,301,302],{},"SECURITY__FERNET_KEY","), travels encrypted to the worker and is\ndecrypted only to ask Microsoft for a token. The API never returns it. The Microsoft\nendpoints are not part of the connection: whoever creates a connection cannot point it\nat another address. On a sovereign cloud the installation sets them for everyone with\n",[77,305,306],{},"SHAREPOINT__GRAPH_BASE"," and ",[77,309,310],{},"SHAREPOINT__LOGIN_BASE"," (see\n",[313,314,316],"a",{"href":315},"\u002Fdocs\u002Fconfiguration","Configuration",[27,318,320],{"id":319},"the-datasource","The datasource",[14,322,323,325],{},[18,324,67],{},", choose the SharePoint connection, then:",[32,327,328,336],{},[35,329,330],{},[38,331,332,334],{},[41,333,223],{},[41,335,226],{},[46,337,338,371,393,404,415,432],{},[38,339,340,343],{},[51,341,342],{},"Path in the library",[51,344,345,346,349,350,307,352,355,356,359,360,362,363,366,367,370],{},"A file (",[77,347,348],{},"Budget\u002F2026\u002Fbudget.xlsx","), or a glob: ",[77,351,100],{},[77,353,354],{},"?"," within one folder name (",[77,357,358],{},"Budget\u002F2026\u002F*.xlsx","), ",[77,361,104],{}," for any depth (",[77,364,365],{},"**\u002Fchiusura_*.xlsx","). Matched regardless of case, as SharePoint does. ",[18,368,369],{},"Check files"," lists what it takes.",[38,372,373,376],{},[51,374,375],{},"Format",[51,377,378,381,382,385,386,389,390,392],{},[18,379,380],{},"Excel and CSV, from each file's extension"," (the default), or ",[18,383,384],{},"Excel"," only, or ",[18,387,388],{},"CSV"," only. The format decides which files the path takes: with Excel only, a ",[77,391,100],{}," does not pick up the CSV next to the workbooks.",[38,394,395,398],{},[51,396,397],{},"CSV separator, encoding, header",[51,399,400,401,403],{},"For the CSV files: a one-character separator; UTF-8, UTF-8 with invalid bytes replaced, or Windows-1252; whether the first row is the header. ",[77,402,96],{}," files are tab-separated.",[38,405,406,409],{},[51,407,408],{},"Sheet name",[51,410,411,412,414],{},"For the workbooks: empty = the first sheet of each workbook. After ",[18,413,369],{}," the field becomes a list of the sheets of the first workbook found (one of 50 MB at most is downloaded for it), the hidden ones marked.",[38,416,417,420],{},[51,418,419],{},"Time zone, variables, initial last refresh",[51,421,422,423,427,428,431],{},"The path may hold ",[313,424,426],{"href":425},"\u002Fdocs\u002Fplaceholders","placeholders"," and the datasource's variables: ",[77,429,430],{},"Chiusure\u002F{today-1m:yyyy-MM}.xlsx"," is last month's closing.",[38,433,434,437],{},[51,435,436],{},"Refresh",[51,438,439,442,443,446,447,170],{},[18,440,441],{},"Snapshot"," (the table is rebuilt), or ",[18,444,445],{},"append by key"," (the rows whose key columns come again replace the old ones): see ",[313,448,426],{"href":449},"\u002Fdocs\u002Fplaceholders#refreshing-snapshot-or-append-by-key",[451,452,454],"h3",{"id":453},"how-the-files-become-one-table","How the files become one table",[14,456,457,458,461],{},"At every refresh, every file that matches is downloaded and read, and the rows are\nstacked into one table, ",[18,459,460],{},"united by column name",": a column missing in a file is empty\nthere, and a column found only in some files is logged. Two files with the same column\nholding incompatible types fail the refresh, saying so.",[14,463,464],{},"Every row says where it comes from, in the last two columns:",[466,467,468,478],"ul",{},[156,469,470,473,474,477],{},[77,471,472],{},"_file",": the file's path in the library, with SharePoint's own capitalisation\n(",[77,475,476],{},"Magazzino\u002FInventari\u002F2026\u002Finventario_modena.xlsx","), however the glob was written;",[156,479,480,483],{},[77,481,482],{},"_file_modified_at",": when the file was last modified on SharePoint (UTC).",[14,485,486,487,490,491,494],{},"With variables there is one ",[77,488,489],{},"_param_\u003Cname>"," column per variable as well. Office lock\nfiles (",[77,492,493],{},"~$name.xlsx",", present while someone has the workbook open) are skipped. A file\nwith a header row and nothing below it (an empty template of the month) is counted but\nadds no rows; when every file is like that, the refresh fails.",[451,496,498],{"id":497},"files-must-be-machine-readable","Files must be machine readable",[14,500,501,502,505,506,508,509,511,512,515,516,519,520,523],{},"The header is the ",[18,503,504],{},"first row",", one name per column, no name twice (regardless of case),\nno ",[77,507,472],{}," or ",[77,510,482],{}," among them. A workbook with a title above the table, an\nempty column name or a repeated one is ",[18,513,514],{},"refused",", naming the file and the columns:\nnothing is skipped or renamed silently, because two half-empty columns from a typo in a\nheader are worse than an error. Spaces around names are removed, so ",[77,517,518],{},"Importo "," and\n",[77,521,522],{},"Importo"," are one column. Fix the file at the source.",[14,525,526,527,530,531,534],{},"The import reports its progress («file ",[294,528,529],{},"i"," of ",[294,532,533],{},"n","», «saving»), and the rules of every\nimported datasource apply: snapshot swap at success, one refresh at a time, scheduled\nrefresh, data contract. SharePoint datasources take no sort keys: rows keep the order of\nthe files.",[27,536,538],{"id":537},"example-the-depots-monthly-stock-count","Example: the depots' monthly stock count",[14,540,541,542,545,546,549,550,553,554,557,558,561,562,565],{},"Each depot of the company uploads its stock count to the site ",[77,543,544],{},"Operations",", library\n",[77,547,548],{},"Documents",", folder ",[77,551,552],{},"Magazzino\u002FInventari\u002F2026",": ",[77,555,556],{},"inventario_modena_2026-03.xlsx",",\n",[77,559,560],{},"inventario_napoli_2026-03.xlsx",", and so on, each with a sheet ",[77,563,564],{},"Inventario",":",[32,567,568,584],{},[35,569,570],{},[38,571,572,575,578,581],{},[41,573,574],{},"codice",[41,576,577],{},"nome",[41,579,580],{},"giacenza_kg",[41,582,583],{},"valore_eur",[46,585,586,600],{},[38,587,588,591,594,597],{},[51,589,590],{},"PRS-PARMA-24",[51,592,593],{},"Prosciutto di Parma 24 mesi intero",[51,595,596],{},"1260.5",[51,598,599],{},"31512.50",[38,601,602,605,608,611],{},[51,603,604],{},"MRT-BOL-IGP",[51,606,607],{},"Mortadella Bologna IGP",[51,609,610],{},"845.0",[51,612,613],{},"9295.00",[153,615,616,634,646,661,674],{},[156,617,618,619,621,622,211,624,626,627,630,631,633],{},"In the folder ",[77,620,544],{},", ",[18,623,210],{},[18,625,214],{},": site\n",[77,628,629],{},"https:\u002F\u002Fyourcompany.sharepoint.com\u002Fsites\u002FOperations",", library empty, and the three\nvalues of the app. ",[18,632,279],{},", then save.",[156,635,618,636,621,639,641,642,645],{},[77,637,638],{},"Operations \u002F Tables",[18,640,67],{},", name\n",[77,643,644],{},"stock_counts_2026",", the SharePoint connection.",[156,647,648,649,652,653,655,656,658,659,170],{},"Path ",[77,650,651],{},"Magazzino\u002FInventari\u002F2026\u002Finventario_*.xlsx",", format ",[18,654,384],{},". ",[18,657,369],{},"\nlists the workbooks found; the sheet field now offers their sheets: choose\n",[77,660,564],{},[156,662,663,666,667,669,670,673],{},[18,664,665],{},"Create & import",". The table holds every depot's rows, with ",[77,668,472],{},"\n(",[77,671,672],{},"Magazzino\u002FInventari\u002F2026\u002Finventario_napoli_2026-03.xlsx",") telling them apart.",[156,675,676,553,679,682],{},[18,677,678],{},"Schedule automatic refresh (cron)",[77,680,681],{},"0 7 * * 1-5",", every working day at seven.",[14,684,685,686,688,689,692,693,170],{},"A flow can then take the depot from ",[77,687,472],{}," (a regular expression on the name) and join\nthe stock with the ",[77,690,691],{},"products"," datasource on ",[77,694,574],{},[14,696,697],{},"To read the files of the last three months by their name, with a variable instead of a\nglob over the whole year:",[699,700,706],"pre",{"className":701,"code":703,"language":704,"meta":705},[702],"language-text","Variables:   month = today-3m .. today step 1m\nPath:        Magazzino\u002FInventari\u002F{month:yyyy}\u002Finventario_*_{month:yyyy-MM}.xlsx\nRefresh:     append by key, keys: _file\n","text","",[77,707,703],{"__ignoreMap":705},[14,709,710,713],{},[77,711,712],{},"month"," takes three values, from three months ago to last month (the current month is\nexcluded). Every refresh reads those files again: a corrected file replaces all its old\nrows, the files of older months stay in the table, and a month without a file is listed\non the run instead of failing it (only no file at all fails the refresh).",[27,715,129],{"id":716},"permissions",[32,718,719,729],{},[35,720,721],{},[38,722,723,726],{},[41,724,725],{},"To",[41,727,728],{},"You need",[46,730,731,739,746,754,762],{},[38,732,733,736],{},[51,734,735],{},"Create, test, change or delete the connection",[51,737,738],{},"CONNECT on its folder",[38,740,741,743],{},[51,742,369],{},[51,744,745],{},"CONNECT on the connection's folder",[38,747,748,751],{},[51,749,750],{},"Create the datasource",[51,752,753],{},"CONNECT on the connection's folder and EDIT on the destination folder",[38,755,756,759],{},[51,757,758],{},"Refresh it, schedule it",[51,760,761],{},"RUN on its folder and CONNECT on the connection's folder",[38,763,764,767],{},[51,765,766],{},"Read it in flows, views, scripts",[51,768,769],{},"VIEW on its folder",[14,771,772],{},"What the app can read on SharePoint is decided in Entra ID (the site grant); who in\nTabularia can read through it is decided by CONNECT. Give CONNECT on the connection's\nfolder to the people who may see that site's files.",[27,774,776],{"id":775},"limits-and-good-to-know","Limits and good to know",[466,778,779,797,807,813,819,825],{},[156,780,781,784,785,788,789,792,793,796],{},[18,782,783],{},"Caps",", fixed: at most ",[18,786,787],{},"500 files"," per refresh, a glob that walks more than\n",[18,790,791],{},"2,000 folders"," stops, and the matching files together may weigh at most ",[18,794,795],{},"2 GB",".\nEach workbook is read whole in memory by the worker.",[156,798,799,802,803,806],{},[18,800,801],{},"Throttling",": when Microsoft answers 429 or 503, a request is retried up to three\ntimes, waiting what ",[77,804,805],{},"Retry-After"," says (30 seconds at most each time). A token is\nreused until a minute before it expires.",[156,808,809,812],{},[18,810,811],{},"Sheet",": an empty sheet field reads the first sheet of each workbook, hidden or not\n(an upload in the flow editor skips a hidden first sheet; this datasource does not).\nName the sheet when the workbooks start with a hidden one.",[156,814,815,818],{},[18,816,817],{},"The source is fixed",": the path, format and sheet cannot be changed once the\ndatasource exists; create another one.",[156,820,821,824],{},[18,822,823],{},"Not tried on a production tenant",": the connector follows the documented Microsoft\nGraph API and is tested against a simulation of it. Try it on your tenant before\nrelying on a schedule.",[156,826,827],{},"OpenLineage reports a SharePoint refresh with the file path as its input; the dbt\nexport turns a SharePoint datasource into a seed.",[27,829,831],{"id":830},"related","Related",[466,833,834,841,847,858,865],{},[156,835,836,840],{},[313,837,839],{"href":838},"\u002Fdocs\u002Fsources","All sources",": snapshots, refreshes, descriptions, contracts, permissions.",[156,842,843,846],{},[313,844,845],{"href":425},"Dynamic dates",": placeholders, variables, append by key.",[156,848,849,307,853,857],{},[313,850,852],{"href":851},"\u002Fdocs\u002Fsftp","SFTP folders",[313,854,856],{"href":855},"\u002Fdocs\u002Fs3-datasource","S3 buckets",": the same file rules on other storage.",[156,859,860,864],{},[313,861,863],{"href":862},"\u002Fdocs\u002Fsources\u002Ffiles","Uploaded files",": a one-off workbook from your computer.",[156,866,867,170],{},[313,868,870],{"href":869},"\u002Fdocs\u002Fconnections","Connections",{"title":705,"searchDepth":872,"depth":873,"links":874},2,3,[875,876,877,878,882,883,884,885],{"id":29,"depth":872,"text":30},{"id":143,"depth":872,"text":144},{"id":203,"depth":872,"text":204},{"id":319,"depth":872,"text":320,"children":879},[880,881],{"id":453,"depth":873,"text":454},{"id":497,"depth":873,"text":498},{"id":537,"depth":872,"text":538},{"id":716,"depth":872,"text":129},{"id":775,"depth":872,"text":776},{"id":830,"depth":872,"text":831},"A SharePoint connection reads the Excel and CSV files of a document library through\nMicrosoft Graph, with an application registered in Entra ID. A SharePoint datasource\ntakes the files that match a path or a glob, stacks them into one table, and keeps it as\na snapshot, refreshed by hand or on a schedule. It suits the workbooks finance and\noperations keep on SharePoint: monthly closings, budgets, stock counts.","md",{"source":889},"docs\u002Fsources\u002Fsharepoint.md",true,"\u002Fdocs\u002Fsources\u002Fsharepoint",{"title":5,"description":886},"docs\u002Fsources\u002Fsharepoint","JotOun4x0SoLanZk_SHzIx6xgxEr9VGFGjQh80eoENI",[896,915,969,991,1020,1049,1074,1099],{"title":897,"icon":898,"intro":899,"items":900},"Getting started","start","Install it on one machine, learn the few ideas everything else is built on, and run a first flow.",[901,903,906,909,912],{"path":902,"title":897},"\u002Fdocs\u002Fgetting-started",{"path":904,"title":905},"\u002Fdocs\u002Fgetting-started-docker-compose","Walkthrough with Docker Compose",{"path":907,"title":908},"\u002Fdocs\u002Fdeploy\u002Fminikube","Try it on your computer (minikube)",{"path":910,"title":911},"\u002Fdocs\u002Fconcepts","Concepts",{"path":913,"title":914},"\u002Fdocs\u002Foverview","Overview (README)",{"title":916,"icon":917,"intro":918,"items":919},"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.",[920,923,926,929,932,935,938,941,944,947,950,953,956,959,962,963,966],{"path":921,"title":922},"\u002Fdocs\u002Fcapabilities","All capabilities",{"path":924,"title":925},"\u002Fdocs\u002Fcapabilities\u002Fflows","Low-code flows",{"path":927,"title":928},"\u002Fdocs\u002Fcapabilities\u002Fpreview-and-analysis","Preview and analysis",{"path":930,"title":931},"\u002Fdocs\u002Fcapabilities\u002Fask-your-data","Ask your data with AI",{"path":933,"title":934},"\u002Fdocs\u002Fcapabilities\u002Freports","Pixel-perfect reports",{"path":936,"title":937},"\u002Fdocs\u002Fcapabilities\u002Freport-functions","Report functions",{"path":939,"title":940},"\u002Fdocs\u002Fcapabilities\u002Fdashboards","Dashboards",{"path":942,"title":943},"\u002Fdocs\u002Fscripting","Python and R",{"path":945,"title":946},"\u002Fdocs\u002Fsql-scripts","SQL scripts",{"path":948,"title":949},"\u002Fdocs\u002Fcapabilities\u002Fnotebooks","marimo notebooks as apps",{"path":951,"title":952},"\u002Fdocs\u002Fcontainer-node","Docker images in flows",{"path":954,"title":955},"\u002Fdocs\u002Fcapabilities\u002Fflow-groups","Flow groups: orchestration",{"path":957,"title":958},"\u002Fdocs\u002Fcapabilities\u002Fscheduling","Scheduling",{"path":960,"title":961},"\u002Fdocs\u002Fpushmail","Pushmail: datasources, reports and dashboards by email",{"path":425,"title":845},{"path":964,"title":965},"\u002Fdocs\u002Fcapabilities\u002Fengines","Engines",{"path":967,"title":968},"\u002Fdocs\u002Fengines\u002Fengine-differences","Engine differences",{"title":970,"icon":971,"intro":972,"items":973},"Sources","sources","Every way data comes in: files, databases, buckets, SFTP folders, HTTP APIs, SharePoint, Google Sheets, and the results of your own flows.",[974,975,976,979,980,981,984,985,988],{"path":838,"title":839},{"path":862,"title":863},{"path":977,"title":978},"\u002Fdocs\u002Fsources\u002Fdatabases","Database tables and queries",{"path":855,"title":856},{"path":851,"title":852},{"path":982,"title":983},"\u002Fdocs\u002Fapi-datasource","HTTP APIs",{"path":891,"title":5},{"path":986,"title":987},"\u002Fdocs\u002Fsources\u002Fgoogle-sheets","Google Sheets",{"path":989,"title":990},"\u002Fdocs\u002Fsources\u002Fflow-outputs","Results of flows and scripts",{"title":870,"icon":992,"intro":993,"items":994},"connections","The systems Tabularia reads from and writes to, how each connection is set up, and who may use it.",[995,997,1000,1003,1006,1008,1009,1010,1011,1014,1017],{"path":869,"title":996},"All connections",{"path":998,"title":999},"\u002Fdocs\u002Fconnections\u002Fdatabases","Databases",{"path":1001,"title":1002},"\u002Fdocs\u002Fsqlserver","Microsoft SQL Server driver",{"path":1004,"title":1005},"\u002Fdocs\u002Fconnections\u002Fs3","S3 and compatible storage",{"path":851,"title":1007},"SFTP servers",{"path":982,"title":983},{"path":891,"title":214},{"path":986,"title":987},{"path":1012,"title":1013},"\u002Fdocs\u002Fconnections\u002Fsmtp","SMTP email",{"path":1015,"title":1016},"\u002Fdocs\u002Fcontainer-registries","Container registries",{"path":1018,"title":1019},"\u002Fdocs\u002Fconnections\u002Fdestinations","Writing data out",{"title":1021,"icon":1022,"intro":1023,"items":1024},"Integrations","integrations","How Tabularia fits your stack: AI providers, the REST API and webhooks, dbt, OpenLineage, single sign-on, SIEM and monitoring.",[1025,1028,1031,1034,1037,1040,1043,1046],{"path":1026,"title":1027},"\u002Fdocs\u002Fintegrations","All integrations",{"path":1029,"title":1030},"\u002Fdocs\u002Fintegrations\u002Fai","AI: where it is used",{"path":1032,"title":1033},"\u002Fdocs\u002Fapi","API, tokens and webhooks",{"path":1035,"title":1036},"\u002Fdocs\u002Fdbt-export","Export to dbt",{"path":1038,"title":1039},"\u002Fdocs\u002Fopenlineage","OpenLineage",{"path":1041,"title":1042},"\u002Fdocs\u002Fsso-keycloak","Single sign-on with Keycloak",{"path":1044,"title":1045},"\u002Fdocs\u002Fsiem-splunk","Audit log to Splunk",{"path":1047,"title":1048},"\u002Fdocs\u002Fintegrations\u002Fmonitoring","Monitoring",{"title":1050,"icon":1051,"intro":1052,"items":1053},"Security & governance","governance","Who may see and do what, what is recorded, and how data quality and personal data are kept in check.",[1054,1057,1059,1062,1065,1068,1071],{"path":1055,"title":1056},"\u002Fdocs\u002Fgovernance","Overview",{"path":1058,"title":129},"\u002Fdocs\u002Fgovernance\u002Fpermissions",{"path":1060,"title":1061},"\u002Fdocs\u002Fgovernance\u002Faudit-log","Audit log",{"path":1063,"title":1064},"\u002Fdocs\u002Fgovernance\u002Fdata-contracts","Data contracts",{"path":1066,"title":1067},"\u002Fdocs\u002Fdesign\u002Fsso-group-mapping","SSO and group mapping",{"path":1069,"title":1070},"\u002Fdocs\u002Fexamples\u002Fkeycloak","Keycloak example on a laptop",{"path":1072,"title":1073},"\u002Fdocs\u002Fengines\u002Fclickhouse-ai-user","A ClickHouse user for the AI assistant",{"title":1075,"icon":1076,"intro":1077,"items":1078},"Install & operate","operate","Run it in production on Kubernetes, configure it, upgrade it and keep it healthy.",[1079,1082,1085,1088,1091,1093,1096],{"path":1080,"title":1081},"\u002Fdocs\u002Fdeploy\u002Fkubernetes","Kubernetes and Helm",{"path":1083,"title":1084},"\u002Fdocs\u002Fdeploy\u002Fkind","A company-like cluster on one computer (kind)",{"path":1086,"title":1087},"\u002Fdocs\u002Fdeploy\u002Fupgrading","Upgrading, backups and restore",{"path":1089,"title":1090},"\u002Fdocs\u002Fdeploy\u002Frelease-checklist","Install and upgrade checklist",{"path":315,"title":1092},"Configuration reference",{"path":1094,"title":1095},"\u002Fdocs\u002Fengine-settings","Settings from the panel",{"path":1097,"title":1098},"\u002Fdocs\u002Fdatabase-migrations","Database migrations",{"title":1100,"icon":1101,"intro":1102,"items":1103},"Reference","reference","Release process and the remaining reference pages.",[1104],{"path":1105,"title":1106},"\u002Fdocs\u002Frelease-process","Release process",1793656371865]