Keuzehulp

Wanneer gebruik je Datasources, Elements of allebei?

Deze pagina is de brug tussen de datasource-documentatie en de element-documentatie. Gebruik haar als snelle besliswijzer wanneer je weet dat je iets met data wilt doen, maar nog niet zeker weet of dat in een connector, custom SQL, een Element-widget of een automationstap thuishoort.

Wanneer gebruik je Datasources, Elements of allebei? overzicht
Wanneer gebruik je Datasources, Elements of allebei? overzicht.

1. Snelle keuze

Het belangrijkste onderscheid is eenvoudig: een datasource haalt of modelleert data op tenantniveau; een Element voert Python-logica uit. In de praktijk combineer je ze vaak.

Je doel Beste startpunt Waarom
Rijen ophalen uit een database, API of bestandDatasourceConnectors zijn bedoeld voor stabiele data-ingang, schema-refresh en hergebruik in widgets, Dashbot en Autoflow.
Een eindige gepubliceerde Python-bron direct in dashboards gebruikenElement van type dataGepubliceerde data-Elements verschijnen direct als datasource in widgets, filters en query console. Een stream_data-Element vereist een expliciete livestream-datasource.
Veel tabellen via één database- of API-integratie aanbiedenCatalogus-ElementEén gepubliceerd catalog-Element ontdekt schema's, tabellen en kolommen en voert queries voor de geselecteerde tabel uit.
Bestaande datasources joinen, mergen of omvormen met SQLCustom datasourceJe publiceert één tenantbrede bron met een read-only SQL-query boven expliciet geselecteerde onderliggende datasources.
Data verrijken of opschonen met PythonElement met datasource helpersJe leest expliciete bronnen via data-worker-agent en retourneert of bewaart het opgeschoonde resultaat bewust.
Een volledig nieuwe widget uit Python teruggevenElement widgetGeschikt voor dynamische visualisatie of samengestelde output die niet goed past in standaard widgetopties.
Herbruikbare runtime-logica bouwen voor meerdere plekkenElementElements kun je publiceren, testen en later inzetten in datasources, widgets en automations.
Een terugkerende operationele flow bouwenAutoflowAutoflow orkestreert datasources, Elements, Dashbot en acties in één uitvoerbare workflow.

2. Veelgebruikte patronen

Patroon A: standaard dashboardbron

Maak eerst een datasource, refresh het schema, stel kolommetadata in en gebruik die bron daarna direct in widgets en filters.

Patroon A2: direct gepubliceerd data-Element

Publiceer een eindig Element van type data en gebruik het daarna direct als datasource in dashboards zonder extra datasource-doc. Maak voor stream_data een expliciete Element-datasource met dataFormat="livestream".

Patroon A3: custom datasource

Maak een SQL-query boven geselecteerde dependency-datasources wanneer je vooral joins, filters, casts, unions of aggregaties nodig hebt en die als één herbruikbare bron wilt publiceren. Gebruik de inline query-preview tijdens het bewerken om de query met dezelfde geselecteerde bronnen via data-worker-agent uit te voeren.

Patroon B: Element met datasource helpers

Gebruik een Element wanneer Python nodig is voor businesslogica, mapping of verrijking. Lees expliciete datasources met de worker helpers en retourneer rows, schrijf een file of append naar een uplink/parquet-backed datasource.

Patroon C: Python-gestuurde widget

Laat een Element een complete widgetconfig retourneren wanneer de visualisatie zelf dynamisch of conditioneel is.

Patroon D: automation met data en Python

Autoflow haalt data uit een datasource, laat een Element of Dashbot die interpreteren en stuurt daarna notificaties of taken.

3. Catalogus-Elements: veel tabellen, één integratie

Gebruik kind="catalog" wanneer één externe verbinding, bijvoorbeeld MySQL, meerdere schema's en tabellen moet aanbieden. Publiceer het Element één keer. Kies daarna bij een datasource van type catalog het Element, de versie, het ontdekte schema en de ontdekte tabel. Je hoeft dus geen apart Element per tabel te onderhouden; meerdere datasourcebindings kunnen hetzelfde Element hergebruiken.

Verplicht contract

  • getSchemas(params) retourneert schemanamen of objecten met minimaal name.
  • getTables(params) leest params["schema"] en retourneert de tabellen.
  • getColumns(params) leest schema en tabel uit params en retourneert kolommen met name en optioneel type, label, nullable en description.
  • runQuery(params) leest schema, table en filters uit params en retourneert rows of een ondersteund parquet/rowsRef-resultaat.
  • Markeer alle vier functies met @entrypoint. Zodra je decorators gebruikt, zijn alleen gedeclareerde functies uitvoerbaar.

Toegang en filters

Dashboardfilters en ondersteunde filters uit Data Studio-SQL gebruiken hetzelfde platte params-contract voor runQuery, zodat de provider minder data hoeft op te halen. Data-worker-agent parseert SQL met SQLGlot en zet alleen veilige, ondubbelzinnige predicates om: gelijkheid, IN en ISO-datumbereiken via <kolom>From en <kolom>To. Expliciete dashboard/request-params hebben voorrang wanneer dezelfde sleutel al bestaat. Het Element ontvangt nooit de ruwe SQL-string.

Voor een eenvoudige positieve semi-join zoals SELECT * FROM a WHERE b IN (SELECT d FROM c) materialiseert Dashview eerst bron c. Pas nadat toegang, forced filters en kolomrechten op die bron zijn toegepast, worden maximaal 1.000 verschillende niet-lege waarden van d als lijstparameter b naar Elementbron a gestuurd. De totale lijst is bovendien begrensd op 64 KiB.

Dit is alleen query-pushdown. Predicates die niet veilig aan precies één bron kunnen worden gekoppeld, blijven lokaal in de volledige DuckDB-query staan. Dat geldt ook voor lege of te grote semi-joinlijsten, NOT IN, gecorreleerde subqueries en subqueries met filters, aggregaties of limieten. Nadat het Elementresultaat is gematerialiseerd, past Dashview opnieuw datasource-toegang, forced row filters en de toegestane kolommen van de huidige gebruiker toe voordat rows of parquet worden teruggegeven.

Gebruik een read-only databaseaccount, bewaar credentials in de runtime secret store en accepteer alleen schema-, tabel- en kolomnamen die het Element zelf heeft ontdekt. Behandel alle ontvangen filterwaarden als onbetrouwbare input en bind identifiers en waarden als parameters in de providerquery. Voeg nooit vrije gebruikersinvoer rechtstreeks samen tot SQL.

@entrypoint
def getSchemas(params=None):
    return [{"name": "sales"}]

@entrypoint
def getTables(params=None):
    return [{"name": "orders", "schema": params["schema"]}]

@entrypoint
def getColumns(params=None):
    return [{"name": "order_id", "type": "BIGINT", "nullable": False}]

@entrypoint
def runQuery(params=None):
    # Valideer schema/table tegen provider-metadata en voer een begrensde read-only query uit.
    return [{"order_id": 42, "tenant_id": "tenant-a"}]

4. Aanbevolen werkvolgorde

  1. Bepaal eerst welk deel centraal herbruikbaar moet zijn voor de tenant. Dat hoort meestal in een datasource of Element, niet in een losse widget.
  2. Start met de data-ingang: connector, query, request of bestand.
  3. Kies bij eindige Python-bronnen of een direct gepubliceerd data-Element volstaat, of dat je een expliciete datasource nodig hebt voor scheduling, parquet of extra connectorinstellingen. Gebruik voor meerdere externe tabellen één catalog-Element met afzonderlijke schema/tabel-bindings. Een stream_data-Element heeft altijd een expliciete livestream-datasource nodig.
  4. Kies een custom datasource wanneer de data al in andere datasources bestaat en je combinaties, joins, casts, filters of aggregaties met SQL wilt modelleren zonder eerst Python te schrijven.
  5. Selecteer altijd expliciet de onderliggende datasources. Die lijst stuurt zowel data-worker-agent source loading als de refresh-volgorde van parquet-refresh.
  6. Houd de query begrijpelijk: begin met een paar bronnen, test tussendoor en controleer daarna de output in een eenvoudige widget.
  7. Voeg pas daarna Python toe als je logica nodig hebt die met gewone SQL, widgetopties of filterregels niet netjes oplosbaar is.
  8. Test de output in een eenvoudige widget voordat je de bron inzet in Dashbot, Autoflow of een complex dashboard.
  9. Documenteer voor jezelf welke filters, runtime-variabelen en rechten de oplossing verwacht, zodat collega’s ze veilig kunnen hergebruiken.

5. Valkuilen om te vermijden

Vuistregel: zet connector- en schedulinggedrag in datasources, gebruik custom datasources voor herbruikbare SQL boven bestaande bronnen, zet herbruikbare Python in Elements, gebruik één catalog-Element voor een externe catalogus met meerdere tabellen, gebruik eindige gepubliceerde data-Elements direct wanneer geen extra configuratie nodig is en plaats stream_data-Elements altijd achter een expliciete livestream-datasource.