

AWS Data Pipeline 는 더 이상 신규 고객이 사용할 수 없습니다. 의 기존 고객은 평소와 같이 서비스를 계속 사용할 AWS Data Pipeline 수 있습니다. [자세히 알아보기](https://aws.amazon.com/blogs/big-data/migrate-workloads-from-aws-data-pipeline/)

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

# RedshiftCopyActivity
<a name="dp-object-redshiftcopyactivity"></a>

DynamoDB 또는 Amazon S3에서 Amazon Redshift로 데이터를 복사합니다. 데이터를 기존 테이블로 로드하거나 기존 테이블에 데이터를 쉽게 병합할 수 있습니다.

다음은 `RedshiftCopyActivity`를 사용할 사용 사례의 개요입니다.

1. 먼저 AWS Data Pipeline 를 사용하여 Amazon S3에서 데이터를 스테이징합니다.

1. `RedshiftCopyActivity`을(를) 사용하여 Amazon RDS 및 Amazon EMR에서 Amazon Redshift로 데이터를 이동합니다.

   이렇게 하면 Amazon Redshift에 데이터를 로드하여 데이터를 분석할 수 있습니다.

1. [SqlActivity](dp-object-sqlactivity.md)을(를) 사용하여 Amazon Redshift에 로드한 데이터에 대해 SQL 쿼리를 수행합니다.

 또한 `RedshiftCopyActivity`는 매니페스트 파일을 지원하므로 `S3DataNode` 작업을 할 수 있습니다. 자세한 내용은 [S3DataNode](dp-object-s3datanode.md) 단원을 참조하십시오.

## 예제
<a name="redshiftcopyactivity-example"></a>

다음은 이 객체 유형의 예제입니다.

형식 변환을 보장하기 위해, 이 예제에서는 [EMPTYASNULL](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html#copy-emptyasnull) 및 `commandOptions`의 [IGNOREBLANKLINES](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html#copy-ignoreblanklines) 특수 변환 파라미터를 사용합니다. 자세한 내용은 *Amazon Redshift 데이터베이스 개발자 가이드*의 [데이터 변환 파라미터](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html)를 참조하세요.

```
{
  "id" : "S3ToRedshiftCopyActivity",
  "type" : "RedshiftCopyActivity",
  "input" : { "ref": "MyS3DataNode" },
  "output" : { "ref": "MyRedshiftDataNode" },
  "insertMode" : "KEEP_EXISTING",
  "schedule" : { "ref": "Hour" },
  "runsOn" : { "ref": "MyEc2Resource" },
  "commandOptions": ["EMPTYASNULL", "IGNOREBLANKLINES"]
}
```

다음 예제 파이프라인 정의는 `APPEND` 삽입 모드를 사용하는 활동을 보여줍니다.

```
{
  "objects": [
    {
      "id": "CSVId1",
      "name": "DefaultCSV1",
      "type": "CSV"
    },
    {
      "id": "RedshiftDatabaseId1",
      "databaseName": "dbname",
      "username": "user",
      "name": "DefaultRedshiftDatabase1",
      "*password": "password",
      "type": "RedshiftDatabase",
      "clusterId": "redshiftclusterId"
    },
    {
      "id": "Default",
      "scheduleType": "timeseries",
      "failureAndRerunMode": "CASCADE",
      "name": "Default",
      "role": "DataPipelineDefaultRole",
      "resourceRole": "DataPipelineDefaultResourceRole"
    },
    {
      "id": "RedshiftDataNodeId1",
      "schedule": {
        "ref": "ScheduleId1"
      },
      "tableName": "orders",
      "name": "DefaultRedshiftDataNode1",
      "createTableSql": "create table StructuredLogs (requestBeginTime CHAR(30) PRIMARY KEY DISTKEY SORTKEY, requestEndTime CHAR(30), hostname CHAR(100), requestDate varchar(20));",
      "type": "RedshiftDataNode",
      "database": {
        "ref": "RedshiftDatabaseId1"
      }
    },
    {
      "id": "Ec2ResourceId1",
      "schedule": {
        "ref": "ScheduleId1"
      },
      "securityGroups": "MySecurityGroup",
      "name": "DefaultEc2Resource1",
      "role": "DataPipelineDefaultRole",
      "logUri": "s3://myLogs",
      "resourceRole": "DataPipelineDefaultResourceRole",
      "type": "Ec2Resource"
    },
    {
      "id": "ScheduleId1",
      "startDateTime": "yyyy-mm-ddT00:00:00",
      "name": "DefaultSchedule1",
      "type": "Schedule",
      "period": "period",
      "endDateTime": "yyyy-mm-ddT00:00:00"
    },
    {
      "id": "S3DataNodeId1",
      "schedule": {
        "ref": "ScheduleId1"
      },
      "filePath": "s3://datapipeline-us-east-1/samples/hive-ads-samples.csv",
      "name": "DefaultS3DataNode1",
      "dataFormat": {
        "ref": "CSVId1"
      },
      "type": "S3DataNode"
    },
    {
      "id": "RedshiftCopyActivityId1",
      "input": {
        "ref": "S3DataNodeId1"
      },
      "schedule": {
        "ref": "ScheduleId1"
      },
      "insertMode": "APPEND",
      "name": "DefaultRedshiftCopyActivity1",
      "runsOn": {
        "ref": "Ec2ResourceId1"
      },
      "type": "RedshiftCopyActivity",
      "output": {
        "ref": "RedshiftDataNodeId1"
      }
    }
  ]
}
```

`APPEND` 작업은 기본 키 또는 정렬 키에 관계 없이 테이블에 항목을 추가합니다. 예를 들어 다음 테이블이 있는 경우 동일한 ID와 사용자 값으로 레코드를 추가할 수 있습니다.

```
ID(PK)     USER
1          aaa
2          bbb
```

동일한 ID와 사용자 값으로 레코드를 추가할 수 있습니다.

```
ID(PK)     USER
1          aaa
2          bbb
1          aaa
```

**참고**  
`APPEND` 작업이 중단되었다가 재시도되는 경우, 결과 재실행 파이프라인이 처음부터 잠재적으로 추가됩니다. 이로 인해 더 많은 중복이 발생할 수 있으므로 특히 행 수를 계산하는 논리가 있는 경우에는 이 동작을 숙지하고 있어야 합니다.

자습서는 [를 사용하여 Amazon Redshift에 데이터 복사 AWS Data Pipeline](dp-copydata-redshift.md)을 참조하세요.

## 구문
<a name="redshiftcopyactivity-syntax"></a>


****  

| 필수 필드 | 설명 | 슬롯 유형 | 
| --- | --- | --- | 
| insertMode |   로드할 데이터의 행과 겹치는 대상 테이블의 기존 데이터로 AWS Data Pipeline 수행하는 작업을 결정합니다. 유효 값은 `KEEP_EXISTING`, `OVERWRITE_EXISTING`, `TRUNCATE` 및 `APPEND`입니다. `KEEP_EXISTING`은 테이블에 새 행을 추가하고, 기존 행은 그대로 둡니다. `KEEP_EXISTING`과 ` OVERWRITE_EXISTING`은 기본 키, 정렬 키 및 배포 키를 사용하여 어느 수신 행이 기존 행과 일치하는지 식별합니다. Amazon Redshift *데이터베이스 개발자 안내서*의 [새 데이터 업데이트 및 삽입](https://docs.aws.amazon.com/redshift/latest/dg/t_updating-inserting-using-staging-tables-.html)을 참조하세요. `TRUNCATE`는 새 데이터를 기록하기 전에 대상 테이블의 데이터를 모두 삭제합니다.  `APPEND`는 Redshift 테이블 끝에 모든 레코드를 추가합니다. `APPEND`는 기본, 배포 키 또는 정렬 키를 사용할 필요가 없어 중복 가능성이 있는 항목이 추가될 수 있습니다.  | 열거 | 

 


****  

| 액체 호출 필드 | 설명 | 슬롯 유형 | 
| --- | --- | --- | 
| schedule |  이 객체는 예약 간격을 실행할 때 호출됩니다. 이 객체의 종속 실행 순서를 설정하려면 다른 객체로 일정 참조를 지정합니다. 대부분의 경우, 모든 객체가 일정을 상속할 수 있도록 해당 일정 참조를 기본 파이프라인 객체에 두는 것이 좋습니다. 예를 들어 `"schedule": {"ref": "DefaultSchedule"}`을 지정하여 객체에서 일정을 명시적으로 설정할 수 있습니다. 파이프라인의 마스터 일정에 중첩된 일정이 포함된 경우, 일정 참조가 있는 부모 객체를 생성합니다. 선택형 일정 구성 예제에 대한 자세한 내용은 [일정](https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-object-schedule.html)을 참조하세요.  |  "schedule":\$1"ref":"myScheduleId"\$1와 같은 참조 객체 | 

 


****  

| 필수 그룹(다음 중 하나를 제공해야 함) | 설명 | 슬롯 유형 | 
| --- | --- | --- | 
| runsOn | 활동 또는 명령을 실행할 전산 리소스입니다. Amazon EC2 인스턴스 또는 Amazon EMR 클러스터가 이에 해당합니다. | 참조 객체. 예: "runsOn":\$1"ref":"myResourceId"\$1 | 
| workerGroup | 작업자 그룹입니다. 이것은 작업 라우팅에 사용됩니다. workerGroup이 있을 때 runsOn값을 제공하면 workerGroup이 무시됩니다. | 문자열 | 

 


****  

| 선택 필드 | 설명 | 슬롯 유형 | 
| --- | --- | --- | 
| attemptStatus | 원격 활동에서 가장 최근에 보고된 상태입니다. | 문자열 | 
| attemptTimeout | 원격 작업 완료의 제한 시간입니다. 이 필드를 설정하면 설정된 시작 시간 이내에 완료되지 않는 원격 활동을 재시도할 수 있습니다. | Period | 
| commandOptions |  `COPY` 작업 중에 Amazon Redshift 데이터 노드로 전달할 파라미터를 가져옵니다. 파라미터에 대한 내용을 알아보시려면 Amazon Redshift *데이터베이스 개발자 안내서*의 [COPY](https://docs.aws.amazon.com/redshift/latest/dg/r_COPY.html)를 참조하세요. `COPY`는 테이블을 로드할 때 문자열을 대상 열의 데이터 형식으로 묵시적으로 변환하려 시도합니다. 자동으로 이루어지는 기본 데이터 변환 외에도 오류가 수신되거나 다른 변환이 필요한 경우, 추가 변환 파라미터를 지정할 수 있습니다. 자세한 내용은 Amazon Redshift *데이터베이스 개발자 가이드*의 [데이터 변환 파라미터](https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-conversion.html)를 참조하세요. 데이터 형식이 입력 또는 출력 데이터 노드와 연결된 경우에는 제공된 파라미터는 무시됩니다. 복사 작업에서는 먼저 `COPY`를 사용하여 스테이징 테이블에 데이터를 삽입한 다음 `INSERT` 명령을 사용하여 스테이징 테이블의 데이터를 대상 테이블로 복사하기 때문에 테이블 자동 압축을 활성화할 수 있는 `COPY` 명령과 같은 일부 `COPY` 파라미터는 적용되지 않습니다. 압축이 필요할 경우에는 열 인코딩 세부 정보를 `CREATE TABLE` 문에 추가합니다. 또한 Amazon Redshift 클러스터에서 데이터를 언로드하고 Amazon S3 에서 파일을 생성해야 하는 경우, `RedshiftCopyActivity`은(는) Amazon Redshift의 `UNLOAD` 작업에 의존합니다. 복사 및 언로드 중에 성능을 개선하려면 `UNLOAD` 명령에서 `PARALLEL OFF` 파라미터를 지정합니다. 자세한 내용은 Amazon Redshift *데이터베이스 개발자 안내서*에서 [UNLOAD](https://docs.aws.amazon.com/redshift/latest/dg/r_UNLOAD.html)를 참조하세요.  | 문자열 | 
| dependsOn | 실행 가능한 다른 객체의 종속성을 지정합니다. | 참조 객체: "dependsOn":\$1"ref":"myActivityId"\$1 | 
| failureAndRerunMode | 종속 요소에 장애가 있거나 재시도될 때의 소비자 노드 거동을 설명합니다. | 열거 | 
| 입력 | 입력 데이터 노드입니다. Amazon S3, DynamoDB 또는 Amazon Redshift가 데이터 소스가 될 수 있습니다. | 참조 객체:  "input":\$1"ref":"myDataNodeId"\$1 | 
| lateAfterTimeout | 파이프라인 시작 후 객체가 완료되어야 하는 경과 시간입니다. 스케줄 유형이 ondemand(으)로 설정되지 않은 경우에만 트리거됩니다. | Period | 
| maxActiveInstances | 구성요소의 동시 활성 인스턴스 최대수입니다. 재실행은 활성 인스턴스의 수에 포함되지 않습니다. | Integer | 
| maximumRetries | 장애 시 재시도 최대 횟수 | Integer | 
| onFail | 현재 객체 장애 시 실행할 작업입니다. | 참조 객체: "onFail":\$1"ref":"myActionId"\$1 | 
| onLateAction | 객체가 아직 예약되지 않았거나 아직 완료되지 않은 경우에 트리거되어야 하는 작업입니다. | 참조 객체:  "onLateAction":\$1"ref":"myActionId"\$1 | 
| onSuccess | 현재 객체 성공 시 실행할 작업입니다. | 참조 객체:  "onSuccess":\$1"ref":"myActionId"\$1 | 
| output | 출력 데이터 노드입니다. Amazon S3 또는 Amazon Redshift가 출력 위치가 될 수 있습니다. | 참조 객체:  "output":\$1"ref":"myDataNodeId"\$1 | 
| parent | 슬롯을 상속할 현재 객체의 부모입니다. | 참조 객체: "parent":\$1"ref":"myBaseObjectId"\$1 | 
| pipelineLogUri | 파이프라인의 로그를 업로드할 S3 URI(예: 's3://BucketName/Key/')입니다. | 문자열 | 
| precondition | 또는 사전 조건을 정의합니다. 모든 사전 조건이 충족되기 전까지 데이터 노드에 "READY"가 표시되지 않습니다. | 참조 객체: "precondition":\$1"ref":"myPreconditionId"\$1 | 
| 대기열 |  Amazon Redshift에서 `query_group ` 설정에 해당하며, 이것을 사용하여 대기열 내 위치에 따라 동시 실행 활동을 할당하고 우선 순위를 정할 수 있습니다. Amazon Redshift는 동시 연결 수를 15로 제한합니다. 자세한 내용은 Amazon RDS *데이터베이스 개발자 안내서*의 [대기열에 쿼리 할당](https://docs.aws.amazon.com/AmazonRDS/latest/DeveloperGuide/cm-c-executing-queries.html)을 참조하세요.  | 문자열 | 
| reportProgressTimeout |  원격 작업에서 `reportProgress`를 연속으로 호출하는 제한 시간입니다. 이 필드를 설정하면 지정된 기간 동안 진행 상황을 보고하지 않는 원격 활동은 중단된 것으로 간주하고 재시도할 수 있습니다.  | Period | 
| retryDelay | 두 번의 재시도 사이의 제한 시간 간격입니다. | Period | 
| scheduleType |  파이프라인에서 객체에 대한 일정 조정을 지정할 수 있습니다. 값은 `cron`, `ondemand` 및 `timeseries`입니다. `timeseries` 일정 조정은 각 간격이 종료될 때 인스턴스 일정이 지정됩니다. `Cron` 일정 조정은 각 간격이 시작될 때 인스턴스 일정이 지정됩니다. `ondemand` 일정을 사용하면 활성화될 때마다 한 번씩 파이프라인을 실행할 수 있습니다. 이 경우 다시 실행하기 위해 파이프라인을 복제하거나 다시 생성할 필요가 없습니다.  `ondemand` 파이프라인을 사용하려면 후속 실행마다 `ActivatePipeline` 작업을 호출합니다. `ondemand` 일정을 사용하려면 기본 객체에서 지정해야 하며, 이것이 파이프라인의 객체에 지정된 유일한 `scheduleType`이어야 합니다.  | 열거 | 
| transformSql |  입력 데이터를 변환할 때 사용되는 `SQL SELECT` 표현식입니다. `staging`이라는 테이블에서 `transformSql` 표현식을 실행합니다. DynamoDB 또는 Amazon S3의 데이터를 복사하면, AWS Data Pipeline 이 "스테이징"이라고 하는 테이블을 생성하고, 처음에는 여기에 데이터를 로드합니다. 이 테이블의 데이터는 대상 테이블을 업데이트할 때 사용됩니다. `transformSql`의 출력 스키마는 최종 대상 테이블의 스키마와 일치해야 합니다. `transformSql` 옵션을 지정하는 경우, 지정된 SQL 문에서 두 번째 스테이징 테이블이 생성됩니다. 이후 이 두 번째 스테이징 테이블은 최종 대상 테이블에서 업데이트됩니다.  | 문자열 | 

 


****  

| 실행 시간 필드 | 설명 | 슬롯 유형 | 
| --- | --- | --- | 
| @activeInstances | 현재 예약되어 있는 활성 인스턴스 객체의 목록입니다. | 참조 객체: "activeInstances":\$1"ref":"myRunnableObjectId"\$1 | 
| @actualEndTime | 이 객체의 실행이 완료된 시간입니다. | DateTime | 
| @actualStartTime | 이 객체의 실행이 시작된 시간입니다. | DateTime | 
| cancellationReason | 이 객체가 취소된 경우의 cancellationReason입니다. | 문자열 | 
| @cascadeFailedOn | 객체 실패가 발생한 종속 체인에 대한 설명입니다. | 참조 객체:  "cascadeFailedOn":\$1"ref":"myRunnableObjectId"\$1 | 
| emrStepLog | EMR 활동 시도 시에만 사용할 수 있는 EMR 단계 로그 | 문자열 | 
| errorId | 이 객체가 실패한 경우의 errorId입니다. | 문자열 | 
| errorMessage | 이 객체가 실패한 경우의 errorMessage입니다. | 문자열 | 
| errorStackTrace | 이 객체가 실패한 경우의 오류 스택 트레이스입니다. | 문자열 | 
| @finishedTime | 이 객체의 실행이 완료된 시간입니다. | DateTime | 
| hadoopJobLog | EMR 기반 활동 시도 시에만 사용할 수 있는 하둡 작업 로그. | 문자열 | 
| @healthStatus | 종료 상태에 도달한 마지막 객체 인스턴스의 성공 또는 실패를 반영하는 객체의 상태입니다. | 문자열 | 
| @healthStatusFromInstanceId | 종료 상태에 도달한 마지막 인스턴스 객체의 ID입니다. | 문자열 | 
| @healthStatusUpdatedTime | 상태가 마지막으로 업데이트된 시간입니다. | DateTime | 
| hostname | 작업 시도를 선택한 클라이언트의 호스트 이름입니다. | 문자열 | 
| @lastDeactivatedTime | 이 객체가 마지막으로 비활성화된 시간입니다. | DateTime | 
| @latestCompletedRunTime | 실행이 완료된 최근 실행 시간입니다. | DateTime | 
| @latestRunTime | 실행이 예약된 최근 실행 시간입니다. | DateTime | 
| @nextRunTime | 다음으로 예약된 실행 시간입니다. | DateTime | 
| reportProgressTime | 원격 활동에서 진행 상황을 보고한 가장 최근 시간입니다. | DateTime | 
| @scheduledEndTime | 객체의 일정 종료 시간. | DateTime | 
| @scheduledStartTime | 객체의 일정 시작 시간. | DateTime | 
| @상태 | 이 객체의 상태입니다. | 문자열 | 
| @version | 객체와 함께 생성된 파이프라인 버전입니다. | 문자열 | 
| @waitingOn | 이 객체가 대기 중인 종속 요소 목록에 대한 설명입니다. | 참조 객체:  "waitingOn":\$1"ref":"myRunnableObjectId"\$1 | 

 


****  

| 시스템 필드 | 설명 | 슬롯 유형 | 
| --- | --- | --- | 
| @오류 | 잘못 형성된 객체를 설명하는 오류. | 문자열 | 
| @pipelineId | 이 객체가 속하는 파이프라인의 ID. | 문자열 | 
| @sphere | 객체의 구입니다. 수명 주기상 객체의 위치를 나타냅니다. 예를 들어 구성 요소 객체가 인스턴스 객체를 트리거하고, 인스턴스 객체는 시도 객체를 실행합니다. | 문자열 | 