

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 2단계: 성공적인 데이터 업로드를 위해 소스 데이터 준비
<a name="bulk-upload-prepare-data"></a>

효율적인 전송을 위해 소스 데이터를 준비하는 것은 2단계 프로세스입니다. 먼저 데이터를 무작위화합니다. 두 번째 단계에서는 데이터를 분석하여 데이터 업로드가 성공적으로 이루어질 수 있도록 적절한 `cqlsh` 파라미터 값과 필요한 테이블 설정을 결정합니다.

**데이터 무작위화**  
이 `cqlsh COPY FROM` 명령은 CSV 파일에 나타나는 것과 동일한 순서로 데이터를 읽고 씁니다. `cqlsh COPY TO` 명령을 사용하여 소스 파일을 만들면 데이터가 키 정렬된 순서대로 CSV에 기록됩니다. Amazon Keyspaces는 내부적으로 파티션 키를 사용하여 데이터를 분할합니다. Amazon Keyspaces에는 동일한 파티션 키에 대한 요청을 로드 밸런싱하는 데 도움이 되는 로직이 내장되어 있지만 순서를 무작위로 지정하면 데이터를 로드하는 것이 더 빠르고 효율적입니다. Amazon Keyspaces가 다른 파티션에 쓸 때 발생하는 내장된 로드 밸런싱을 활용할 수 있기 때문입니다.

쓰기를 파티션 전체에 균등하게 분산하려면 소스 파일의 데이터를 무작위화해야 합니다. 이 작업을 수행하는 애플리케이션을 작성하거나 [Shuf](https://en.wikipedia.org/wiki/Shuf)와 같은 오픈 소스 도구를 사용할 수 있습니다. Shuf는 Linux 배포판, macOS([homebrew](https://brew.sh)에 coreutils 설치), Windows(Windows Subsystem for 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는 `keyspace.table.csv`라는 새 CSV 파일에 데이터를 다시 씁니다. 이제 필요 없는 `keyspaces_sample_table.csv` 파일을 삭제할 수 있습니다.

**데이터 분석**  
데이터를 분석하여 평균 및 최대 행 크기를 결정합니다.

이렇게 하는 이유는 다음과 같습니다.
+ 평균 행 크기는 전송할 총 데이터 양을 추정하는 데 도움이 됩니다.
+ 데이터 업로드에 필요한 쓰기 용량을 프로비저닝하려면 평균 행 크기가 필요합니다.
+ 각 행의 크기가 Amazon Keyspaces의 최대 행 크기인 1MB 미만인지 확인할 수 있습니다.

**참고**  
이 할당량은 파티션 크기가 아니라 행 크기를 나타냅니다. 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}
```

이 자습서의 다음 단계에서 평균 행 크기를 사용하여 테이블의 쓰기 용량을 프로비저닝합니다.