

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

# MSCC 優化
<a name="emr-msck-optimization"></a>

Hive 可將每個資料表的分割區清單儲存在中繼存放區中。但是，在直接將分割區新增至檔案系統或從檔案系統中移除分割區時，Hive 中繼存放區無法得知這些變更。[MSCK 命令](https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl#LanguageManualDDL-RecoverPartitions(MSCKREPAIRTABLE))會為直接新增至檔案系統或從檔案系統移除的分割區，更新 Hive 中繼存放區中的分割區中繼資料。命令的語法是：

```
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];
```

Hive 如下所示實作此命令：

1. Hive 從中繼存放區擷取資料表的所有分割區。然後，從檔案系統中不存在的分割區路徑清單中，建立要從中繼存放區捨棄的分割區清單。

1. Hive 收集檔案系統中存在的分割區路徑，將它們與中繼存放區中的分割區清單進行比較，並產生需要新增至中繼存放區的分割區清單。

1. Hive 使用 `ADD`、`DROP` 或 `SYNC` 模式更新中繼存放區。

**注意**  
當中繼存放區中具有許多分割區時，檢查檔案系統中是否不存在分割區的步驟需要很長時間才能執行，因為必須對每個分割區進行檔案系統的 `exists` API 呼叫。

在 Amazon EMR 6.5.0 中，Hive 引進了一個稱為 `hive.emr.optimize.msck.fs.check` 的旗標。啟用後，此旗標會導致 Hive 檢查上面步驟 2 中產生的檔案系統的分割區路徑清單中是否存在分割區，而不是進行檔案系統 API 呼叫。在 Amazon EMR 6.8.0 中，Hive 預設啟用此優化，無需設定旗標 `hive.emr.optimize.msck.fs.check`。