APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

DynamoDBにS3経由のCSVインポートを試してみた

はじめに

こんにちは、クラウド事業部の志摩です。

DynamoDBにデータを投入する場合、複数の方法があると思いますが、今の現場で仮にDynamoDBを活用するとなった場合、csvファイルを使う可能性が高い気がするので、csvファイルからテーブル作成する方法を試してみました。

下準備

DynamoDBからCSVエクスポート機能があるため、取り込むためのファイルを自ら生成し、それを別の新規テーブル用に読み込ませることで、機能を試してみようと思います。

ダウンロードしたCSVをS3へアップロード。

DynamoDBへインポートするS3バケットを指定。

新規テーブル作成。

インポート

いざ!

見事にエラー。(すこし変えて2回やったがだめ)

しかし、テーブルはできていた。(謎)

エラーのままのテーブルは使いたくないので、調査開始。 ひとまずCloudWatchLogsからエラーメッセージを確認する。

エラーメッセージでググったところ、早速同じ悩みの記事を発見。要約すると、

・S3はフォルダをネイティブにサポートしていないが、それを補うために、S3にフォルダを作成すると、0byteのオブジェクトとして作成される。

・S3へインポートする際、0byteのオブジェクトを読み込むことによって、エラーが出る。

と、ざっくりいうとそういうことらしい。

そういうことであれば、新規バケット作成し、読み込ませたいCSVのみを配置すればいけるのでは?!と思い、早速試してみる。まずは新規バケット作成。

新規バケットにファイルを単品で配置。

新規バケットを指定して、改めてアップロード。

成功!!

テーブルも問題なく作成されている。

まとめ

思わぬところでエラーを踏みましたが、S3の仕様など、学ぶところが多かったです。

ググっているうちに知ったことも含め、

・S3のフォルダの存在が、読み込みエラーの要因になることがある。

・S3からCSVをインポートする際、パーティションキーやソートキーは、指定したデータ型で取り込まれるが、それ以外は全て文字列型で取り込まれる。(ググって知りました)

を、今回学べました。

★参考★

DynamoDB の S3 インポート機能は CSV の場合だとすべて文字列型で取り込まれてしまう | DevelopersIO (classmethod.jp)

最後に

S3経由のCSVはお手軽にインポートできる分、S3におけるフォルダ関連エラーの可能性や、キー以外の型について指定したい場合はひと手間かかるということで、やはり用途に応じて、JSONの直接取り込みとの使い分けになっていくのかなと思います。

読んでいただき、誠にありがとうございました。