LoginSignup
5
3

More than 1 year has passed since last update.

DynamoDBに保存されているデータを一括でCSVに出力したい

Last updated at Posted at 2021-09-16

はじめに

DynamoDBでテーブルをまるっと取得するってなかなか難しくないですか?
作成された順にitem(RDBでいうレコードみたいなもの)を全件並べて解析したい!みたいなことも難しい🤔

一回のScanで取得できるデータが最大1MBという制約がなかなか厄介で、
DynamoDB コンソール上からは簡単に全件データのエクスポートができないようになっています。
ページごとの表示数をMAXの300件にしても、全件を取得するために「次のページを取得」を連打して、CSVをエクスポートする必要がありました。

Image from Gyazo

どうにか簡単にできる方法はないか色々調べてたところ、
以下の方法でコマンド一発でテーブルの内容をまるっとにCSVにエクスポートできるようになりました。

一括でCSVへ出力する方法

前提条件

  • AWS Config にAccessKeyやらのprofileを設定しておく
  • AWS CLI を使用できるようにしておく

手順

  1. jqコマンドを使用するのでインストールする (Mac環境なのでbrewでインストールしてます🍎 )
  2. AWS CLI と jqコマンドを組み合わせたコマンドを発行する
terminal
# jqコマンドをインストール
$ brew install jq

# インストールされたことを確認
$ jq --version
jq-1.6

# 全件取得とCSV出力のコマンド発行
$ aws dynamodb scan --table-name HogeTable --profile hoge-profile | jq -r '["ID","ユーザー名","作成日"], (.Items[] | [.ID.N, .Name.S, .createdAt.S]) | @csv' > sample.csv

コマンド詳細

AWS CLIでDynamoDBから値をJSONで取得

terminal
aws dynamodb scan --table-name HogeTable --profile hoge-profile

このコマンドで、DynamoDBの指定したテーブル内容をJSON形式で取得しています。
HogeTableを対象のテーブル名、hoge-profile~/.aws/configに設定しているprofileにしてください。
なんか上手くいかない!という場合はまずこのコマンドでJSONを取得できているか確認してみてください。

jqコマンドでJSONをCSVに整形

terminal
jq -r '["ID","ユーザー名","作成日"], (.Items[] | [.ID.N, .Name.S, .createdAt.S]) | @csv'

ここの箇所でJSONをCSV形式に整形しています。
jq -r 'ヘッダー, (項目) | @csv'というイメージです。
aws dynamodb scan ~コマンドで取得されるJSONは以下のような形式かと思うので、それにあわせて項目の部分を設定します。

terminal
# aws dynamodb scan ~で取得できるJSON例
{
    "Items": [
        {
            "ID": {
                "N": "1"
            },
            "Name": {
                "S": "清水真太郎"
            },
            "createdAt": {
                "S": "2021-09-13T02:33:07.443Z"
            }
        },
        {
            "ID": {
                "N": "2"
            },
            "Name": {
                "S": "柴田大知"
            },
            "createdAt": {
                "S": "2021-09-13T02:37:27.542Z"
            }
        }
    ]
}

整形されたCSVデータをCSVファイルに出力

terminal
> sample.csv

最後にCSVデータをCSVファイルとして出力させています。

まとめ

DynamoDBのテーブルに合わせてコマンドを作成するのに最初やや時間がかかりますが、
一度作成してしまえばいつでもすぐ全件をCSVにエクスポートできるようになりました!😇

DynamoDBのTipsあればぜひ教えてください!

5
3
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
5
3