Relational engine
Connect MariaDB to Excel, Google Sheets, AI and REST
MySQL-compatible relational engine. Drop-in for most MySQL workloads, including SkySQL and self-hosted clusters.
One connection, every surface
Where your MariaDB data can go
- 1 outbound connection
- 0 inbound ports
- read-only · credentials stay put
runs on
- For your team, vendors and partners
-
Excel add-in · refresh on demand
-
Google Sheets add-on · refresh on demand
-
Nova AI ask in plain English · text to SQL
-
Data Viewer share live results · team, vendors, partners · any device
- For apps and systems
-
REST API JSON endpoint · OpenAPI 3.1
-
Power BI Power Query M
-
Scheduled syncs Google Sheets · Airtable · Baserow · SeaTable · Smartsheet · Anvil
- For AI tools
-
AI assistants Claude · Cursor · MCP server
- Delivered to people
-
Alerts & reports Slack · Discord · Email · Webhook
Query Streams reads a MariaDB database as live SQL from Microsoft Excel, Google Sheets, Power BI, AI assistants over MCP and a REST endpoint. A self-hosted agent connects out from inside your network on port 3306 — no inbound port, no VPN, no IP allowlist. MariaDB is recognised as itself rather than treated as MySQL with a different label: the agent reads the server banner on connect and reports the real product and version, so you are never debugging against the wrong documentation.
- For your team, vendors and partners
-
MariaDB to Excel Microsoft Excel · Excel add-in
Pull live MariaDB results straight into a worksheet and refresh them on demand — desktop Excel, Excel Online, Microsoft 365.
MariaDB guide -
MariaDB to Google Sheets Sheets add-on
Run a saved MariaDB query from the sidebar and drop the rows into the sheet. Shared collaborators can refresh it themselves.
MariaDB guide -
Ask Nova about MariaDB Nova AI · text to SQL
Ask a question in plain English. Nova already knows your MariaDB tables, writes and runs the SQL, explains the answer and charts it — no query to write, no credentials to hand over.
How Nova works -
MariaDB to Data Viewer result sharing · team, vendors, partners · phone, tablet, desktop
Share a live MariaDB result with anyone — a colleague, a vendor, a partner — as a bookmarkable grid that re-runs fresh when opened, on a phone, a tablet or a desktop. They see the results, never the SQL or the credentials.
How the Data Viewer works - For apps and systems
-
MariaDB REST API HTTP endpoint
Publish a MariaDB query as an authenticated JSON endpoint any application can call, with an OpenAPI 3.1 spec and ready-made Postman, Insomnia and Hoppscotch collections. No database port is opened.
MariaDB guide -
MariaDB to Power BI Power Query M
Paste the generated Power Query M into the Power BI Advanced Editor and the report reads live MariaDB results over HTTPS — no ODBC driver, no database port opened.
How Power BI works -
MariaDB to Airtable Automation platform
Sync MariaDB rows into an Airtable base on a schedule, or fetch them inside an Airtable automation script.
MariaDB guide -
MariaDB to Baserow Automation platform
Feed a Baserow table from MariaDB over the REST endpoint — self-hosted or Baserow cloud.
MariaDB guide -
MariaDB to SeaTable Automation platform
Keep a SeaTable base current with MariaDB data without exporting a file or exposing the database.
MariaDB guide -
MariaDB to Smartsheet Automation platform
Push MariaDB results into a Smartsheet grid so plans and reports read from the source system, not last week's export.
MariaDB guide -
MariaDB to Anvil Anvil Works · App platform
Back an Anvil Python app with MariaDB through the REST endpoint instead of embedding database credentials in the app.
MariaDB guide - For AI tools
-
MariaDB MCP server Claude, Cursor and MCP clients
Give an AI assistant read-only access to MariaDB with the schema it needs to write correct SQL — no credentials in the chat.
MariaDB guide - Delivered to people
-
MariaDB alerts and reports Slack · Discord · Email · Webhook
Put a MariaDB query on a schedule and have the rows delivered to Slack, Discord, email or a signed webhook — or hold the message until a row count, threshold or percentage change crosses the line you set.
How alerts and reports work
How it works
5 steps, no inbound firewall change
Install the Network Agent on a machine that can already reach the server — a self-hosted cluster, SkySQL, or a container on the same host.
Enter host, port, database, user and password. Turn TLS on if the server offers it; client certificates are accepted if it requires them.
The agent reads the server banner and confirms it is MariaDB rather than MySQL, then reads the table and column layout so the Query Builder can offer real names.
Write read-only SQL, or let Nova write it. Filters can be @variables you declare or literal values the connector spots in your WHERE clause.
Read the saved query from Excel, Sheets, Power BI, MCP or REST — and share it with someone who never sees the statement.
Feature deep-dive
What MariaDB gives you
The awkward parts of real MariaDB data
MariaDB inherits MySQL's permissive corners, and long-lived schemas are full of them. These are handled rather than avoided.
- Zero dates — '0000-00-00' is legal and fatal in most clients. It is read as an empty date instead of taking the whole query down.
- tinyint means tinyint — tinyint(1) is the conventional boolean and arrives as true or false, but a plain tinyint stays a small integer.
- Exact decimals — a DECIMAL column keeps the precision and scale you declared. Money does not become a float on the way out.
- utf8mb4 by default, so emoji and the full range of CJK characters survive.
- Cross-database joins work on one connection — if the login can see two databases on the same server, one query can read both.
If a login fails naming a plugin you have never configured
Worth knowing before you spend an afternoon on it. MariaDB answers a login attempt for an account it does not recognise with a fabricated handshake — deliberately, so that an attacker cannot use error messages to work out which usernames exist. The plugin it names is often auth_gssapi_client, which makes the failure read like a Kerberos problem it has nothing to do with.
- It is a server behaviour, not a Query Streams one. It means the account does not exist, or is not granted from the host the agent is running on.
- An account that does exist fails with a plain access-denied instead, which makes the two easy to tell apart: try a deliberately wrong password for a username you know is real.
- The fix is on the server — create the user, and grant it from the agent's hostname or from '%'.
Federated joins use the database name
MariaDB has no schema layer between the database and the table, so in a cross-source query the middle part of a three-part name is the database itself.
-- shop_prod is the connection, sales is the MariaDB database
SELECT c.region, COUNT(*) AS orders
FROM shop_prod.sales.orders o
JOIN pg_crm.public.customers c ON c.id = o.customer_id
GROUP BY c.region
Shared by every database connector
True of every database connector
- Outbound only — the agent opens one encrypted connection out to Query Streams. No inbound port to forward, no VPN, no IP allowlist, nothing about your database exposed to the internet.
- Credentials stay put — the database username and password live on the machine you installed the agent on. Query Streams never receives them and cannot reach your database on its own.
- Read-only, enforced — one statement at a time, SELECT and friends only. A write is rejected on your own machine before it is ever sent to the server, rather than relying on a permission somebody remembered to set.
- Deploy as many agents as you like — one per site, region or cloud. Every data source they can see arrives in a single dropdown, so nobody has to know which agent hosts what.
What you get once a query is saved
- Share the capability, not the SQL — a colleague or an outside partner can run your query and change its filters without ever seeing the statement behind it.
- Filters from either direction — declare them yourself as @variables, or let the connector spot the literal values already sitting in your WHERE clause and offer those as dropdowns.
- Read it from anywhere — Microsoft Excel, Google Sheets, Power BI, the REST API, AI assistants over MCP, the Query Builder and Nova all read the same saved query.
- Run several at once — five saved queries into five worksheet tabs, streamed concurrently, however large the results.
- Join it to anything else you have connected — another database, a business API, or a folder of files, in one read-only statement.
Cross-source SQL
Join MariaDB to the rest of your data
One statement can span MariaDB and your other connections at once. Each source runs only the part it can, streams the result back, and the join happens centrally — the sources never talk to each other and nothing is copied anywhere.
3 connections · 3 agents
One statement
-- nothing copied, nothing merged, nothing scheduled
SELECT c.region, COUNT(*) AS orders, SUM(i.amount_due) AS invoiced
FROM shop_prod.shopdb.orders1 f
JOIN pg_crm.public.customers2 c ON c.id = f.customer_id
JOIN billing.stripe.invoices3 i ON i.customer = c.stripe_id
GROUP BY c.region
ORDER BY invoiced DESC;
The three parts are connection, schema and table — and the connection name is whatever you called it. Illustrative columns; your tables will be your tables. Read-only applies to every piece: SELECT, WITH and EXPLAIN only, with a ceiling on how much any one source may hand over for a single query. How federated queries work
Connection details
What MariaDB needs
- Port
- 3306 by default, any port accepted
- Encryption
- TLS optional — off unless you tick it, required rather than preferred once you do. CA, client certificate and key accepted
- Credentials
- A database username and password, held on the agent. Query Streams never receives them
- Driver
- MySqlConnector 2.5.0, bundled — nothing to install on the server or the client
- Server detection
- The banner is read on connect, so the product and version reported back are MariaDB's own
- Character set
- utf8mb4, so emoji and full CJK survive the round trip
- Legacy dates
- '0000-00-00' is read as an empty date instead of throwing
- Timeouts
- 30 seconds to connect, 30 seconds per statement while streaming
- Read-only
- Enforced on your own machine before the statement is sent to the server
MariaDB and MySQL share a wire protocol, so they share a driver here, but they are not treated as the same product. The agent reads the server banner on every connection test and reports MariaDB's own version string, which matters the moment you need to know whether a function you are about to use exists on your side of the fork.
In a cross-source query the middle part of a three-part reference is the MariaDB database name, because MariaDB has no separate schema layer. A connection called shop_prod reading the sales database is written shop_prod.sales.orders.
Vendor documentation: mariadb.org
FAQ
Questions about MariaDB
Which tools can read MariaDB data through Query Streams?
All of them, from one connection: Excel, Google Sheets, MCP, REST API, Airtable, Baserow, SeaTable, Smartsheet, Anvil, Power BI, scheduled alerts and reports. Connect the database once and every surface reads the same read-only connection — there is no per-tool setup and no second copy of the data.
Do I have to open a firewall port to my MariaDB database?
No. The Query Streams Network Agent runs inside your network and opens a single outbound encrypted connection. Nothing listens for inbound traffic, no VPN is required, and the database keeps its existing firewall rules.
Can Query Streams change data in MariaDB?
No. The agent enforces read-only at the point of execution — one statement at a time, SELECT and friends only. Credentials stay on the agent and are never sent to Query Streams.
What does Query Streams need to connect to MariaDB?
A reachable host, a role and its password — the agent carries the driver, so nothing is installed on the database. Port: 3306 by default, any port accepted. Encryption: TLS optional — off unless you tick it, required rather than preferred once you do. CA, client certificate and key accepted. Credentials: A database username and password, held on the agent. Query Streams never receives them. Driver: MySqlConnector 2.5.0, bundled — nothing to install on the server or the client.
Can I join MariaDB to another database in the same query?
Yes — that is a federated query. One statement can reference MariaDB and your other connections at once, written as connection.schema.table. Each source runs only the part it can and streams the result back; the join happens centrally, so the sources never connect to each other and nothing is copied or scheduled. Read-only applies to every piece — SELECT, WITH and EXPLAIN only — and there is a ceiling on how much any one source may hand over for a single query. Federated queries are a plan feature; the federated queries page carries the current source and size limits.
Put MariaDB where the work happens
Install the agent, point it at your database, and pick a destination.
Read-only Outbound only Credentials stay on the agent

