Gegevensvirtualisatie en gefedereerde query's

Eén SQL-instructie over al uw databases.

Je bestellingen staan in MySQL. Je klanten staan in PostgreSQL. De targets waar iedereen het over heeft, staan in een SQL Server-server op het hoofdkantoor. gefedereerde query waarmee je één gewone kunt schrijven SELECT die alle drie tegelijk leest en je één enkele tabel levert — geen exports, niets wordt ergens naartoe gekopieerd en er hoeft niets nieuws op je firewall geopend te worden.

On every plan, including Free · Free runs 2 sources and 250 result rows — the ceilings grow with your tier

Eén SQL-box, geen join builder. Databases in verschillende kantoren, clouds en landen. Nooit een inkomende firewallregel. Weigert liever dan te gokken

38 databaseconnectoren — maak koppelingen tussen alle connectoren, in elke gewenste combinatie.

Microsoft SQL ServerPostgreSQLMySQLMariaDBOracleSneeuwvlokGoogle BigQuerySQLiteMicrosoft AccessDuckDBSupabase

Naast hen in querystreams: 8 API-connectoren, opgevraagd met dezelfde SQL-query.

StreepHubSpotShopifyGoogle-advertentiesGoogle Analytics 4Google ZoekresultatenShipStationiTick

53 bronnen in totaal. Uw API-connectoren worden, net als al het andere, met SQL bevraagd — en een gefedereerde verklaring voegt uw database verbindingen. Zie de API-connector

Datavirtualisatie, in één zin.

Plaats de verbindingsnaam vóór de tabel.

Dat is het enige nieuwe idee op deze pagina. Elke gemarkeerde naam hieronder verwijst naar een andere database, op een andere locatie, die wordt benaderd door een andere netwerkagent – en het betreft nog steeds één query.

omzet-per-regio.sql 3 verbindingen · 3 agenten · 1 verklaring
-- één gefedereerde query · niets is ergens gekopieerd
SELECT   c.regio,
         TELL(*)      AS bestellingen,
         SUM(totaal)  AS omzet, t.target
VAN     mysql_prod.shop.orders1 o
JOIN     pg_crm.publieke.klanten2 c OP c.id = o.customer_id
JOIN     mssql_erp.dbo.region_targets3 t OP t.region = c.region
WAAR    o.placed_at >= DATUM '2026-07-01'
GROEP DOOR c.regio, t.doel
ORDER BY inkomsten DESC;
Elke database verwerkt: eigen filtering en groepering Wij verzorgen: de verbindingen ertussen en de ordening

mysql_prod, pg_crm en mssql_erp zijn simpelweg de namen die je aan je eigen connecties hebt gegeven — de drie onderdelen zijn verbinding, schema, tabelDit is wat mensen bedoelen met een gefedereerde databaseDrie afzonderlijke databases die één vraag beantwoorden, zonder dat er gegevens zijn samengevoegd of verplaatst. Illustratief schema; uw tabellen zullen uw tabellen zijn.

Waar elke naam wordt opgelost

1 MySQL mysql_prod MySQL · shop.orders Cloudagent Filtert tot en met juli, berekent vervolgens de omzet per klant voordat er iets wordt verzonden.
2 PostgreSQL pg_crm PostgreSQL · public.customers Regionaal agent Geeft alleen de kolommen 'id' en 'regio' terug — de enige twee in de querynamen.
3 Microsoft SQL Server mssql_erp SQL Server · dbo.region_targets Hoofdkantooragent Geeft de doelwaarden per regio door, geschreven als T-SQL zodat ze native kunnen worden uitgevoerd.

Drie agenten, drie netwerken, één verklaring — en geen van hen opende een poort om het te doen.

Wat niet verandert

Meer bereik, niet meer bekendheid.

Het gelijktijdig lezen van twee databases volgt exact hetzelfde pad als het lezen van één database. Er wordt niets nieuws geopend om de gegevens op te halen.

Alleen uitgaand

De agent opent één versleutelde verbinding met Query Streams en verzendt zowel het verzoek als de resultaten via deze verbinding. Geen inkomende poort, geen VPN, geen firewallwijziging – en uw inloggegevens verlaten uw netwerk nooit.

Alleen-lezen, elk stuk

Elk onderdeel van de query wordt gecontroleerd voordat het verder wordt verwerkt: SELECT, MET en UITLEGGEN Alleen een gefedereerde query kan niet naar uw databases schrijven en alles wat wordt afgewezen, bereikt ze nooit.

Het kan er niet vandoor gaan met je server.

Er is een limiet aan hoeveel gegevens een database per query mag vrijgeven, en de agent stopt zodra die limiet is bereikt. Een fout in een WAAR Die clausule kost je een foutmelding, geen middag.

Hoe het werkt

Drie stappen, en geen daarvan is een datapipeline.

01

Kies je connecties.

Kies twee of meer van de verbindingen die uw team al heeft ingesteld. Twee is het minimum; dat is nodig om een query gefedereerd te maken. Er wordt niets gekopieerd en er worden geen nieuwe wachtwoorden aangemaakt.

02

Schrijf één zin

Geef elke tabel de naam verbindingsschema.tabelSchrijf vervolgens een normale SQL-query. Voordat je de query uitvoert, kun je het uitvoeringsplan bekijken: welke database wordt welke query gebruikt. Of beschrijf de query en laat Nova het plan opstellen.

03

Sla het op zoals elke andere zoekopdracht.

Als het eenmaal werkt, is het een opgeslagen query — die vervolgens kan worden gedeeld, gefilterd, als wekelijks rapport verzonden, als API-eindpunt gepubliceerd of in een spreadsheet geïmporteerd.

Waarom het snel is

Elke database doet zijn eigen deel van het werk.

De gemakkelijke manier om twee databases samen te voegen is door beide tabellen via het netwerk te slepen en de rest achteraf te sorteren. Dat is traag en betekent dat er veel meer data verloren gaat dan nodig is voor de betreffende vraag.

Dus we doen het tegenovergestelde. Filteren, kolommen selecteren en totalen optellen worden uitbesteed. terug naar elke database om het zelf te doen., in zijn eigen taal. Een rapport dat miljoenen rijen groepeert, stuurt de een handvol gegroepeerde totalen — niet de miljoenen rijen daarachter.

Wat er overblijft, doen we – en we laten u zien wat wat is. Het samenvoegen van gegevens uit verschillende databases is onze taak, omdat geen enkele database de andere kan inzien. Het plan beschrijft precies wat er van elke database werd gevraagd en wat we hebben voltooid, waardoor een kostbare query duidelijk is. voor Jij voert het uit.

DE LANGZAME MANIER de hele tafel reist filter het hier DE QUERY STREAMS-MANIER filter + totaal in de database 12 rijen steek één antwoord
Het eerlijke antwoord

Het zou liever weigeren dan stilletjes ongelijk te hebben.

Het ongemakkelijke feit over het samenvoegen van verschillende databases is dat ze niet altijd met elkaar overeenkomen. Twee databases kunnen dezelfde vraag krijgen en antwoorden geven die verschillen in het laatste cijfer achter de komma, in wat als gelijk wordt beschouwd, of in wat "eerste tien" betekent.

Als je hier nieuw mee bent, volgt hier de korte versie: Een database is niet zomaar een verzameling rijen. Elke database heeft zijn eigen ideeën over hoe geldbedragen opgeteld moeten worden, hoe woorden gesorteerd moeten worden en waar lege waarden thuishoren. Vraag twee verschillende databases om dezelfde lijst met klantnamen te sorteren en je krijgt daadwerkelijk twee verschillende resultaten – niet omdat de ene database defect is, maar omdat ze met verschillende regels zijn gebouwd. Elke tool die databases koppelt, moet hiermee rekening houden. De meeste tools kiezen stilletjes één antwoord en hopen op het beste. Wij doen dat niet.

Wat we in plaats daarvan doen, heeft precies twee mogelijke uitkomsten. En de Query Builder laat je zien welke je hebt gekregen: een pop-upvenster dat tijdens het typen aangeeft of het plan gereed of geweigerd is, en een tabblad 'Plan' met de volledige uitwerking.

Meestal doen we het gewoon zelf.

Wanneer het meningsverschil gaat over Hoe Zodra de berekening is uitgevoerd, vragen we uw database niet langer om dat deel te doen, maar voeren we het uit in de samenvoegingsstap, waar één consistente set regels geldt. Dit kost iets aan snelheid. Het kost u geen nauwkeurigheid en vereist geen aandacht – u hoeft niets te doen.

  • Geld en precisie. Databases passen zich bij grote totalen anders aan op basis van de spreiding en afronding van decimalen. Als het optellen in de bron zelf anders kan afronden dan centraal optellen, halen we de getallen terug en tellen we ze zelf op.
  • Tekst sorteren. Of a komt ervoor BEn hoe accenten zich tot elkaar verhouden, is een instelling per database. Vergelijkingen die hiervan afhankelijk zijn, worden centraal afgehandeld en niet naar lagere niveaus doorgeschoven.
  • Ranglijst en tussenstand. Vensterfuncties — rijnummers, lopende totalen, "top 3 per regio" — worden altijd berekend nadat de stukken zijn aangekomen, omdat geen enkele bron de andere kan zien.
Soms stoppen we even en vertellen we het je.

Wanneer doorgaan zou veranderen welke rijen Het gaat er niet alleen om hoe snel het terugkomt, maar er is geen veilige manier om dat te voorspellen. De query wordt dus niet uitgevoerd en het bericht vermeldt de exacte expressie en de exacte database, in je eigen SQL, zodat je weet wat je moet aanpassen.

  • Een functie die de bron niet kan uitvoeren. Als uw filter gebruikmaakt van iets dat we niet nauwkeurig kunnen weergeven in het dialect van die database, zijn de enige alternatieven om een uitgebreidere query te versturen dan u hebt geschreven of om een equivalent te bedenken. Beide zijn onjuiste antwoorden, dus we weigeren.
  • Rijgrenzen binnen een stuk. A LIMIET of BOVENKANT Toegepast op één bron voordat de samenvoeging een willekeurig aantal rijen oplevert, worden die vervolgens samengevoegd — een plausibel ogende tabel vol onzin. Limieten hebben betrekking op het uiteindelijke resultaat.
  • De doelpalen zijn verplaatst. Als een verbinding sinds het plannen van de query is gewijzigd naar een andere database, is het opgeslagen uitvoeringsplan verouderd en vragen we om een nieuw plan in plaats van het plan van gisteren uit te voeren op de gegevens van vandaag.

Drie afwijzingen, en wat ze je elk vertellen.

Geweigerd

Kan niet duwen LOWER(c.email_domain) = ? naar mssql_erp: functie staat niet in de pushdown-toegestane lijst.

Met andere woorden: Uw filter plaatst een functie in een kolom waarvan de bron niet betrouwbaar genoeg is om deze op dezelfde manier toe te passen als wij, waardoor we niet kunnen garanderen dat dezelfde rijen worden geretourneerd. Wat te doen: Vergelijk in plaats daarvan de gewone kolom, of verplaats die voorwaarde naar buiten de bron — het bericht vertelt je naar welke bron je moet kijken.

Geweigerd

LIMIET 100 Kan niet worden toegepast op een enkele bron vóór de samenvoeging: het resultaat zou 100 willekeurige rijen zijn, niet de eerste 100 van uw antwoord.

Met andere woorden: "Eerste 100" betekent pas iets als alles is samengevoegd en gesorteerd. Wat te doen: Laat de limiet op de verklaring als geheel staan, want dan doet hij wat je verwacht.

Een herziening van het plan is nodig.

Bron 2 verwijst nu naar een andere verbinding of database dan toen deze query werd gepland.

Met andere woorden: iemand veranderde wat pg_crm verwijst naar. Wat te doen: Open het in de Query Builder en herplan het queryplan — met één klik kunt u het nieuwe plan bekijken voordat u het uitvoert.

De onderliggende regel is: als een query zou terugkomen fout, weigeren we. Als het maar terug zou komen langzaamWe controleren het en waarschuwen u. Onjuiste gegevens zijn nooit een compromis dat we namens u sluiten.

Ook u hoeft een weigering niet alleen op te lossen. Nova staat naast de editor in de Query Builder en spreekt de taal van dit hele systeem vloeiend: vraag het, en het legt de weigering in eenvoudige bewoordingen uit, herschrijft de instructie zodat deze werkt en controleert het nieuwe uitvoeringsplan voor je. En als je liever helemaal geen SQL wilt schrijven, beschrijf dan de vraag en Nova stelt zelf de gefedereerde instructie op.

En voor iedereen die liever de details wil dan de geruststelling: het tabblad 'Plan' van de Query Builder toont elke bron, de query die er daadwerkelijk naartoe is gestuurd, welke van uw voorwaarden automatisch zijn toegepast en welke onderdelen we centraal hebben afgehandeld. Niets over de beslissing wordt verborgen gehouden, ook niet de onderdelen waar we voor de langzamere, veiligere route hebben gekozen.

Niets is een uitzondering.

Een gefedereerde query is gewoon een query.

Het is geen apart product met eigen regels. Zodra het is opgeslagen, behandelt elk ander onderdeel van Query Streams het op dezelfde manier als al het andere dat u hebt geschreven.

Querybouwer

Schrijf het in dezelfde editor, met dezelfde schemastructuur ernaast. Een tabblad 'Plan' toont wat er van elke database is gevraagd; een tabblad 'Inzichten' geeft een grafiek van de prestaties van elke database.

Nova AI

Nova AI

Beschrijf de vraag in het Engels en Nova leest je schema's en stelt de query op, inclusief de verbinding waartoe elke tabel behoort. Het programma kan de query uitvoeren en het resultaat visualiseren.

Google formulieren

Google formulieren

Selecteer de opgeslagen query in de add-on en de gecombineerde resultaten verschijnen in uw cellen, opgemaakt en vernieuwbaar — net als bij elke query op één database.

Microsoft Excel

Excel

Hetzelfde geldt voor Excel: voer er één uit of een heel werkblad ermee, met bevroren kopteksten, filters en in-place updates die uw eigen formulekolommen ongewijzigd laten.

REST API

Database REST API

Publiceer het resultaat uit de verschillende databases als een JSON-eindpunt met een sleutel, zodat de gebruiker nooit hoeft te weten dat het uit drie verschillende systemen afkomstig is.

MCP

MCP voor AI-assistenten

Claude en andere assistenten kunnen uw gefedereerde query's via MCP weergeven en uitvoeren, zodat vragen als "hoe heeft elke regio het vorige week gedaan?" in de chat beantwoord kunnen worden.

Rapporten en waarschuwingen

Plan het in en de gecombineerde cijfers verschijnen in Slack, Google Chat, Discord, Telegram of via e-mail. Of stel een drempelwaarde in en ontvang alleen een melding wanneer er iets verandert.

Automatisering en delen

Synchroniseer het resultaat volgens een schema in een spreadsheet, of deel de query met een collega die alleen filters en een 'Uitvoeren'-knop ziet, en nooit uw SQL-code of uw verbindingen.

Waar het zijn nut bewijst

De rapporten die voorheen bestonden uit twee exports en een VLOOKUP.

Vrijwel niemand gebruikt slechts één database. Er is het ERP-systeem, de webshop, het CRM-systeem en het systeem waarop de laatste overname draait.

Bestellingen hier, klanten daar

De winkel slaat bestellingen op in MySQL; het CRM-systeem bewaart klanten en regio's in PostgreSQL. "Omzet per regio" vereist niet langer twee exports en een opzoekactie, maar wordt één opgeslagen query die iedereen opnieuw kan uitvoeren.

Na een overname

Twee bedrijven, twee stacks, één board pack dat vrijdag klaar moet zijn. Je krijgt het gecombineerde overzicht al op de eerste dag, terwijl de daadwerkelijke migratie de achttien maanden duurt die het altijd in beslag neemt.

Voorraad versus verkoop

Voorraadniveaus worden bijgehouden in het magazijnsysteem in een ander land; verkoopcijfers worden bijgehouden in de winkeldatabase. Eén overzicht brengt ze naast elkaar – en datzelfde overzicht kan vervolgens elke maandag als rapport worden verzonden.

Eén database per site, één nummer

Hetzelfde schema wordt toegepast per land, per huurder of per winkelvloer. Tel ze op in één statement in plaats van een script te onderhouden dat de query vijf keer uitvoert en de totalen handmatig berekent.

Eenvoudige definities

Gefedereerde database, datafederatie, datavirtualisatie

Drie benamingen voor overlappende ideeën, en veel marketing heeft ze door elkaar gehaald. Hieronder leggen we uit wat elke benaming betekent en welk onderdeel we daadwerkelijk toepassen.

01

Een gefedereerde database

A gefedereerde database (of gefedereerd databasesysteem) zorgt ervoor dat verschillende afzonderlijke databases zich als één geheel gedragen, zonder ze samen te voegen. Elke database behoudt zijn eigen opslag, zijn eigen engine en zijn eigen eigenaar; een laag daarboven neemt uw query in ontvangst en bepaalt wie welk deel van de query beantwoordt.

Die laag is wat Query Streams is. Er is geen nieuwe database onderliggend en er wordt niets naar een bestaande database gekopieerd.

02

Datafederatie

Datafederatie De aanpak zelf is als volgt: laat de data staan waar deze is opgeslagen en query deze op wanneer je die nodig hebt, in plaats van eerst alles naar een centrale kopie te extraheren. Het alternatief is een pipeline plus een datawarehouse: verplaats alles 's nachts en query vervolgens alleen de kopie.

Beide opties zijn legitiem. Een federatiesysteem is de beste keuze wanneer de vraag meerdere systemen omvat, wanneer de data op één plek moet blijven, of wanneer een datawarehouse-project meer kost dan het antwoord waard is. Een datawarehouse blijft echter de beste optie voor uitgebreide historische analyses met enorme hoeveelheden data.

03

Gegevensvirtualisatie

Gegevensvirtualisatie Dit is de grotere bedrijfscategorie die is gebouwd op federatie — meestal federatieve querying plus een modelleringslaag, caching en beheertools, verkocht als een op zichzelf staand platform.

Wij vormen bewust een klein, eerlijk deel daarvan: Gefedereerde query's uitvoeren via de verbindingen die u al hebt.Binnen de tool waarin uw team al query's schrijft. Geen modelleerproject, geen eigen server om te beheren, geen consultants.

Veelgestelde vragen over gefedereerde query's

Wat is een gefedereerde query?

Een gefedereerde query is één SQL-instructie die gegevens uit meerdere afzonderlijke databases leest en één gecombineerd resultaat oplevert. Er wordt niets eerst gekopieerd: uw instructie wordt opgesplitst in een kleine query per database, elke query beantwoordt het deel dat hij kan, en de delen worden samengevoegd tot het antwoord. In Query Streams wordt een instructie gefedereerd zodra deze twee of meer van uw verbindingen noemt.

Moeten mijn databases op dezelfde locatie staan?

Nee. Ze kunnen zich in verschillende kantoren, verschillende cloudaccounts, verschillende landen of een combinatie van alle drie bevinden — één in een serverruimte, één in een privécloudnetwerk, één op een machine in een magazijn. Elke locatie draait een netwerkagent en elke agent bereikt Query Streams door uit te bellen. Voor uw firewall is dat gewoon een normale uitgaande verbinding, dus er hoeft niets geopend te worden en er hoeft geen VPN te worden opgezet.

Je kunt ook meerdere databases op één server naar dezelfde agent laten verwijzen; één agent per locatie is gebruikelijk, niet één per database.

Heb ik ook een datawarehouse of een ETL-pipeline nodig?

Niet voor dit doel. Er hoeft niets geladen te worden en er is geen schema om in de gaten te houden — de query leest uw live databases op het moment dat u deze uitvoert, dus het antwoord kan niet verouderd zijn zoals een kopie van gisteravond. Wat federatie niet vervangt, is zware historische analyses over zeer grote volumes; dat blijft de taak van een datawarehouse. Een grove test: als de vraag meerdere systemen omvat en actueel moet zijn, gebruik dan federatie.

Welke databases kan ik samenvoegen?

Elk van uw databaseverbindingen, in elke combinatie: SQL Server, PostgreSQL, MySQL, MariaDB, Oracle, Snowflake, BigQuery, SQLite, Access en DuckDB. Elke database wordt benaderd in zijn eigen dialect, dus dezelfde instructie kan verschillende typen gegevens verzenden. BOVENKANT naar SQL Server en LIMIET naar PostgreSQL zonder dat u erover hoeft na te denken.

Databases verschillen daadwerkelijk in wat ze kunnen berekenen en hoe ze sorteren en afronden, waardoor niet elke combinatie van elke expressie exact beantwoord kan worden. In dat geval krijg je een specifiek bericht met de naam van de expressie, in plaats van een getal dat er bijna is.

Is het trager dan het opvragen van gegevens uit één enkele database?

Het hangt ervan af hoeveel werk elke database zelf kan doen – en dat is precies waar we op optimaliseren, en wat het uitvoeringsplan u ook laat zien. Wanneer het filteren en groeperen allemaal binnen uw databases plaatsvindt, wordt er weinig data verplaatst en voelt het aan als een normale query. Wanneer een grote join door ons moet worden afgerond, vindt er meer dataverplaatsing plaats, en het uitvoeringsplan geeft dit aan voordat u de query uitvoert. Elke database heeft ook een limiet per query, zodat een fout vroegtijdig wordt gestopt in plaats van dat het proces blijft voortduren.

Is het veilig om één query op meerdere productiedatabases te richten?

Het maakt gebruik van hetzelfde beveiligingsmodel als elke andere query die u hier uitvoert. Elk onderdeel gaat via uw eigen netwerkagent over één versleutelde uitgaande verbinding — geen inkomende poort, geen VPN, geen firewallwijziging — en uw databasegegevens verlaten uw netwerk nooit. Elk onderdeel wordt alleen-lezen gecontroleerd (SELECT, MET, UITLEGGENEen gefedereerde query kan nergens naartoe schrijven, en elke database ziet alleen een query die de kolommen raakt die je hebt benoemd.

Wat is het verschil met Trino, Presto of Denodo?

Het idee is hetzelfde als datgene dat Trino en Presto populair hebben gemaakt: één SQL-statement, doorgestuurd naar meerdere bronnen. Het verschil zit hem in wat je moet uitvoeren en leren. Dat zijn clusters die je moet implementeren, configureren en aansluiten op je netwerk; de data-virtualisatieplatforms voegen daar een modelleringslaag en een bijbehorende licentie aan toe. Onze oplossing biedt dezelfde functionaliteit binnen de tool die je team al gebruikt voor query's, en maakt gebruik van de verbindingen die je al hebt ingesteld, zonder dat je een eigen server hoeft te beheren.

Het andere verschil is dat we weigeren. Wanneer databases het oneens zijn op een manier die een cijfer zou kunnen veranderen, stoppen we en benoemen we de expressie die we niet konden verwerken in plaats van een plausibele oplossing terug te geven.

Wat kan ik met het resultaat doen?

Je kunt alles doen met een opgeslagen query, want dat is het in feite. Sla hem op, deel hem met je team, voeg filters toe, plan hem in als rapport in Slack of via e-mail, publiceer hem als REST-endpoint of haal de resultaten op in Excel en Google Sheets. Nova kan ook je schema's lezen en de query opstellen als je de vraag liever beschrijft dan de joins zelf schrijft.

Uw databases blijven waar ze zijn. De vraag is niet langer relevant.

Geef twee verbindingen een naam, schrijf één statement en lees het plan voordat je het uitvoert. Geen pipeline, geen warehouse, geen firewall ticket.

Federated queries are on every plan, including Free