

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

# CACHE 資料表
<a name="sql-commands-cache-table"></a>

CACHE TABLE 命令會快取現有資料表的資料，或建立和快取包含查詢結果的新資料表。

**注意**  
快取的資料會在整個查詢中保留。

語法、引數和一些範例來自 [Apache Spark SQL 參考](https://spark.apache.org/docs/latest/api/sql/)。

## 語法
<a name="CACHE-TABLE-syntax"></a>

CACHE TABLE 命令支援三種語法模式：

使用 AS （不含括號）：根據查詢結果建立和快取新資料表。

```
CACHE TABLE cache_table_identifier AS query;
```

使用 AS 和括號：函數與第一個語法類似，但使用括號明確分組查詢。

```
CACHE TABLE cache_table_identifier AS ( query );
```

不使用 AS：使用 SELECT 陳述式來篩選要快取的資料列，以快取現有的資料表。

```
CACHE TABLE cache_table_identifier query; 
```

其中：
+ 所有陳述式應以分號 (；) 結尾
+ `query` 通常是 SELECT 陳述式
+ 查詢的括號是選用的 AS
+ AS 關鍵字為選用

## Parameters
<a name="CACHE-TABLE-parameters"></a>

 *cache\$1table\$1identifier*   
快取資料表的名稱。可以包含選用的資料庫名稱限定詞。

 *AS*   
從查詢結果建立和快取新資料表時使用的關鍵字。

*query*  
SELECT 陳述式或其他查詢，定義要快取的資料。

## 範例
<a name="CACHE-TABLE-examples"></a>

在下列範例中，快取的資料表會針對整個查詢持續存在。快取後，參考 *cache\$1table\$1identifier* 的後續查詢將從快取版本讀取，而不是重新計算或讀取 *sourceTable*。這可以改善經常存取資料的查詢效能。

### 從查詢結果建立和快取篩選的資料表
<a name="create-cache-filterd-table"></a>

第一個範例示範如何從查詢結果建立和快取新資料表。此命令使用`AS`關鍵字，而沒有`SELECT`陳述式的括號。它會建立一個名為 '`cache_table_identifier`' 的新資料表，只包含來自 '`sourceTable`' 的資料列，其中狀態為 '`active'`。它會執行查詢、將結果存放在新資料表中，以及快取新資料表的內容。原始 '`sourceTable`' 保持不變，後續查詢必須參考 '`cache_table_identifier`' 才能使用快取的資料。

```
CACHE TABLE cache_table_identifier AS
    SELECT * FROM sourceTable 
    WHERE status = 'active';
```

### 使用括號 SELECT 陳述式快取查詢結果
<a name="cache-query-results"></a>

第二個範例示範如何在 `SELECT` 陳述式周圍使用括號，將查詢的結果快取為具有指定名稱 (`cache_table_identifier`) 的新資料表。此命令會建立一個名為 '`cache_table_identifier`' 的新資料表，只包含來自 '`sourceTable`' 的資料列，其中狀態為 '`active'`。它會執行查詢、將結果存放在新資料表中，以及快取新資料表的內容。原始 '`sourceTable`' 保持不變。後續查詢必須參考「`cache_table_identifier`」才能使用快取的資料。

```
CACHE TABLE cache_table_identifier AS (
    SELECT * FROM sourceTable 
    WHERE status = 'active'
);
```

### 快取具有篩選條件的現有資料表
<a name="cache-existing-table"></a>

第三個範例示範如何使用不同的語法快取現有的資料表。此語法會省略 '`AS`' 關鍵字和括號，通常會從名為 '`cache_table_identifier`' 的現有資料表快取指定的資料列，而不是建立新的資料表。`SELECT` 陳述式做為篩選條件，以決定要快取的資料列。

**注意**  
此語法的確切行為因資料庫系統而異。請務必驗證特定 AWS 服務的正確語法。

```
CACHE TABLE cache_table_identifier 
SELECT * FROM sourceTable 
WHERE status = 'active';
```