From 0c2ab2a746a61d86bcea22a0118ebbb62d6e8e32 Mon Sep 17 00:00:00 2001 From: laughingman7743 Date: Sun, 24 May 2026 13:31:40 +0900 Subject: [PATCH 1/2] docs: note Result Reuse semantic-equivalence behavior change (2025-11) Athena changed Result Reuse in November 2025 to match queries by semantic equivalence instead of exact string. Add a note in the Result reuse configuration section so users understand the server-side behavior change. Refs #711 --- docs/usage.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/usage.md b/docs/usage.md index 549d1d2c..78d4544d 100644 --- a/docs/usage.md +++ b/docs/usage.md @@ -156,6 +156,16 @@ pyathena.error.DatabaseError: An error occurred (InvalidRequestException) when c If for some reason you cannot use the reuse feature of Athena engine version 3, please use the {ref}`Cache configuration ` implemented by PyAthena. +:::{note} +**Semantic-equivalence matching (November 2025)** + +As of November 2025, Athena's result reuse no longer requires byte-for-byte identical query text. Result reuse is now triggered when a query is **semantically equivalent** to a previously executed query — cosmetic differences such as whitespace, comments, or keyword casing no longer prevent a cache hit. + +This behavior change happens server-side; PyAthena does not need to be updated, and existing code using `result_reuse_enable` continues to work unchanged. Users who relied on exact-string matching for cache invalidation should be aware that more queries may now reuse prior results than before. + +See the [Athena documentation](https://docs.aws.amazon.com/athena/latest/ug/reusing-query-results.html) for the latest rules on what counts as semantically equivalent. +::: + (cache-configuration)= ### Cache configuration From 9b4a6e4e728865d6418a554e2f5cf11c01cb8287 Mon Sep 17 00:00:00 2001 From: laughingman7743 Date: Sun, 24 May 2026 13:50:18 +0900 Subject: [PATCH 2/2] ci: skip test workflow on docs-only PRs Test suite takes a long time to run across the Python 3.10-3.14 matrix and against real Athena. Docs-only changes don't exercise any code path the tests cover, so skip the workflow when the diff is limited to `docs/**` or top-level Markdown files. The weekly cron schedule keeps tests running against master regardless. --- .github/workflows/test.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 8e4a31c4..d418eb42 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -2,6 +2,9 @@ name: Test on: pull_request: + paths-ignore: + - 'docs/**' + - '**.md' schedule: - cron: '0 0 * * 0'