Virtual datasources
- Een virtual datasource is een datasource van type
virtual met alleen SQL en expliciete afhankelijkheden.
- Gebruik dit voor herbruikbare SQL-views zoals
active_orders, tenant_revenue of open_incidents_with_customer die in dashboards en page views als normale datasource gekozen moeten kunnen worden.
- De SQL moet een read-only
SELECT of WITH-query zijn. Dashview bewaart die in virtualSql.
- Selecteer altijd Onderliggende datasources. Dashview gebruikt
sourceDataSourceIds om te bepalen welke bronnen geladen worden voordat de virtual query draait.
- Afhankelijkheden mogen normale datasources of andere virtual datasources zijn. Recursieve/cyclische afhankelijkheden worden geweigerd.
- Virtual datasources hebben geen eigen connector, uploadset, live stream of parquet-refreshschedule. Ze worden runtime als DuckDB-view boven hun bronnen uitgevoerd.
- Bronrechten en forced filters blijven gelden per onderliggende datasource; een virtual datasource mag geen tenant- of gebruikersscope omzeilen.
{
"id": "active_orders",
"name": "Active Orders",
"type": "virtual",
"dataFormat": "virtual",
"refreshMode": "cached",
"requestParamsMode": "none",
"sourceDataSourceIds": ["orders"],
"virtualSql": "SELECT * FROM orders WHERE status = 'active'"
}
Technische referentie custom datasource
Een custom datasource wordt opgeslagen als datasource-payload met type="custom", customSql en expliciete sourceDataSourceIds.
| Sleutel |
Beschrijving |
customSql | DuckDB-SQL die de custom datasource uitvoert. De editor-preview kan dezelfde SQL met de geselecteerde sourceDataSourceIds in browser DuckDB of query-engine uitvoeren; opgeslagen datasource-runtime gebruikt het normale backend-datapad. |
customSqlGenerated | SQL-spiegel voor bestaande clients. Houd deze gelijk aan customSql. |
sourceDataSourceIds | Verplichte expliciete onderliggende datasource-id's zodat query-engine en parquet-refresh weten welke bronnen geladen of ververst moeten worden. |
dataFormat | Gebruik meestal parquet-remote voor refreshbare cached parquet. Kies parquet-snapshot wanneer elke frontend-load direct via /data/{id} een tijdelijke parquet rowsRef moet maken. |
Voorbeeld
{
"id": "sales_summary",
"name": "Sales Summary",
"type": "custom",
"dataFormat": "parquet-remote",
"refreshMode": "realtime",
"requestParamsMode": "filters",
"sourceDataSourceIds": ["orders"],
"customSql": "SELECT country, SUM(amount) AS total_amount FROM orders GROUP BY country",
"customSqlGenerated": "SELECT country, SUM(amount) AS total_amount FROM orders GROUP BY country"
}
- Gebruik datasource-id's als tabelnamen in
customSql. Voor schema-datasources kun je ook schemaId.datasourceId gebruiken.
- Houd
sourceDataSourceIds gelijk aan de bronnen die de query gebruikt.
- Veelvoorkomende ongeldige payloads zijn lege custom SQL, ontbrekende
sourceDataSourceIds en dataFormat="parquet-snapshot" voor datasources die door parquetrefresh gecached moeten worden. SQL-syntax en ondersteunde SQL worden door de browser-preview, query-engine-preview en runtime-uitvoering gevalideerd.
Backend- en MCP-workflow
- Gebruik
POST /data-sources of PUT /data-sources/{id} om de uiteindelijke datasource-payload op te slaan.
- Via Dashview MCP gebruik je eerst
get_entity_contract("datasource"), daarna create_datasource of update_datasource, en vervolgens run_datasource_query om output te verifiëren.
Dashview MCP geeft hetzelfde contract via get_entity_contract("datasource"). Gebruik de editor-preview vóór opslaan en run_datasource_query na opslaan om het opgeslagen datasource-pad te testen.