Support per-query cache policies for file-based analytics queries
Mantenedores costumam responder em até 3 dias
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 45/100
- Tipo de issue
- Funcionalidade
- Clareza
- Razoavelmente clara
- Status de atividade
- Ativa
- Stack de tecnologia
- sql, typescript
- Domínio
- backend-api-design, data
Direção de pesquisa
Comece rastreando o ponto de entrada useAnalyticsQuery e a configuração do plugin de analytics; em seguida, inspecione como as consultas baseadas em arquivos são armazenadas em cache nos caminhos de execução JSON e Arrow. Defina como as políticas desabilitadas ou de TTL por consulta preservam os padrões existentes e o isolamento da execução, e verifique se as consultas desabilitadas são executadas novamente sem parâmetros nonce.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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.
- Linguagem predominante
- TypeScript
- Estrelas
- 119
- Forks
- 36
- Merge médio
- 4d 16h
- PRs com merge (30d)
- 37
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Sem modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de databricks/appkit
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 55/100
databricks/appkit#729 ·
Mantenedores costumam responder em até 3 dias
-
@databricks/lakebase: pool drops maxLifetimeSeconds and other pg options, so connections never recycle and Unity Catalog claims access fails after 4 hoursTalvez já em andamento @billmcmillin assumiu há 5 dias. Aberta
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 20/100
databricks/appkit#718 ·
Mantenedores costumam responder em até 3 dias
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 48/100
databricks/appkit#699 ·
Mantenedores costumam responder em até 3 dias
-
Dificuldade 3/5 Meio dia Facilidade para iniciantes 42/100
databricks/appkit#656 · 1 comentário ·
Mantenedores costumam responder em até 3 dias
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 28/100
databricks/appkit#648 · 2 comentários ·
Mantenedores costumam responder em até 3 dias
Todas as issues de databricks/appkit
Issues semelhantes
-
Add "append" and "prepend" slots for vue-vuetify extended renderersTalvez já em andamento @simeyc assumiu hoje. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
eclipsesource/jsonforms#2668 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 68/100
Mantenedores costumam responder em até 1 dia
-
README の通知条件を実際の判定処理に合わせるTalvez já em andamento @unhappychoice assumiu hoje. Abertafactory:in-progress priority:medium
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 90/100
unhappychoice/oss-issue-opener#395 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
bug Website
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 77/100
OWASP/OWASP-Hunting#88 ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
Mantenedores costumam responder em até 1 dia