

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

# 步驟 4：設定`cqlsh COPY FROM`設定
<a name="bulk-upload-config"></a>

本節概述如何判斷 的參數值`cqlsh COPY FROM`。`cqlsh COPY FROM` 命令會讀取您先前準備的 CSV 檔案，並使用 CQL 將資料插入 Amazon Keyspaces。命令會分割資料列，並在一組工作者之間分配`INSERT`操作。每個工作者都會與 Amazon Keyspaces 建立連線，並沿著此頻道傳送`INSERT`請求。

`cqlsh COPY` 命令沒有內部邏輯，可在其工作者之間平均分配工作。不過，您可以手動設定它，以確保工作均勻分佈。首先檢閱這些金鑰 cqlsh 參數：
+ **DELIMITER** – 如果您使用逗號以外的分隔符號，您可以設定此參數，預設為逗號。
+ **輸入** – `cqlsh COPY FROM`每秒嘗試處理的列數目標。如果取消設定，則預設為 100，000。
+ **NUMPROCESSES** – cqlsh 為`COPY FROM`任務建立的子工作者程序數目。此設定的最大值為 16，預設值為 `num_cores - 1`，其中 `num_cores`是執行 cqlsh 之主機上的處理核心數目。
+ **MAXBATCHSIZE** – 批次大小決定單一批次中插入目的地資料表的資料列數目上限。如果取消設定，cqlsh 會使用 20 個插入資料列的批次。
+ **CHUNKSIZE** – 傳遞給子工作者的工作單位大小。根據預設，它會設定為 5，000。
+ **MAXATTEMPTS** – 重試失敗工作者區塊的次數上限。達到嘗試次數上限後，失敗的記錄會寫入新的 CSV 檔案，您可以在調查失敗之後再次執行。

`INGESTRATE` 根據您佈建至目標目的地資料表的 WCUs 數目來設定 。`cqlsh COPY FROM` 命令`INGESTRATE`的 不是限制，而是目標平均值。這表示它可以 （且通常可以） 爆量超過您設定的數字。若要允許爆量，並確保有足夠的容量來處理資料載入請求，請將 `INGESTRATE` 設為資料表寫入容量的 90%。

```
INGESTRATE = WCUs * .90
```

接著，將 `NUMPROCESSES` 參數設定為比系統上的核心數目少一個。若要了解系統的核心數量，您可以執行下列程式碼。

```
python -c "import multiprocessing; print(multiprocessing.cpu_count())"
```

在本教學課程中，我們使用下列值。

```
NUMPROCESSES = 4
```

每個程序都會建立工作者，而且每個工作者都會建立與 Amazon Keyspaces 的連線。Amazon Keyspaces 在每個連線上每秒最多可支援 3，000 個 CQL 請求。這表示您必須確保每個工作者每秒處理少於 3，000 個請求。

如同 `INGESTRATE`，工作者通常會爆量超過您設定的數字，不受時鐘秒的限制。因此，若要考慮爆量，請將 cqlsh 參數設定為以每個工作者為目標，每秒處理 2，500 個請求。若要計算分配給工作者的工作量，請使用下列準則。
+ `INGESTRATE` 除以 `NUMPROCESSES`。
+ 如果 `INGESTRATE` / `NUMPROCESSES` > 2，500，請降低 `INGESTRATE`使此公式成為 true。

```
INGESTRATE / NUMPROCESSES <= 2,500
```

在您設定設定以最佳化上傳我們的範例資料之前，讓我們檢閱`cqlsh`預設設定，並了解使用它們如何影響資料上傳程序。由於 `cqlsh COPY FROM`使用 `CHUNKSIZE`來建立工作區塊 (`INSERT` 陳述式） 以分發給工作者，因此工作不會自動平均分發。有些工作者可能會閒置，視 `INGESTRATE` 設定而定。

若要在工作者之間平均分配工作，並將每個工作者保持在最佳每秒 2，500 個請求速率，您必須變更輸入參數`INGESTRATE`來設定 `MAXBATCHSIZE`、 `CHUNKSIZE`和 。若要在資料載入期間最佳化網路流量使用率，請選擇`MAXBATCHSIZE`接近最大值 30 的值。透過將 `CHUNKSIZE`變更為 100 和 `MAXBATCHSIZE` 25，10，000 個資料列平均分散在四個工作者之間 (10，000 / 2500 = 4)。

下列程式碼範例說明了這一點。

```
INGESTRATE = 10,000
NUMPROCESSES = 4
CHUNKSIZE = 100
MAXBATCHSIZE. = 25
Work Distribution:
Connection 1 / Worker 1 : 2,500 Requests per second
Connection 2 / Worker 2 : 2,500 Requests per second
Connection 3 / Worker 3 : 2,500 Requests per second
Connection 4 / Worker 4 : 2,500 Requests per second
```

若要摘要，請在設定`cqlsh COPY FROM`參數時使用下列公式：
+ **INGESTRATE** = write\$1capacity\$1units \$1 .90
+ **NUMPROCESSES** = num\$1cores -1 （預設）
+ **擷取/NUMPROCESSES** = 2，500 （這必須是 true 陳述式。)
+ **MAXBATCHSIZE** = 30 （預設為 20。 Amazon Keyspaces 接受最多 30 個批次。)
+ **區塊大小** = （擷取 / NUMPROCESSES) / MAXBATCHSIZE

現在您已計算 `NUMPROCESSES`、 `INGESTRATE`和 `CHUNKSIZE`，您已準備好載入資料。