

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

# 教學課程：使用 DSBulk 將資料載入 Amazon Keyspaces
<a name="dsbulk-upload"></a>

本step-by-step教學課程將引導您使用 [GitHub](https://github.com/datastax/dsbulk.git) 上提供的 DataStax 大量載入器 (DSBulk)，將資料從 Apache Cassandra 遷移至 Amazon Keyspaces。使用 DSBulk 有助於將資料集上傳至 Amazon Keyspaces 以供學術或測試之用。如需如何遷移生產工作負載的詳細資訊，請參閱 [離線遷移程序：Apache Cassandra 到 Amazon Keyspaces](migrating-offline.md)。在本教學課程中，您會完成下列步驟。

先決條件 – 使用登入資料設定 AWS 帳戶、為憑證建立 JKS 信任存放區檔案、設定 `cqlsh`、下載並安裝 DSBulk，以及設定 `application.conf` 檔案。

1. **建立來源 CSV 和目標資料表** – 準備 CSV 檔案做為來源資料，並在 Amazon Keyspaces 中建立目標金鑰空間和資料表。

1. **準備資料** – 隨機化 CSV 檔案中的資料並加以分析，以判斷平均和最大資料列大小。

1. **設定輸送量容量** – 根據資料大小和所需的載入時間計算所需的寫入容量單位 (WCUs)，並設定資料表的佈建容量。

1. **設定 DSBulk 設定** – 使用身分驗證、SSL/TLS、一致性層級和連線集區大小等設定建立 DSBulk 組態檔案。

1. **執行 DSBulk 載入命令** – 執行 DSBulk 載入命令，將 CSV 檔案的資料上傳至 Amazon Keyspaces 資料表，並監控進度。

**Topics**
+ [先決條件：您必須先完成的步驟，才能使用 DSBulk 上傳資料](dsbulk-upload-prequs.md)
+ [步驟 1：使用 DSBulk 建立來源 CSV 檔案和資料上傳的目標資料表](dsbulk-upload-source.md)
+ [步驟 2：使用 DSBulk 準備要上傳的資料](dsbulk-upload-prepare-data.md)
+ [步驟 3：設定目標資料表的輸送量容量](dsbulk-upload-capacity.md)
+ [步驟 4：設定將資料從 CSV 檔案上傳至目標資料表`DSBulk`的設定](dsbulk-upload-config.md)
+ [步驟 5：執行 DSBulk `load`命令，將 CSV 檔案的資料上傳至目標資料表](dsbulk-upload-run.md)

# 先決條件：您必須先完成的步驟，才能使用 DSBulk 上傳資料
<a name="dsbulk-upload-prequs"></a>

您必須完成下列任務，才能開始本教學課程。

1. 如果您尚未這麼做，請依照 中的步驟註冊 AWS 帳戶[設定 AWS Identity and Access Management](accessing.md#SettingUp.IAM)。

1. 遵循 中的步驟建立登入資料[建立和設定 Amazon Keyspaces 的 AWS 登入資料](access.credentials.md)。

1. 建立 JKS 信任存放區檔案。

   1.  下載下列數位憑證，並將檔案儲存在本機或您的主目錄中。

      1. AmazonRootCA1

      1. AmazonRootCA2

      1. AmazonRootCA3

      1. AmazonRootCA4

      1. Starfield Class 2 根目錄 （選用 – 用於回溯相容性）

      若要下載憑證，您可以使用下列命令。

      ```
      curl -O https://www.amazontrust.com/repository/AmazonRootCA1.pem
      curl -O https://www.amazontrust.com/repository/AmazonRootCA2.pem
      curl -O https://www.amazontrust.com/repository/AmazonRootCA3.pem
      curl -O https://www.amazontrust.com/repository/AmazonRootCA4.pem
      curl -O https://certs.secureserver.net/repository/sf-class2-root.crt
      ```
**注意**  
Amazon Keyspaces 先前使用錨定至 Starfield 類別 2 CA 的 TLS 憑證。 AWS 正在將所有 遷移 AWS 區域 至根據 Amazon Trust Services (Amazon 根 CAs 發行的憑證。在此轉換期間，請將用戶端設定為信任 Amazon 根 CAs1–4 和 Starfield 根，以確保所有區域的相容性。

   1. 將數位憑證轉換為 trustStore 檔案，並將其新增至金鑰存放區。

      ```
      openssl x509 -outform der -in AmazonRootCA1.pem -out temp_file.der
      keytool -import -alias amazon-root-ca-1 -keystore cassandra_truststore.jks -file temp_file.der
      
      openssl x509 -outform der -in AmazonRootCA2.pem -out temp_file.der
      keytool -import -alias amazon-root-ca-2 -keystore cassandra_truststore.jks -file temp_file.der
      
      openssl x509 -outform der -in AmazonRootCA3.pem -out temp_file.der
      keytool -import -alias amazon-root-ca-3 -keystore cassandra_truststore.jks -file temp_file.der
      
      openssl x509 -outform der -in AmazonRootCA4.pem -out temp_file.der
      keytool -import -alias amazon-root-ca-4 -keystore cassandra_truststore.jks -file temp_file.der
                   
      openssl x509 -outform der -in sf-class2-root.crt -out temp_file.der
      keytool -import -alias cassandra -keystore cassandra_truststore.jks -file temp_file.der
      ```

      在最後一個步驟中，您需要為金鑰存放區建立密碼，並信任每個憑證。互動式命令看起來像這樣。

      ```
      Enter keystore password:  
      Re-enter new password: 
      Owner: CN=Amazon Root CA 1, O=Amazon, C=US
      Issuer: CN=Amazon Root CA 1, O=Amazon, C=US
      Serial number: 66c9fcf99bf8c0a39e2f0788a43e696365bca
      Valid from: Tue May 26 00:00:00 UTC 2015 until: Sun Jan 17 00:00:00 UTC 2038
      Certificate fingerprints:
           SHA1: 8D:A7:F9:65:EC:5E:FC:37:91:0F:1C:6E:59:FD:C1:CC:6A:6E:DE:16
           SHA256: 8E:CD:E6:88:4F:3D:87:B1:12:5B:A3:1A:C3:FC:B1:3D:70:16:DE:7F:57:CC:90:4F:E1:CB:97:C6:AE:98:19:6E
      Signature algorithm name: SHA256withRSA
      Subject Public Key Algorithm: 2048-bit RSA key
      Version: 3
      
      Extensions: 
      
      #1: ObjectId: 2.5.29.19 Criticality=true
      BasicConstraints:[
        CA:true
        PathLen:2147483647
      ]
      
      #2: ObjectId: 2.5.29.15 Criticality=true
      KeyUsage [
        DigitalSignature
        Key_CertSign
        Crl_Sign
      ]
      
      #3: ObjectId: 2.5.29.14 Criticality=false
      SubjectKeyIdentifier [
      KeyIdentifier [
      0000: 84 18 CC 85 34 EC BC 0C   94 94 2E 08 59 9C C7 B2  ....4.......Y...
      0010: 10 4E 0A 08                                        .N..
      ]
      ]
      
      Trust this certificate? [no]:  yes
      Certificate was added to keystore
      Enter keystore password:  
      Owner: CN=Amazon Root CA 2, O=Amazon, C=US
      Issuer: CN=Amazon Root CA 2, O=Amazon, C=US
      Serial number: 66c9fd29635869f0a0fe58678f85b26bb8a37
      Valid from: Tue May 26 00:00:00 UTC 2015 until: Sat May 26 00:00:00 UTC 2040
      Certificate fingerprints:
           SHA1: 5A:8C:EF:45:D7:A6:98:59:76:7A:8C:8B:44:96:B5:78:CF:47:4B:1A
           SHA256: 1B:A5:B2:AA:8C:65:40:1A:82:96:01:18:F8:0B:EC:4F:62:30:4D:83:CE:C4:71:3A:19:C3:9C:01:1E:A4:6D:B4
      Signature algorithm name: SHA384withRSA
      Subject Public Key Algorithm: 4096-bit RSA key
      Version: 3
      
      Extensions: 
      
      #1: ObjectId: 2.5.29.19 Criticality=true
      BasicConstraints:[
        CA:true
        PathLen:2147483647
      ]
      
      #2: ObjectId: 2.5.29.15 Criticality=true
      KeyUsage [
        DigitalSignature
        Key_CertSign
        Crl_Sign
      ]
      
      #3: ObjectId: 2.5.29.14 Criticality=false
      SubjectKeyIdentifier [
      KeyIdentifier [
      0000: B0 0C F0 4C 30 F4 05 58   02 48 FD 33 E5 52 AF 4B  ...L0..X.H.3.R.K
      0010: 84 E3 66 52                                        ..fR
      ]
      ]
      
      Trust this certificate? [no]:  yes
      Certificate was added to keystore
      Enter keystore password:  
      Owner: CN=Amazon Root CA 3, O=Amazon, C=US
      Issuer: CN=Amazon Root CA 3, O=Amazon, C=US
      Serial number: 66c9fd5749736663f3b0b9ad9e89e7603f24a
      Valid from: Tue May 26 00:00:00 UTC 2015 until: Sat May 26 00:00:00 UTC 2040
      Certificate fingerprints:
           SHA1: 0D:44:DD:8C:3C:8C:1A:1A:58:75:64:81:E9:0F:2E:2A:FF:B3:D2:6E
           SHA256: 18:CE:6C:FE:7B:F1:4E:60:B2:E3:47:B8:DF:E8:68:CB:31:D0:2E:BB:3A:DA:27:15:69:F5:03:43:B4:6D:B3:A4
      Signature algorithm name: SHA256withECDSA
      Subject Public Key Algorithm: 256-bit EC (secp256r1) key
      Version: 3
      
      Extensions: 
      
      #1: ObjectId: 2.5.29.19 Criticality=true
      BasicConstraints:[
        CA:true
        PathLen:2147483647
      ]
      
      #2: ObjectId: 2.5.29.15 Criticality=true
      KeyUsage [
        DigitalSignature
        Key_CertSign
        Crl_Sign
      ]
      
      #3: ObjectId: 2.5.29.14 Criticality=false
      SubjectKeyIdentifier [
      KeyIdentifier [
      0000: AB B6 DB D7 06 9E 37 AC   30 86 07 91 70 C7 9C C4  ......7.0...p...
      0010: 19 B1 78 C0                                        ..x.
      ]
      ]
      
      Trust this certificate? [no]:  yes
      Certificate was added to keystore
      Enter keystore password:  
      Owner: CN=Amazon Root CA 4, O=Amazon, C=US
      Issuer: CN=Amazon Root CA 4, O=Amazon, C=US
      Serial number: 66c9fd7c1bb104c2943e5717b7b2cc81ac10e
      Valid from: Tue May 26 00:00:00 UTC 2015 until: Sat May 26 00:00:00 UTC 2040
      Certificate fingerprints:
           SHA1: F6:10:84:07:D6:F8:BB:67:98:0C:C2:E2:44:C2:EB:AE:1C:EF:63:BE
           SHA256: E3:5D:28:41:9E:D0:20:25:CF:A6:90:38:CD:62:39:62:45:8D:A5:C6:95:FB:DE:A3:C2:2B:0B:FB:25:89:70:92
      Signature algorithm name: SHA384withECDSA
      Subject Public Key Algorithm: 384-bit EC (secp384r1) key
      Version: 3
      
      Extensions: 
      
      #1: ObjectId: 2.5.29.19 Criticality=true
      BasicConstraints:[
        CA:true
        PathLen:2147483647
      ]
      
      #2: ObjectId: 2.5.29.15 Criticality=true
      KeyUsage [
        DigitalSignature
        Key_CertSign
        Crl_Sign
      ]
      
      #3: ObjectId: 2.5.29.14 Criticality=false
      SubjectKeyIdentifier [
      KeyIdentifier [
      0000: D3 EC C7 3A 65 6E CC E1   DA 76 9A 56 FB 9C F3 86  ...:en...v.V....
      0010: 6D 57 E5 81                                        mW..
      ]
      ]
      
      Trust this certificate? [no]:  yes
      Certificate was added to keystore
      Enter keystore password:  
      Owner: OU=Starfield Class 2 Certification Authority, O="Starfield Technologies, Inc.", C=US
      Issuer: OU=Starfield Class 2 Certification Authority, O="Starfield Technologies, Inc.", C=US
      Serial number: 0
      Valid from: Tue Jun 29 17:39:16 UTC 2004 until: Thu Jun 29 17:39:16 UTC 2034
      Certificate fingerprints:
           SHA1: AD:7E:1C:28:B0:64:EF:8F:60:03:40:20:14:C3:D0:E3:37:0E:B5:8A
           SHA256: 14:65:FA:20:53:97:B8:76:FA:A6:F0:A9:95:8E:55:90:E4:0F:CC:7F:AA:4F:B7:C2:C8:67:75:21:FB:5F:B6:58
      Signature algorithm name: SHA1withRSA (weak)
      Subject Public Key Algorithm: 2048-bit RSA key
      Version: 3
      
      Extensions: 
      
      #1: ObjectId: 2.5.29.35 Criticality=false
      AuthorityKeyIdentifier [
      KeyIdentifier [
      0000: BF 5F B7 D1 CE DD 1F 86   F4 5B 55 AC DC D7 10 C2  ._.......[U.....
      0010: 0E A9 88 E7                                        ....
      ]
      [OU=Starfield Class 2 Certification Authority, O="Starfield Technologies, Inc.", C=US]
      SerialNumber: [    00]
      ]
      
      #2: ObjectId: 2.5.29.19 Criticality=false
      BasicConstraints:[
        CA:true
        PathLen:2147483647
      ]
      
      #3: ObjectId: 2.5.29.14 Criticality=false
      SubjectKeyIdentifier [
      KeyIdentifier [
      0000: BF 5F B7 D1 CE DD 1F 86   F4 5B 55 AC DC D7 10 C2  ._.......[U.....
      0010: 0E A9 88 E7                                        ....
      ]
      ]
      
      
      Warning:
      The input uses the SHA1withRSA signature algorithm which is considered a security risk. This algorithm will be disabled in a future update.
      
      Trust this certificate? [no]:  yes
      Certificate was added to keystore
      ```

1. 設定 Cassandra Query Language shell (cqlsh) 連線，並依照 中的步驟確認您可以連線至 Amazon Keyspaces[使用 `cqlsh` 連線至 Amazon Keyspaces](programmatic.cqlsh.md)。

1. 下載並安裝 DSBulk。
**注意**  
本教學課程中顯示的版本可能不是最新版本。下載 DSBulk 之前，請檢查 [DataStax Bulk Loader 下載頁面](https://downloads.datastax.com/#bulk-loader)以取得最新版本，並相應地更新下列命令中的版本編號。

   1. 若要下載 DSBulk，您可以使用下列程式碼。

      ```
      curl -OL https://downloads.datastax.com/dsbulk/dsbulk-1.8.0.tar.gz
      ```

   1. 然後解壓縮 tar 檔案，並將 DSBulk 新增至您的 `PATH`，如下列範例所示。

      ```
      tar -zxvf dsbulk-1.8.0.tar.gz
      # add the DSBulk directory to the path
      export PATH=$PATH:./dsbulk-1.8.0/bin
      ```

   1. 建立 `application.conf` 檔案以存放 DSBulk 要使用的設定。您可以將下列範例儲存為 `./dsbulk_keyspaces.conf`。如果您不在本機節點上，請將 `localhost`取代為本機 Cassandra 叢集的聯絡點，例如 DNS 名稱或 IP 地址。請記下檔案名稱和路徑，因為您稍後需要在 `dsbulk load`命令中指定此項目。

      ```
      datastax-java-driver {
        basic.contact-points = [ "localhost"]
        advanced.auth-provider {
              class = software.aws.mcs.auth.SigV4AuthProvider
              aws-region = us-east-1
        }
      }
      ```

   1. 若要啟用 SigV4 支援，請從 [GitHub](https://github.com/aws/aws-sigv4-auth-cassandra-java-driver-plugin/releases/) 下載著色`jar`檔案，並將其放在 DSBulk `lib` 資料夾中，如下列範例所示。

      ```
      curl -O -L https://github.com/aws/aws-sigv4-auth-cassandra-java-driver-plugin/releases/download/4.0.6-shaded-v2/aws-sigv4-auth-cassandra-java-driver-plugin-4.0.6-shaded.jar
      ```

# 步驟 1：使用 DSBulk 建立來源 CSV 檔案和資料上傳的目標資料表
<a name="dsbulk-upload-source"></a>

在本教學課程中，我們使用逗號分隔值 (CSV) 檔案，其名稱`keyspaces_sample_table.csv`為資料遷移的來源檔案。提供的範例檔案包含名稱為 之資料表的幾列資料`book_awards`。

1. 建立來源檔案。您可以選擇下列其中一個選項：
   + 下載下列封存檔案 [samplemigration.zip](samples/samplemigration.zip) 中包含的範例 CSV 檔案 (`keyspaces_sample_table.csv`)。解壓縮封存，並記下 的路徑`keyspaces_sample_table.csv`。
   + 若要使用存放在 Apache Cassandra 資料庫中的自有資料填入 CSV 檔案，您可以使用 填入來源 CSV 檔案`dsbulk unload`，如下列範例所示。

     ```
     dsbulk unload -k mykeyspace -t mytable -f ./my_application.conf > keyspaces_sample_table.csv
     ```

     請確定您建立的 CSV 檔案符合下列要求：
     + 第一列包含資料欄名稱。
     + 來源 CSV 檔案中的資料欄名稱符合目標資料表中的資料欄名稱。
     + 資料以逗號分隔。
     + 所有資料值都是有效的 Amazon Keyspaces 資料類型。請參閱 [資料類型](cql.elements.md#cql.data-types)。

1. 在 Amazon Keyspaces 中建立目標金鑰空間和資料表。

   1. 使用 連線至 Amazon Keyspaces`cqlsh`，將下列範例中的服務端點、使用者名稱和密碼取代為您自己的值。

      ```
      cqlsh cassandra.us-east-1.amazonaws.com 9142 -u "111122223333" -p "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY" --ssl
      ```

   1. 建立名稱為 的新金鑰空間`catalog`，如下列範例所示。

      ```
      CREATE KEYSPACE catalog WITH REPLICATION = {'class': 'SingleRegionStrategy'};
      ```

   1. 在新的金鑰空間狀態為可用之後，請使用下列程式碼來建立目標資料表 `book_awards`。若要進一步了解非同步資源建立以及如何檢查資源是否可用，請參閱 [檢查 Amazon Keyspaces 中的金鑰空間建立狀態](keyspaces-create.md)。

      ```
      CREATE TABLE catalog.book_awards (
         year int,
         award text,
         rank int, 
         category text,
         book_title text,
         author text, 
         publisher text,
         PRIMARY KEY ((year, award), category, rank)
         );
      ```

   如果 Apache Cassandra 是原始資料來源，使用相符的標頭建立 Amazon Keyspaces 目標資料表的簡單方法是從來源資料表產生`CREATE TABLE`陳述式，如下列陳述式所示。

   ```
   cqlsh localhost 9042  -u "username" -p "password" --execute "DESCRIBE TABLE mykeyspace.mytable;"
   ```

   然後使用與 Cassandra 來源資料表中的描述相符的資料欄名稱和資料類型，在 Amazon Keyspaces 中建立目標資料表。

# 步驟 2：使用 DSBulk 準備要上傳的資料
<a name="dsbulk-upload-prepare-data"></a>

準備來源資料以進行有效率的傳輸是兩個步驟。首先，您將資料隨機化。在第二個步驟中，您會分析資料，以判斷適當的`dsbulk`參數值和所需的資料表設定。

**隨機化資料**  
`dsbulk` 命令會以 CSV 檔案中顯示的相同順序讀取和寫入資料。如果您使用 `dsbulk`命令來建立來源檔案，資料會以 CSV 中的金鑰排序順序寫入。在內部，Amazon Keyspaces 會使用分割區索引鍵分割資料。雖然 Amazon Keyspaces 具有內建邏輯，可協助負載平衡相同分割區索引鍵的請求，但如果您隨機排列順序，則載入資料會更快、更有效率。這是因為您可以利用 Amazon Keyspaces 寫入不同分割區時發生的內建負載平衡。

若要將寫入平均分散到分割區，您必須隨機化來源檔案中的資料。您可以撰寫應用程式來執行此操作，或使用開放原始碼工具，例如 [Shuf](https://en.wikipedia.org/wiki/Shuf)。Shuf 可在 Linux 發行版本、macOS （透過在 [homebrew](https://brew.sh) 中安裝 coreutils) 和 Windows （透過使用適用於 Linux 的 Windows 子系統 (WSL)) 上免費使用。需要額外的步驟，以防止具有資料欄名稱的標頭列在此步驟中隨機播放。

若要在保留 標頭時隨機化來源檔案，請輸入下列程式碼。

```
tail -n +2 keyspaces_sample_table.csv | shuf -o keyspace.table.csv && (head -1 keyspaces_sample_table.csv && cat keyspace.table.csv ) > keyspace.table.csv1 && mv keyspace.table.csv1 keyspace.table.csv
```

Shuf 會將資料重寫至名為 的新 CSV 檔案`keyspace.table.csv`。您現在可以刪除`keyspaces_sample_table.csv`檔案 - 您不再需要它。

**分析資料**  
透過分析資料來判斷平均和最大資料列大小。

您這樣做的原因如下：
+ 平均資料列大小有助於預估要傳輸的資料總量。
+ 您需要平均資料列大小來佈建資料上傳所需的寫入容量。
+ 您可以確保每個資料列的大小小於 1 MB，這是 Amazon Keyspaces 中的資料列大小上限。

**注意**  
此配額是指資料列大小，而不是分割區大小。與 Apache Cassandra 分割區不同，Amazon Keyspaces 分割區的大小幾乎沒有限制。分割區索引鍵和叢集資料欄需要額外的中繼資料儲存空間，您必須將其新增至資料列的原始大小。如需詳細資訊，請參閱[估計 Amazon Keyspaces 中的資料列大小](calculating-row-size.md)。

下列程式碼使用 [AWK](https://en.wikipedia.org/wiki/AWK) 來分析 CSV 檔案，並列印平均和最大資料列大小。

```
awk -F, 'BEGIN {samp=10000;max=-1;}{if(NR>1){len=length($0);t+=len;avg=t/NR;max=(len>max ? len : max)}}NR==samp{exit}END{printf("{lines: %d, average: %d bytes, max: %d bytes}\n",NR,avg,max);}' keyspace.table.csv
```

執行此程式碼會產生下列輸出。

```
using 10,000 samples:
{lines: 10000, avg: 123 bytes, max: 225 bytes}
```

請確定您的資料列大小上限不超過 1 MB。如果是這樣，您必須分解資料列或壓縮資料，使資料列大小低於 1 MB。在本教學課程的下一個步驟中，您會使用平均資料列大小來佈建資料表的寫入容量。

# 步驟 3：設定目標資料表的輸送量容量
<a name="dsbulk-upload-capacity"></a>

本教學課程說明如何調校 DSBulk，以在設定的時間範圍內載入資料。由於您知道預先執行的讀取和寫入數量，請使用佈建的容量模式。完成資料傳輸後，您應該設定資料表的容量模式，以符合應用程式的流量模式。若要進一步了解容量管理，請參閱 [在 Amazon Keyspaces 中管理無伺服器資源 （適用於 Apache Cassandra)](serverless_resource_management.md)。

使用佈建容量模式時，您可以指定要預先佈建至資料表的讀取和寫入容量。寫入容量會以每小時計費，並以寫入容量單位 (WCUs計量。每個 WCU 都有足夠的寫入容量，可支援每秒寫入 1 KB 的資料。當您載入資料時，寫入速率必須低於目標資料表上設定的最大 WCUs（參數：`write_capacity_units`)。

根據預設，您最多可以將 40，000 WCUs 佈建到 資料表，並在您帳戶中所有資料表中佈建 80，000 WCUs。如果您需要額外的容量，您可以在 [ Service Quotas](https://console.aws.amazon.com/servicequotas/home#!/services/cassandra/quotas) 主控台中請求增加配額。如需配額的詳細資訊，請參閱 [Amazon Keyspaces 配額 （適用於 Apache Cassandra)](quotas.md)。

**計算插入所需的 WCUs平均數量**  
每秒插入 1 KB 的資料需要 1 個 WCU。如果您的 CSV 檔案有 360，000 個資料列，而且您想要在 1 小時內載入所有資料，則必須每秒寫入 100 個資料列 (360，000 個資料列/60 分鐘/60 秒 = 每秒 100 個資料列）。如果每一列最多有 1 KB 的資料，若要每秒插入 100 列，您必須將 100 WCUs 佈建到您的資料表。如果每個資料列有 1.5 KB 的資料，您需要兩個 WCUs才能每秒插入一個資料列。因此，若要每秒插入 100 個資料列，您必須佈建 200 WCUs。

若要判斷每秒需要插入一列的 WCUs 數量，請將平均資料列大小以位元組為單位除以 1024，然後四捨五入至最接近的整數。

例如，如果平均資料列大小為 3000 位元組，您需要三個 WCUs才能每秒插入一個資料列。

```
ROUNDUP(3000 / 1024) = ROUNDUP(2.93) = 3 WCUs
```

**計算資料載入時間和容量**  
現在您已知道 CSV 檔案中的平均大小和資料列數，您可以計算在指定時間內需要載入資料的 WCUs 數量，以及使用不同的 WCU 設定載入 CSV 檔案中所有資料所需的大約時間。

例如，如果檔案中的每一列都是 1 KB，而且 CSV 檔案中有 1，000，000 列，若要在 1 小時內載入資料，您需要在該小時內將至少 278 WCUs 佈建至資料表。

```
1,000,000 rows * 1 KBs = 1,000,000 KBs
1,000,000 KBs / 3600 seconds =277.8 KBs / second = 278 WCUs
```

**設定佈建的容量設定**  
您可以在建立資料表或使用 `ALTER TABLE`命令時設定資料表的寫入容量設定。以下是使用 `ALTER TABLE`命令修改資料表佈建容量設定的語法。

```
ALTER TABLE catalog.book_awards WITH custom_properties={'capacity_mode':{'throughput_mode': 'PROVISIONED', 'read_capacity_units': 100, 'write_capacity_units': 278}} ;  
```

如需完整的語言參考，請參閱 [CREATE TABLE](cql.ddl.table.md#cql.ddl.table.create)和 [ALTER TABLE](cql.ddl.table.md#cql.ddl.table.alter)。

# 步驟 4：設定將資料從 CSV 檔案上傳至目標資料表`DSBulk`的設定
<a name="dsbulk-upload-config"></a>

本節概述設定 DSBulk 以將資料上傳至 Amazon Keyspaces 所需的步驟。您可以使用組態檔案來設定 DSBulk。您直接從命令列指定組態檔案。

1. 建立 DSBulk 組態檔案以遷移至 Amazon Keyspaces，在此範例中，我們使用檔案名稱 `dsbulk_keyspaces.conf`。在 DSBulk 組態檔案中指定下列設定。

   1. *`PlainTextAuthProvider`* – 使用 `PlainTextAuthProvider`類別建立身分驗證提供者。 `ServiceUserName`和 `ServicePassword`應符合您在產生服務特定登入資料時，依照 中的步驟取得的使用者名稱和密碼[建立 Amazon Keyspaces 的程式設計存取憑證](programmatic.credentials.md)。

   1. *`local-datacenter`* – 將 的值`local-datacenter`設定為您要連線 AWS 區域 的 。例如，如果應用程式正在連線至 `cassandra.us-east-1.amazonaws.com`，請將本機資料中心設定為 `us-east-1`。如需所有可用的 AWS 區域，請參閱 [Amazon Keyspaces 的服務端點](programmatic.endpoints.md)。若要避免複本，請將 `slow-replica-avoidance`設定為 `false`。

   1. *`SSLEngineFactory`* – 若要設定 SSL/TLS，`SSLEngineFactory`請在組態檔案中新增區段以使用 指定類別的單行來初始化 `class = DefaultSslEngineFactory`。提供 的路徑`cassandra_truststore.jks`和您先前建立的密碼。

   1. *`consistency`* – 將一致性層級設定為 `LOCAL QUORUM`。不支援其他寫入一致性層級，如需詳細資訊，請參閱 [支援的 Apache Cassandra 讀取和寫入一致性層級和相關成本](consistency.md)。

   1. 每個集區的連線數可在 Java 驅動程式中設定。在此範例中，將 `advanced.connection.pool.local.size` 設定為 3。

   以下是完整的範例組態檔案。

   ```
   datastax-java-driver {
   basic.contact-points = [ "cassandra.us-east-1.amazonaws.com:9142"]
   advanced.auth-provider {
       class = PlainTextAuthProvider
       username = "ServiceUserName"
       password = "ServicePassword"
   }
   
   basic.load-balancing-policy {
       local-datacenter = "us-east-1"
       slow-replica-avoidance = false           
   }
   
   basic.request {
       consistency = LOCAL_QUORUM
       default-idempotence = true
   }
   advanced.ssl-engine-factory {
       class = DefaultSslEngineFactory
       truststore-path = "./cassandra_truststore.jks"
       truststore-password = "my_password"
       hostname-validation = false
     }
   advanced.connection.pool.local.size = 3
   }
   ```

1. 檢閱 DSBulk `load`命令的參數。

   1. *`executor.maxPerSecond`* – 負載命令每秒嘗試同時處理的列數上限。如果取消設定，則會使用 -1 停用此設定。

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

      ```
      executor.maxPerSecond = WCUs * .90
      ```

      在本教學課程中，我們會將 `executor.maxPerSecond`設定為 5。
**注意**  
如果您使用的是 DSBulk 1.6.0 或更高版本，則可以`dsbulk.engine.maxConcurrentQueries`改用 。

   1. 為 DSBulk `load`命令設定這些額外參數。
      + *`batch-mode`* – 此參數會告知系統依分割區索引鍵將操作分組。建議您停用批次模式，因為它可能會導致快速鍵案例並導致 `WriteThrottleEvents`。
      + *`driver.advanced.retry-policy-max-retries`* – 這會決定重試失敗查詢的次數。如果取消設定，則預設值為 10。您可以視需要調整此值。
      + *`driver.basic.request.timeout`* – 系統等待查詢傳回的時間，以分鐘為單位。如果取消設定，則預設值為「5 分鐘」。您可以視需要調整此值。

# 步驟 5：執行 DSBulk `load`命令，將 CSV 檔案的資料上傳至目標資料表
<a name="dsbulk-upload-run"></a>

在本教學課程的最後一個步驟中，您會將資料上傳至 Amazon Keyspaces。

若要執行 DSBulk `load`命令，請完成下列步驟。

1. 執行下列程式碼，將資料從 csv 檔案上傳至 Amazon Keyspaces 資料表。請務必更新您先前建立之應用程式組態檔案的路徑。

   ```
   dsbulk load -f ./dsbulk_keyspaces.conf  --connector.csv.url keyspace.table.csv -header true --batch.mode DISABLED --executor.maxPerSecond 5 --driver.basic.request.timeout "5 minutes" --driver.advanced.retry-policy.max-retries 10 -k catalog -t book_awards
   ```

1. 輸出包含日誌檔案的位置，其中會詳細說明成功和失敗的操作。檔案會存放在下列目錄中。

   ```
   Operation directory: /home/user_name/logs/UNLOAD_20210308-202317-801911
   ```

1. 日誌檔案項目將包含指標，如下列範例所示。檢查以確保資料列數目與 csv 檔案中的資料列數目一致。

   ```
   total | failed | rows/s | p50ms | p99ms | p999ms
      200 |      0 |    200 | 21.63 | 21.89 |  21.89
   ```

**重要**  
現在您已傳輸資料，請調整目標資料表的容量模式設定，以符合應用程式的一般流量模式。在您變更佈建容量之前，會依每小時費率產生費用。如需詳細資訊，請參閱[在 Amazon Keyspaces 中設定讀取/寫入容量模式](ReadWriteCapacityMode.md)。