

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Athena 中重複使用查詢結果
<a name="reusing-query-results"></a>

當您在 Athena 中重新執行查詢時，您可以選擇性地選擇重複使用最近儲存的查詢結果。此選項可以提高效能並降低已掃描的位元組數的成本。例如，如果您知道結果在指定時間範圍內不會變更，則重複使用查詢結果就很有用。您可以指定重複使用查詢結果的最長期限。只要 Athena 的結果不超過您指定的期限，就會使用儲存的結果。如需詳細資訊，請參閱 *AWS 大數據部落格*中的[使用 Amazon Athena 降低成本和提升查詢效能](https://aws.amazon.com/blogs/big-data/reduce-cost-and-improve-query-performance-with-amazon-athena-query-result-reuse/)。

## 主要功能
<a name="reusing-query-results-key-features"></a>

當您啟用查詢的結果重複使用時，Athena 會在相同的工作群組中尋找先前執行的查詢。如果 Athena 找到相符項目，它會略過執行，並傳回先前相符執行項目的查詢結果。您可以針對每次查詢啟用查詢結果重複使用。

當下列所有條件都成立時，Athena 會重複使用最後一個查詢結果：
+ 查詢字串符合由 Athena 決定。
+ 資料庫和目錄名稱相符。
+ 先前的結果尚未過期。
+ 查詢結果組態符合先前執行的查詢結果組態。
+ 您可以存取查詢中參考的所有資料表。
+ 您可以存取儲存先前結果的 S3 檔案位置。

如果不符合上述任何條件，則 Athena 會在不使用快取結果的情況下執行查詢。

## 考量和限制
<a name="reusing-query-results-considerations-and-limitations"></a>

使用查詢結果重複使用功能時，請謹記以下幾點：
+ Athena 只會在相同的工作群組中重複使用查詢結果。
+ 重複使用查詢結果功能遵循工作群組組態。如果您覆寫查詢的結果組態，則會停用該功能。
+ 僅支援在 Amazon S3 上產生結果集的查詢。`EXECUTE` 不支援 `SELECT`和 以外的陳述式。
+  AWS Glue 支援向 註冊的 Apache Hive、Apache Hudi、Apache Iceberg 和 Linux Foundation Delta Lake 資料表。不支援外部 Hive 中繼存放區。
+ 不支援參考聯合目錄或外部 Hive 中繼存放區的查詢。
+ Lake Formation 受管理的資料表不支援查詢結果重複使用。
+ 當資料表來源的 Amazon S3 位置註冊為 Lake Formation 中的資料位置時，不支援查詢結果重複使用。
+ 不支援具有資料列和資料欄許可的資料表。
+ 不支援具有精細的存取控制 (例如資料欄或資料列篩選) 的資料表。
+ 任何參考不支援資料表的查詢都不符合查詢結果重複使用的資格。
+ Athena 要求您擁有 Amazon S3 讀取許可，如此才能重複使用之前產生的輸出檔案。
+ 重複使用查詢結果功能會假設先前結果的內容尚未修改。Athena 在使用之前不會檢查先前結果的完整性。
+ 如果先前執行的查詢結果已刪除或移至 Amazon S3 中的其他位置，後續執行相同查詢將不會重複使用查詢結果。
+ 可能會傳回過時結果。在達到您指定的重複使用最長期限之前，Athena 不會檢查來源資料是否有變更。
+ 如果有多個結果可供重複使用，則 Athena 會使用最新的結果。
+ 使用類似 `rand()` 或 `shuffle()` 的非確定性運算子或函數的查詢，並未使用快取結果。例如，不含 `ORDER BY` 的 `LIMIT` 是非確定性的，且並非快取，但含有 `ORDER BY` 的 `LIMIT` 是確定性的其已快取。
+ 若要搭配 JDBC 使用查詢結果重複使用功能，所需的最低驅動程式版本為 2.0.34.1000。對於 ODBC，所需的最低驅動程式版本為 1.1.19.1002。如需驅動程序下載資訊，請參閱 [使用 ODBC 和 JDBC 驅動器連接至 Amazon Athena](athena-bi-tools-jdbc-odbc.md)。
+ 使用多個資料目錄的查詢不支援查詢結果重複使用。
+  包含超過 20 個資料表的查詢不支援查詢結果重複使用。
+ 對於大小小於 100 KB 的查詢字串，會忽略註解和空格的差異，`INNER JOIN`並`JOIN`視為對等字串以重複使用結果。大於 100 KB 的查詢字串必須完全相符，才能重複使用結果。
+ 如果查詢結果超過指定的最長存留期，則視為過期；如果未指定最長存留期，則視為超過預設值 60 分鐘。您可以以分鐘、小時或天數來指定重複使用查詢結果的最長期限。無論使用的時間單位為何，可指定的最長期限相等於 7 天。
+ 不支援[受管查詢結果](https://docs.aws.amazon.com/athena/latest/ug/managed-results.html)。

## 如何在 Athena 主控台中重複使用查詢結果
<a name="reusing-query-results-athena-console"></a>

若要使用此功能，請在 Athena 查詢編輯器中啟用 **Reuse query results** (重複使用查詢結果)。

![在 Athena 查詢編輯器中，啟用 Reuse query results (重複使用查詢結果)。](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/reusing-query-results-1.png)


**若要設定重複使用查詢結果功能**

1. 在 Athena 查詢編輯器的 **Reuse query results** (重複使用查詢結果) 選項下，選擇 **up to 60 minutes ago** (最多 60 分鐘前) 旁邊的編輯圖示。

1. 在 **Edit reuse time** (編輯重複使用時間) 對話方塊中，從右側的方塊中選擇時間單位 (分鐘、小時或天)。

1. 在左側的方塊中，輸入或選擇您要指定的時間單位數目。無論選擇的時間單位為何，您可以輸入的最長時間相當於七天。  
![設定重複使用查詢結果的最長期限。](http://docs.aws.amazon.com/zh_tw/athena/latest/ug/images/reusing-query-results-2.png)

1. 選擇**確認**。

   橫幅會確認您的組態變更，而 **Reuse query results** (重新使用查詢結果) 選項會顯示您的新設定。