Support per-query cache policies for file-based analytics queries
Maintainer antworten meist innerhalb von 3 Tagen
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 5/5
- Geschätzter Aufwand
- Über eine Woche
- Anfängerfreundlichkeit
- 45/100
- Issue-Typ
- Feature
- Klarheit
- Größtenteils klar
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- sql, typescript
- Bereich
- backend-api-design, data
Rechercherichtung
Beginne damit, den useAnalyticsQuery-Einstiegspunkt und die Konfiguration des Analytics-Plugins nachzuverfolgen, und untersuche anschließend, wie dateibasierte Abfragen über die JSON- und Arrow-Ausführungspfade hinweg zwischengespeichert werden. Lege fest, wie pro Abfrage deaktivierte oder TTL-Richtlinien bestehende Standardeinstellungen und die Ausführungsisolierung bewahren, und überprüfe, dass deaktivierte Abfragen ohne Nonce-Parameter erneut ausgeführt werden.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Problem
AppKit's analytics plugin caches identical file-based SQL queries for one hour by default. Some queries are intentionally non-deterministic or calculate against current data and must execute every time the user submits them.
In AppKit 0.65.0, useAnalyticsQuery supports:
formatmaxParametersSizeautoStart
There is no per-query cache option. Caching can be disabled globally with:
createApp({
cache: {
enabled: false,
},
});
However, this disables caching for every AppKit plugin and analytics query in the application.
Example
-- config/queries/fresh_value.sql
SELECT current_timestamp() AS calculated_at
const { data } = useAnalyticsQuery('fresh_value');
After unmounting and remounting the component, the same cached timestamp is returned for up to an hour instead of executing the SQL again.
A more significant use case is a parameterized, non-deterministic table-valued function:
SELECT result_json
FROM IDENTIFIER(:functionName)(
:input,
:assumption
)
Submitting the same parameters again should deliberately recalculate against current source data.
Current workaround
We add a unique nonce to every submission:
-- @param queryNonce STRING
SELECT ...
WHERE length(:queryNonce) > 0
const [queryNonce] = useState(() => crypto.randomUUID());
const parameters = useMemo(
() => ({
input: sql.string(input),
queryNonce: sql.string(queryNonce),
}),
[input, queryNonce]
);
This works because parameters are part of the cache key, but it pollutes the SQL contract and creates cache entries that can never be reused.
Requested capability
Please support a server-controlled cache policy for individual file-based queries.
For example, a query directive:
-- @cache disabled
SELECT ...
Or configurable TTL:
-- @cache ttl=60
SELECT ...
Alternatively, plugin configuration could define the policy:
analytics({
queries: {
fresh_value: {
cache: false,
},
summary: {
cache: { ttl: 60 },
},
},
});
A client-side option such as the following would also be useful, although a server-owned policy would prevent clients from bypassing caching for arbitrary expensive queries:
useAnalyticsQuery('fresh_value', parameters, {
cache: 'no-store',
});
Expected behavior
- Existing queries remain cached by default.
- An individual query can disable caching or select a custom TTL.
- The policy applies consistently to JSON and Arrow execution paths.
- Service-principal and on-behalf-of-user execution retain their existing cache isolation.
- Disabled queries execute against the warehouse on every request without requiring dummy parameters.
- Vorherrschende Sprache
- TypeScript
- Sterne
- 119
- Forks
- 36
- Ø Merge
- 4 T. 16 Std.
- Gemergte PRs (30 T.)
- 37
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus databricks/appkit
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 55/100
databricks/appkit#729 ·
Maintainer antworten meist innerhalb von 3 Tagen
-
@databricks/lakebase: pool drops maxLifetimeSeconds and other pg options, so connections never recycle and Unity Catalog claims access fails after 4 hoursEvtl. vergeben @billmcmillin hat das vor 5 Tagen übernommen. Offen
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 20/100
databricks/appkit#718 ·
Maintainer antworten meist innerhalb von 3 Tagen
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 48/100
databricks/appkit#699 ·
Maintainer antworten meist innerhalb von 3 Tagen
-
Schwierigkeit 3/5 Ein halber Tag Anfängerfreundlichkeit 42/100
databricks/appkit#656 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 3 Tagen
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 28/100
databricks/appkit#648 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 3 Tagen
Alle Issues in databricks/appkit
Ähnliche Issues
-
Add "append" and "prepend" slots for vue-vuetify extended renderersEvtl. vergeben @simeyc hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 75/100
eclipsesource/jsonforms#2668 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag
-
README の通知条件を実際の判定処理に合わせるEvtl. vergeben @unhappychoice hat das heute übernommen. Offenfactory:in-progress priority:medium
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 90/100
unhappychoice/oss-issue-opener#395 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug Website
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 77/100
OWASP/OWASP-Hunting#88 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
Maintainer antworten meist innerhalb von 1 Tag