LoginSignup
1
2

More than 5 years have passed since last update.

Amazon Kinesisを使ってRedshiftにJSONを投入

Posted at

事前準備

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にしました。

スクリーンショット 2018-09-07 10.32.37.png

Firehoseの作成

名前はlog-stream-firehoseにしました。

SourceでKinesis streamを選択、さっき作ったlog-streamを選んで

スクリーンショット 2018-09-06 20.41.11.png

Step2: Process records

全てデフォルトで。。

Step3: Choose destination

Select destination

Amazon Redshiftを選択

スクリーンショット 2018-09-06 20.42.06.png

Amazon Redshift destinationに事前に準備したRedshiftの情報を設定した後
Redshiftのセキュリティグループを編集してFirehoseからアクセスを許可します。
(水色の箱にFirehose IP addressが書かれているのでそれを許可してやる)

intermediate S3 destination

RedshiftにCOPYコマンドでデータを転送する前に一度S3にあげる先みたいです。
今回は新しく作りました。

Amazon Redshift COPY command

COPY optionsにJSON 'auto';を設定
スクリーンショット 2018-09-06 20.42.52.png

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してみると。。

 select * from logs;
  id   | value |     created_at
-------+-------+---------------------
 12345 | click | 2018-09-05 00:00:00

注意点

JSONのキーはダブルクォーテーションで囲む

トラブルシューティング

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2