Amazon Kinesis를 사용하여 Redshift에 JSON 투입

사전 준비



Redshift 작성은 생략합니다.
좋은 기사가 많기 때문에. . .

Redshift에 테이블 만들기



이번에는 이런 테이블을 만들었습니다.
create table logs (
  id int not null,
  value varchar(30) not null,
  created_at timestamp not null
);

Kinesis streams 만들기



이름은 log-stream, Number of shards 는 1로 했습니다.



Firehose 만들기



이름은 log-stream-firehose로 했습니다.

Source에서 Kinesis stream을 선택, 방금 만든 log-stream을 선택해



Step2: Process records



모두 기본적으로. .

Step3: Choose destination



Select destination



Amazon Redshift 선택



Amazon Redshift destination에 미리 준비한 Redshift 정보를 설정한 후
Redshift 보안 그룹을 편집하여 Firehose에서 액세스를 허용합니다.
(파란색 상자에 Firehose IP address가 쓰여 있기 때문에 그것을 허용 해 준다)

intermediate S3 destination



Redshift에 COPY 커맨드로 데이터를 전송하기 전에 한 번 S3에 올리는 곳 같습니다.
이번에는 새롭게 만들었습니다.

Amazon Redshift COPY command



COPY options를 JSON 'auto';로 설정


Step 4: Configure settings



모두 기본값으로. IAM role도 이번에 새롭게 만들었습니다.

동작 확인



AWS 명령줄 인터페이스를 사용하여 데이터를 등록해 봅니다.

이런 파일 만들기

log.json
{
  "Records": [
    {
      "Data": "{\"id\": 12345, \"value\": \"click\", \"created_at\": \"2018-09-05 00:00:00\"}",
      "PartitionKey": "124"
    }
  ],
  "StreamName": "log-stream"
}

AWS CLI로 데이터 등록
$ aws kinesis put-records --cli-input-json file:///tmp/event.json
이런 값이 돌아오면 성공입니다.
{
    "FailedRecordCount": 0,
    "Records": [
        {
            "ShardId": "shardId-000000000000",
            "SequenceNumber": "xxxxx"
        }
    ]
}

조금 기다렸다가 Redshift에서 logs 테이블을 선택해 보면. .
 select * from logs;
  id   | value |     created_at
-------+-------+---------------------
 12345 | click | 2018-09-05 00:00:00

주의점



JSON의 키는 더블 따옴표로 둘러싸여 있습니다.

문제해결

좋은 웹페이지 즐겨찾기