步驟 2:準備要上傳的資料 DSBulk - Amazon Keyspaces (適用於 Apache Cassandra)

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

步驟 2:準備要上傳的資料 DSBulk

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

隨機化資料

dsbulk令會以與檔案中出現的相同順序讀取和寫入資CSV料。如果您使用指dsbulk令建立來源檔案,則會在中按鍵排序順序寫入資料。CSV在內部,Amazon 金 Keyspaces 會使用分割區金鑰來分割資料。雖然 Amazon Keyspaces 具有內建邏輯,可協助對相同分區金鑰進行負載平衡請求,但是如果您隨機排序順序,載入資料會更快速且更有效率。這是因為您可以利用 Amazon Keyspaces 寫入不同分割區時所發生的內建負載平衡。

若要將寫入平均分散到分割區中,您必須隨機化來源檔案中的資料。您可以編寫一個應用程序來執行此操作或使用開源工具,例如 Shuf。Shuf 可以在 Linux 發行版、macOS 上(通過在自製軟件中安裝核心軟件)和視窗(通過使用 Linux 的視窗子系統())免費獲得。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 卡桑德拉分區不同,Amazon Keyspaces 分區的大小幾乎可以取消綁定。分割索引鍵和叢集資料行需要額外的中繼資料儲存空間,您必須將其新增至資料列的原始大小。如需詳細資訊,請參閱估計 Amazon Keyspaces 中的行大小

下面的代碼用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。在本教學課程的下一個步驟中,您會使用平均資料列大小來佈建資料表的寫入容量。