[{"data":1,"prerenderedAt":860},["ShallowReactive",2],{"doc:\u002Fdocs\u002Fsqlserver":3,"docs-nav":635},{"id":4,"title":5,"body":6,"description":626,"extension":627,"meta":628,"navigation":630,"path":631,"seo":632,"stem":633,"__hash__":634},"docs\u002Fdocs\u002Fsqlserver.md","Microsoft SQL Server: the driver you add yourself",{"type":7,"value":8,"toc":615},"minimark",[9,13,28,34,39,62,77,89,93,125,129,136,141,144,185,218,229,296,300,306,355,373,379,383,386,504,508,534,545,549,556,576,611],[10,11,5],"h1",{"id":12},"microsoft-sql-server-the-driver-you-add-yourself",[14,15,16,17,22,23,27],"p",{},"Tabularia reads tables, views and SQL queries from Microsoft SQL Server (tried on\nSQL Server 2022), refreshes them and schedules them like the other\n",[18,19,21],"a",{"href":20},"\u002Fdocs\u002Fsources\u002Fdatabases","databases",". It does\nso through ",[24,25,26],"strong",{},"mssql-python",", Microsoft's driver, which streams the results as Arrow\nbatches.",[14,29,30,33],{},[24,31,32],{},"The images Tabularia publishes do not contain that driver."," If you use SQL Server,\nyou add it to your own image, as described below. Everything else about SQL Server\nworks the same once the driver is there.",[35,36,38],"h2",{"id":37},"why-it-is-not-in-the-images","Why it is not in the images",[14,40,41,44,45,48,49,52,53,57,58,61],{},[42,43,26],"code",{}," itself is MIT-licensed, but it depends on ",[42,46,47],{},"mssql-python-odbc",": the\n",[24,50,51],{},"Microsoft ODBC Driver 18 for SQL Server",", which is ",[54,55,56],"em",{},"proprietary"," software under\nMicrosoft's own licence (",[42,59,60],{},"MICROSOFT_ODBC_DRIVER_FOR_SQL_SERVER_LICENSE.txt",", shipped\nwith the package). That licence allows redistributing the driver only on conditions\nan AGPL-3.0 project cannot meet: the end users must accept terms that protect\nMicrosoft, the distributor must indemnify Microsoft, and the driver must never be\ndistributed in a way that puts it under a licence requiring source disclosure, which\nAGPL-3.0 is.",[14,63,64,65,68,69,72,73,76],{},"So the driver is ",[24,66,67],{},"Microsoft's, under Microsoft's licence",", and ",[24,70,71],{},"whoever installs it\naccepts that licence directly with Microsoft",". Tabularia does not distribute it.\nRead the licence before you install it: it is in the package, under\n",[42,74,75],{},"mssql_python_odbc\u002Flicenses\u002F",".",[14,78,79,80,83,84,88],{},"The release workflow enforces this: every release image is checked for packages\nwhose licence an AGPL-3.0 image cannot carry, and the release stops if it finds one\n(",[42,81,82],{},".github\u002Fscripts\u002Fimage_licence_check.py",", see\n",[18,85,87],{"href":86},"\u002Fdocs\u002Frelease-process","release-process.md",").",[35,90,92],{"id":91},"without-the-driver","Without the driver",[94,95,96,108,115],"ul",{},[97,98,99,100,103,104,107],"li",{},"The connection type ",[24,101,102],{},"Microsoft SQL Server"," stays in the list, marked ",[54,105,106],{},"not\ninstalled here",", and the connection form says so with a link to this page. You can\nstill create and save a SQL Server connection, so the configuration is ready the day\nthe driver is added.",[97,109,110,111,114],{},"Testing the connection, listing its tables or importing from it gives one message,\nin the user's language: ",[54,112,113],{},"the SQL Server driver is not installed in this\ninstallation",", with this page. Nothing else changes, and no other database is\naffected.",[97,116,117,118,121,122,76],{},"The engine says which optional drivers it has at ",[42,119,120],{},"GET \u002Fdb\u002Fdrivers"," (internal); the\ngateway relays it at ",[42,123,124],{},"GET \u002Fconnections\u002Fdrivers",[35,126,128],{"id":127},"adding-the-driver","Adding the driver",[14,130,131,132,135],{},"The driver goes into the ",[24,133,134],{},"backend"," image, the one the engine API, the workers and\nbeat all run. The gateway and the frontend images do not change. Pick one of the three\nways below.",[137,138,140],"h3",{"id":139},"a-build-the-backend-from-source-with-the-driver","a. Build the backend from source, with the driver",[14,142,143],{},"From a checkout of the release tag:",[145,146,151],"pre",{"className":147,"code":148,"language":149,"meta":150,"style":150},"language-bash shiki shiki-themes github-dark-dimmed github-light","docker build --build-arg WITH_MSSQL=true -t registry.example.com\u002Ftabularia-backend:1.3.0-mssql backend\u002F\n","bash","",[42,152,153],{"__ignoreMap":150},[154,155,158,162,166,170,173,176,179,182],"span",{"class":156,"line":157},"line",1,[154,159,161],{"class":160},"sqRhv","docker",[154,163,165],{"class":164},"sXfbr"," build",[154,167,169],{"class":168},"swcJU"," --build-arg",[154,171,172],{"class":164}," WITH_MSSQL=",[154,174,175],{"class":168},"true",[154,177,178],{"class":168}," -t",[154,180,181],{"class":164}," registry.example.com\u002Ftabularia-backend:1.3.0-mssql",[154,183,184],{"class":164}," backend\u002F\n",[14,186,187,190,191,194,195,198,199,201,202,205,206,209,210,213,214,217],{},[42,188,189],{},"WITH_MSSQL=true"," installs the ",[42,192,193],{},"sqlserver"," extra of ",[42,196,197],{},"backend\u002Fpyproject.toml","\n(",[42,200,26],{}," and, with it, Microsoft's ODBC driver) at the versions pinned in\n",[42,203,204],{},"backend\u002Fuv.lock",". The system libraries the driver needs on Linux (",[42,207,208],{},"libltdl7",",\n",[42,211,212],{},"libkrb5-3",", ",[42,215,216],{},"libgssapi-krb5-2",", all open source) are already in every image.",[14,219,220,221,224,225,228],{},"For the ",[24,222,223],{},"development"," stack (",[42,226,227],{},"infrastructure\u002Fdocker-compose.yml",") the same switch is\nan environment variable, off by default so that development runs what is published:",[145,230,232],{"className":147,"code":231,"language":149,"meta":150,"style":150},"cd infrastructure\nWITH_MSSQL=true docker compose build backend worker preview-worker beat\ndocker compose up -d backend worker preview-worker beat\n",[42,233,234,242,275],{"__ignoreMap":150},[154,235,236,239],{"class":156,"line":157},[154,237,238],{"class":168},"cd",[154,240,241],{"class":164}," infrastructure\n",[154,243,245,249,253,255,258,261,263,266,269,272],{"class":156,"line":244},2,[154,246,248],{"class":247},"ssh_m","WITH_MSSQL",[154,250,252],{"class":251},"s6PUj","=",[154,254,175],{"class":164},[154,256,257],{"class":160}," docker",[154,259,260],{"class":164}," compose",[154,262,165],{"class":164},[154,264,265],{"class":164}," backend",[154,267,268],{"class":164}," worker",[154,270,271],{"class":164}," preview-worker",[154,273,274],{"class":164}," beat\n",[154,276,278,280,282,285,288,290,292,294],{"class":156,"line":277},3,[154,279,161],{"class":160},[154,281,260],{"class":164},[154,283,284],{"class":164}," up",[154,286,287],{"class":168}," -d",[154,289,265],{"class":164},[154,291,268],{"class":164},[154,293,271],{"class":164},[154,295,274],{"class":164},[137,297,299],{"id":298},"b-extend-the-published-image","b. Extend the published image",[14,301,302,303,305],{},"A short Dockerfile on top of the published backend image, with the version of the\ndriver the release was tested with (",[42,304,26],{}," 1.15.0):",[145,307,311],{"className":308,"code":309,"language":310,"meta":150,"style":150},"language-dockerfile shiki shiki-themes github-dark-dimmed github-light","# the release you run, 1.1.1 or later\nFROM jumpasaservice\u002Ftabularia-backend:1.3.0\nUSER root\nRUN pip --python \u002Fopt\u002Fvenv\u002Fbin\u002Fpython install --no-cache-dir \"mssql-python==1.15.0\"\nUSER 10001:10001\n","dockerfile",[42,312,313,319,327,335,347],{"__ignoreMap":150},[154,314,315],{"class":156,"line":157},[154,316,318],{"class":317},"sgHix","# the release you run, 1.1.1 or later\n",[154,320,321,324],{"class":156,"line":244},[154,322,323],{"class":251},"FROM",[154,325,326],{"class":247}," jumpasaservice\u002Ftabularia-backend:1.3.0\n",[154,328,329,332],{"class":156,"line":277},[154,330,331],{"class":251},"USER",[154,333,334],{"class":247}," root\n",[154,336,338,341,344],{"class":156,"line":337},4,[154,339,340],{"class":251},"RUN",[154,342,343],{"class":247}," pip --python \u002Fopt\u002Fvenv\u002Fbin\u002Fpython install --no-cache-dir ",[154,345,346],{"class":164},"\"mssql-python==1.15.0\"\n",[154,348,350,352],{"class":156,"line":349},5,[154,351,331],{"class":251},[154,353,354],{"class":247}," 10001:10001\n",[145,356,358],{"className":147,"code":357,"language":149,"meta":150,"style":150},"docker build -t registry.example.com\u002Ftabularia-backend:1.3.0-mssql .\n",[42,359,360],{"__ignoreMap":150},[154,361,362,364,366,368,370],{"class":156,"line":157},[154,363,161],{"class":160},[154,365,165],{"class":164},[154,367,178],{"class":168},[154,369,181],{"class":164},[154,371,372],{"class":164}," .\n",[14,374,375,376,378],{},"The image keeps everything else of the published one: user 10001, read-only root\nfilesystem, the same commands for the four roles. When you upgrade Tabularia, change\nthe ",[42,377,323],{}," line and build again.",[137,380,382],{"id":381},"c-point-your-deployment-at-your-image","c. Point your deployment at your image",[14,384,385],{},"Push the image to your registry, then run it everywhere the backend image runs: the\nengine API, both workers and beat.",[94,387,388,398],{},[97,389,390,393,394,397],{},[24,391,392],{},"Docker Compose",": set ",[42,395,396],{},"image:"," of those four services to your image.",[97,399,400,403,404,407,408,498,501,502,88],{},[24,401,402],{},"Helm",": the chart joins ",[42,405,406],{},"image.registry"," with each component's repository. To\ntake only the backend from your registry and the rest from Docker Hub, leave the\nregistry empty and give full repositories:",[145,409,413],{"className":410,"code":411,"language":412,"meta":150,"style":150},"language-yaml shiki shiki-themes github-dark-dimmed github-light","image:\n  registry: \"\"\n  backend:\n    repository: registry.example.com\u002Ftabularia-backend\n    tag: \"1.3.0-mssql\"\n  gateway:\n    repository: jumpasaservice\u002Ftabularia-gateway\n  frontend:\n    repository: jumpasaservice\u002Ftabularia-frontend\n","yaml",[42,414,415,424,435,442,452,462,470,480,488],{"__ignoreMap":150},[154,416,417,421],{"class":156,"line":157},[154,418,420],{"class":419},"shb1k","image",[154,422,423],{"class":247},":\n",[154,425,426,429,432],{"class":156,"line":244},[154,427,428],{"class":419},"  registry",[154,430,431],{"class":247},": ",[154,433,434],{"class":164},"\"\"\n",[154,436,437,440],{"class":156,"line":277},[154,438,439],{"class":419},"  backend",[154,441,423],{"class":247},[154,443,444,447,449],{"class":156,"line":337},[154,445,446],{"class":419},"    repository",[154,448,431],{"class":247},[154,450,451],{"class":164},"registry.example.com\u002Ftabularia-backend\n",[154,453,454,457,459],{"class":156,"line":349},[154,455,456],{"class":419},"    tag",[154,458,431],{"class":247},[154,460,461],{"class":164},"\"1.3.0-mssql\"\n",[154,463,465,468],{"class":156,"line":464},6,[154,466,467],{"class":419},"  gateway",[154,469,423],{"class":247},[154,471,473,475,477],{"class":156,"line":472},7,[154,474,446],{"class":419},[154,476,431],{"class":247},[154,478,479],{"class":164},"jumpasaservice\u002Ftabularia-gateway\n",[154,481,483,486],{"class":156,"line":482},8,[154,484,485],{"class":419},"  frontend",[154,487,423],{"class":247},[154,489,491,493,495],{"class":156,"line":490},9,[154,492,446],{"class":419},[154,494,431],{"class":247},[154,496,497],{"class":164},"jumpasaservice\u002Ftabularia-frontend\n",[499,500],"br",{},"(or mirror all three images into your registry and keep ",[42,503,406],{},[137,505,507],{"id":506},"check-it","Check it",[145,509,511],{"className":147,"code":510,"language":149,"meta":150,"style":150},"docker run --rm registry.example.com\u002Ftabularia-backend:1.3.0-mssql python -c \"import mssql_python; print('ok')\"\n",[42,512,513],{"__ignoreMap":150},[154,514,515,517,520,523,525,528,531],{"class":156,"line":157},[154,516,161],{"class":160},[154,518,519],{"class":164}," run",[154,521,522],{"class":168}," --rm",[154,524,181],{"class":164},[154,526,527],{"class":164}," python",[154,529,530],{"class":168}," -c",[154,532,533],{"class":164}," \"import mssql_python; print('ok')\"\n",[14,535,536,537,540,541,544],{},"Then, in Tabularia, the SQL Server type is no longer marked ",[54,538,539],{},"not installed here",", and\n",[24,542,543],{},"Test connection"," reaches the server.",[35,546,548],{"id":547},"the-connection","The connection",[14,550,551,552,555],{},"Host, port (1433 by default; a named instance as ",[42,553,554],{},"host\\INSTANCE"," without a port),\ndatabase, user and password, and how to encrypt: verify the server's certificate (the\ndefault), trust a self-signed one, or no encryption. The driver verifies against the\nsystem's authorities only, so the form has no certificate authority field for SQL\nServer: when your company's own authority signed the server's certificate, add it to\nthe image you build above, as root:",[145,557,559],{"className":308,"code":558,"language":310,"meta":150,"style":150},"COPY corp-root-ca.crt \u002Fusr\u002Flocal\u002Fshare\u002Fca-certificates\u002F\nRUN update-ca-certificates\n",[42,560,561,569],{"__ignoreMap":150},[154,562,563,566],{"class":156,"line":157},[154,564,565],{"class":251},"COPY",[154,567,568],{"class":247}," corp-root-ca.crt \u002Fusr\u002Flocal\u002Fshare\u002Fca-certificates\u002F\n",[154,570,571,573],{"class":156,"line":244},[154,572,340],{"class":251},[154,574,575],{"class":247}," update-ca-certificates\n",[14,577,578,579,582,583,586,587,590,591,594,595,598,599,602,603,606,607,76],{},"A SQL source is sent as written, CTEs and ",[42,580,581],{},"ORDER BY"," included, but it must be one query\nthat reads: a batch carrying ",[42,584,585],{},"; DELETE …",", or a ",[42,588,589],{},"SELECT … INTO"," that would create a\ntable, is refused before it reaches the server. Integer ",[42,592,593],{},"decimal"," up to 18 digits arrives as Int64, other decimals\nand ",[42,596,597],{},"money"," as Float64, ",[42,600,601],{},"datetimeoffset"," as UTC. An Output node ",[24,604,605],{},"Database table"," writes\ninto SQL Server too, with array inserts in one transaction: see\n",[18,608,610],{"href":609},"\u002Fdocs\u002Fconnections\u002Fdatabases#sql-server","Databases",[612,613,614],"style",{},"html pre.shiki code .sqRhv, html code.shiki .sqRhv{--shiki-default:#F69D50;--shiki-light:#6F42C1}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);}html pre.shiki code .ssh_m, html code.shiki .ssh_m{--shiki-default:#ADBAC7;--shiki-light:#24292E}html pre.shiki code .s6PUj, html code.shiki .s6PUj{--shiki-default:#F47067;--shiki-light:#D73A49}html pre.shiki code .sgHix, html code.shiki .sgHix{--shiki-default:#768390;--shiki-light:#6A737D}html pre.shiki code .shb1k, html code.shiki .shb1k{--shiki-default:#8DDB8C;--shiki-light:#22863A}",{"title":150,"searchDepth":244,"depth":277,"links":616},[617,618,619,625],{"id":37,"depth":244,"text":38},{"id":91,"depth":244,"text":92},{"id":127,"depth":244,"text":128,"children":620},[621,622,623,624],{"id":139,"depth":277,"text":140},{"id":298,"depth":277,"text":299},{"id":381,"depth":277,"text":382},{"id":506,"depth":277,"text":507},{"id":547,"depth":244,"text":548},"Tabularia reads tables, views and SQL queries from Microsoft SQL Server (tried on\nSQL Server 2022), refreshes them and schedules them like the other\ndatabases. It does\nso through mssql-python, Microsoft's driver, which streams the results as Arrow\nbatches.","md",{"source":629},"docs\u002Fsqlserver.md",true,"\u002Fdocs\u002Fsqlserver",{"title":5,"description":626},"docs\u002Fsqlserver","IRr3q8dq5ngDB-7aHbRQkil1jlphL8Fwj27a8x0_Rws",[636,655,711,742,772,801,827,853],{"title":637,"icon":638,"intro":639,"items":640},"Getting started","start","Install it on one machine, learn the few ideas everything else is built on, and run a first flow.",[641,643,646,649,652],{"path":642,"title":637},"\u002Fdocs\u002Fgetting-started",{"path":644,"title":645},"\u002Fdocs\u002Fgetting-started-docker-compose","Walkthrough with Docker Compose",{"path":647,"title":648},"\u002Fdocs\u002Fdeploy\u002Fminikube","Try it on your computer (minikube)",{"path":650,"title":651},"\u002Fdocs\u002Fconcepts","Concepts",{"path":653,"title":654},"\u002Fdocs\u002Foverview","Overview (README)",{"title":656,"icon":657,"intro":658,"items":659},"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.",[660,663,666,669,672,675,678,681,684,687,690,693,696,699,702,705,708],{"path":661,"title":662},"\u002Fdocs\u002Fcapabilities","All capabilities",{"path":664,"title":665},"\u002Fdocs\u002Fcapabilities\u002Fflows","Low-code flows",{"path":667,"title":668},"\u002Fdocs\u002Fcapabilities\u002Fpreview-and-analysis","Preview and analysis",{"path":670,"title":671},"\u002Fdocs\u002Fcapabilities\u002Fask-your-data","Ask your data with AI",{"path":673,"title":674},"\u002Fdocs\u002Fcapabilities\u002Freports","Pixel-perfect reports",{"path":676,"title":677},"\u002Fdocs\u002Fcapabilities\u002Freport-functions","Report functions",{"path":679,"title":680},"\u002Fdocs\u002Fcapabilities\u002Fdashboards","Dashboards",{"path":682,"title":683},"\u002Fdocs\u002Fscripting","Python and R",{"path":685,"title":686},"\u002Fdocs\u002Fsql-scripts","SQL scripts",{"path":688,"title":689},"\u002Fdocs\u002Fcapabilities\u002Fnotebooks","marimo notebooks as apps",{"path":691,"title":692},"\u002Fdocs\u002Fcontainer-node","Docker images in flows",{"path":694,"title":695},"\u002Fdocs\u002Fcapabilities\u002Fflow-groups","Flow groups: orchestration",{"path":697,"title":698},"\u002Fdocs\u002Fcapabilities\u002Fscheduling","Scheduling",{"path":700,"title":701},"\u002Fdocs\u002Fpushmail","Pushmail: datasources, reports and dashboards by email",{"path":703,"title":704},"\u002Fdocs\u002Fplaceholders","Dynamic dates",{"path":706,"title":707},"\u002Fdocs\u002Fcapabilities\u002Fengines","Engines",{"path":709,"title":710},"\u002Fdocs\u002Fengines\u002Fengine-differences","Engine differences",{"title":712,"icon":713,"intro":714,"items":715},"Sources","sources","Every way data comes in: files, databases, buckets, SFTP folders, HTTP APIs, SharePoint, Google Sheets, and the results of your own flows.",[716,719,722,724,727,730,733,736,739],{"path":717,"title":718},"\u002Fdocs\u002Fsources","All sources",{"path":720,"title":721},"\u002Fdocs\u002Fsources\u002Ffiles","Uploaded files",{"path":20,"title":723},"Database tables and queries",{"path":725,"title":726},"\u002Fdocs\u002Fs3-datasource","S3 buckets",{"path":728,"title":729},"\u002Fdocs\u002Fsftp","SFTP folders",{"path":731,"title":732},"\u002Fdocs\u002Fapi-datasource","HTTP APIs",{"path":734,"title":735},"\u002Fdocs\u002Fsources\u002Fsharepoint","Excel on SharePoint",{"path":737,"title":738},"\u002Fdocs\u002Fsources\u002Fgoogle-sheets","Google Sheets",{"path":740,"title":741},"\u002Fdocs\u002Fsources\u002Fflow-outputs","Results of flows and scripts",{"title":743,"icon":744,"intro":745,"items":746},"Connections","connections","The systems Tabularia reads from and writes to, how each connection is set up, and who may use it.",[747,750,752,754,757,759,760,762,763,766,769],{"path":748,"title":749},"\u002Fdocs\u002Fconnections","All connections",{"path":751,"title":610},"\u002Fdocs\u002Fconnections\u002Fdatabases",{"path":631,"title":753},"Microsoft SQL Server driver",{"path":755,"title":756},"\u002Fdocs\u002Fconnections\u002Fs3","S3 and compatible storage",{"path":728,"title":758},"SFTP servers",{"path":731,"title":732},{"path":734,"title":761},"SharePoint",{"path":737,"title":738},{"path":764,"title":765},"\u002Fdocs\u002Fconnections\u002Fsmtp","SMTP email",{"path":767,"title":768},"\u002Fdocs\u002Fcontainer-registries","Container registries",{"path":770,"title":771},"\u002Fdocs\u002Fconnections\u002Fdestinations","Writing data out",{"title":773,"icon":774,"intro":775,"items":776},"Integrations","integrations","How Tabularia fits your stack: AI providers, the REST API and webhooks, dbt, OpenLineage, single sign-on, SIEM and monitoring.",[777,780,783,786,789,792,795,798],{"path":778,"title":779},"\u002Fdocs\u002Fintegrations","All integrations",{"path":781,"title":782},"\u002Fdocs\u002Fintegrations\u002Fai","AI: where it is used",{"path":784,"title":785},"\u002Fdocs\u002Fapi","API, tokens and webhooks",{"path":787,"title":788},"\u002Fdocs\u002Fdbt-export","Export to dbt",{"path":790,"title":791},"\u002Fdocs\u002Fopenlineage","OpenLineage",{"path":793,"title":794},"\u002Fdocs\u002Fsso-keycloak","Single sign-on with Keycloak",{"path":796,"title":797},"\u002Fdocs\u002Fsiem-splunk","Audit log to Splunk",{"path":799,"title":800},"\u002Fdocs\u002Fintegrations\u002Fmonitoring","Monitoring",{"title":802,"icon":803,"intro":804,"items":805},"Security & governance","governance","Who may see and do what, what is recorded, and how data quality and personal data are kept in check.",[806,809,812,815,818,821,824],{"path":807,"title":808},"\u002Fdocs\u002Fgovernance","Overview",{"path":810,"title":811},"\u002Fdocs\u002Fgovernance\u002Fpermissions","Permissions",{"path":813,"title":814},"\u002Fdocs\u002Fgovernance\u002Faudit-log","Audit log",{"path":816,"title":817},"\u002Fdocs\u002Fgovernance\u002Fdata-contracts","Data contracts",{"path":819,"title":820},"\u002Fdocs\u002Fdesign\u002Fsso-group-mapping","SSO and group mapping",{"path":822,"title":823},"\u002Fdocs\u002Fexamples\u002Fkeycloak","Keycloak example on a laptop",{"path":825,"title":826},"\u002Fdocs\u002Fengines\u002Fclickhouse-ai-user","A ClickHouse user for the AI assistant",{"title":828,"icon":829,"intro":830,"items":831},"Install & operate","operate","Run it in production on Kubernetes, configure it, upgrade it and keep it healthy.",[832,835,838,841,844,847,850],{"path":833,"title":834},"\u002Fdocs\u002Fdeploy\u002Fkubernetes","Kubernetes and Helm",{"path":836,"title":837},"\u002Fdocs\u002Fdeploy\u002Fkind","A company-like cluster on one computer (kind)",{"path":839,"title":840},"\u002Fdocs\u002Fdeploy\u002Fupgrading","Upgrading, backups and restore",{"path":842,"title":843},"\u002Fdocs\u002Fdeploy\u002Frelease-checklist","Install and upgrade checklist",{"path":845,"title":846},"\u002Fdocs\u002Fconfiguration","Configuration reference",{"path":848,"title":849},"\u002Fdocs\u002Fengine-settings","Settings from the panel",{"path":851,"title":852},"\u002Fdocs\u002Fdatabase-migrations","Database migrations",{"title":854,"icon":855,"intro":856,"items":857},"Reference","reference","Release process and the remaining reference pages.",[858],{"path":86,"title":859},"Release process",1793656371971]