Steve Fox
03/02/2026, 10:56 PMkapa.ai
03/02/2026, 10:56 PMPOST /api/v1/actions/dataSources/{dataSourceId}/uploadNotification
or use the UI “Clear cache” / Python SDK. [Reload cached data]
3. Let the first post-refresh executions repopulate FlexCache.
This is explicitly called out as the expectation: “Whenever an ELT finishes, you need to perform cache invalidation… It is expected to invalidate data source once backing DB data changes are finished so that reports are consistent.” [FlexCache; Snowflake cache discussion]
That pattern avoids partially completed data, but you’re right: during the ETL window, any cache miss will still see “old” data until you invalidate.
-------------------------
3. Your two ideas vs. what’s documented
A. Pre-fill (warm) the GoodData cache
This is supported and aligns with docs:
• After invalidation, you can warm FlexCache by executing AFM queries that match your key insights/dashboards (e.g., via POST /execution/afm/execute). [AFM warm-up discussion; FlexCache final results; Slack AFM warm-up]
• There is no documented API to “execute insight by ID” directly for cache warm-up; you must either:
◦ Use GoodData.UI components/hooks (which execute the insight and thus warm cache), or
◦ Manually construct AFM queries that mirror your important insights. [Slack AFM warm-up]
Limitations (from sources):
• You’re correct: you *cannot realistically pre-fill all possible combinations*; you typically warm only the most-used dashboards/filters.
• Docs do not describe any built-in “global prefill” mechanism; it’s all “execute queries to fill cache”.
So: pre-fill is a documented, supported pattern, but you must choose a subset of queries to warm.
B. “Data source iterations” (new schema per run, then repoint)
The knowledge sources do not describe or endorse a pattern where each pipeline run creates a new schema and you repoint the GoodData data source to it.
What is documented:
• Changing the data source definition (including URL/connection) is one of the operations that triggers new queries / invalidates cache. [Snowflake cache discussion]
• But there is no explicit guidance on using rotating schemas as a consistency strategy, nor any examples of that pattern.
So I cannot confirm from the docs that “schema-per-run + repoint” is a recommended or supported best practice; it may work, but it’s not covered in the provided materials.
-------------------------
4. What others are doing (per community threads)
From the community discussions you have:
• Many customers:
◦ Run ETL on a schedule.
◦ After ETL completes, call uploadNotification (or Clear cache) to invalidate. [Reload cached data; Community best practice]
• Some then warm the cache by executing key queries (AFM or via UI) so that end users don’t pay the full cost on first load. [Slack AFM warm-up]
• Support explicitly confirms:
◦ There is no automatic data source cache refresh.
◦ Caches are valid until you invalidate (or change LDM, metrics, data source definition). [Community cache TTL; Snowflake cache discussion]
-------------------------
5. Practical pattern you can safely adopt (within what’s documented)
Within the limits of the docs, a “safe” approach looks like:
1. Run ETL into a consistent state in your DB (however you implement staging/atomicity is outside GoodData’s scope; the sources don’t cover that).
2. Only after ETL is fully done, call:
POST /api/v1/actions/dataSources/{dataSourceId}/uploadNotification
or equivalent. [Reload cached data]
3. Optionally, warm FlexCache by:
◦ Executing AFM queries for your most-used dashboards/filters via POST /execution/afm/execute, or
◦ Programmatically loading those dashboards/insights via GoodData.UI in a headless/scripted context. [Slack AFM warm-up]
4. Let users read from cache between refreshes; they will always see a fully consistent snapshot (pre- or post-refresh), never a partial load, as long as you:
◦ Don’t invalidate cache until the DB is consistent.
◦ Don’t change the data source definition mid-load.
If you need near real-time and can tolerate more load on your DB, you can also consider DirectQuery (bypasses cache), but that’s a separate trade-off and is only briefly mentioned in the docs. [Cache management overview]
-------------------------
6. Summary vs. your two options
• Pre-fill cache: Supported and aligns with docs; you warm key queries after each uploadNotification. You’re right that you can’t cover every possible query, but this is the documented way to combine freshness + performance.
• Data source iterations (new schema per run): Not described in the provided documentation; I cannot confirm it as a recommended pattern. The only documented “switch” is invalidating cache or changing the data source definition, not rotating schemas per run.
If you share more about how your ETL ensures atomicity (e.g., staging + swap), you can likely keep your current single-schema approach and just tighten the timing of uploadNotification + optional cache warm-up. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups.
👀 Our Support team monitors all messages and will jump in if needed.Michael Ullock
03/03/2026, 1:07 AMSteve Fox
03/03/2026, 5:52 PMSteve Fox
03/03/2026, 5:53 PMMichael Ullock
03/03/2026, 11:07 PMPOST /api/v1/actions/dataSources/{dataSourceId}/uploadNotification
so GoodData invalidates FlexCache and recomputes results against the new, complete snapshot. [*Reload cached data*; FlexCache]
With this setup, users always see either the previous complete snapshot or the new complete snapshot—never an in‑between state. Cache warming after invalidation (via AFM or by programmatically loading key dashboards) can then be used to improve performance for the most-used queries, but it won’t by itself solve partial reads unless the DB-side publish step is atomic. [Slack AFM warm-up]Marek Horvát
03/05/2026, 9:40 PMSteve Fox
03/05/2026, 10:30 PMMarek Horvát
03/05/2026, 11:06 PMSteve Fox
03/06/2026, 1:25 AM