この記事は約5分で読めます。
この記事は1年以上前に書かれたものです。
内容が古い可能性がありますのでご注意ください。
こんにちは。
アプリケーションサービス部の兼安です。
本記事は、Amazon TimestreamでCSVエクスポートとインポートを行う方法を紹介します。
はじめに
Amazon Timestreamはマネージドの時系列データベースです。
Amazon TimestreamではSQLを使用できますが、RDBとは似て非なるものです。
単純なINSERT・DELETE文は使えないので、テストデータの作成は少々手間がかかります。
そこで、今回は、Amazon TimestreamでCSVのエクスポートとインポートを行う方法について紹介します。
UNLOAD機能を用いてCSVでエクスポートする
CSVエクスポートは、UNLOADという機能を使用します。
なお、Amazon Timestreamにはバックアップというメニューがありますが、こちらはファイル出力ではないので今回の用途には向いていません。
UNLOAD (SELECT * FROM "テーブル名"."データベース名")TO 's3://バケット名'WITH ( include_header = 'true' )
このようなSQLを、クエリエディタで実行すると、S3バケットにSQLの実行結果をエクスポートできます。
フォーマットは、CSV
とPARQUET
が選択できて、何も指定しなければCSVになることを確認しました。
ヘッダは何も指定しなければ付かないので、WITH ( include_header = 'true' )
を付けるとよいと思います。
その他のオプションは上述のリンク先をご覧ください。

クエリを実行すると、画面下にエクスポート結果が表示されます。
結果フォルダをクリックすると、出力先のS3バケットに移動できます。


gzファイルをダウンロード、解凍するとCSVファイルが得られます。
このCSVファイルをインポートに活用することができます。

バッチロードタスクを用いてCSVをインポートする
CSVのインポートは、Amazon Timestreamのバッチロードタスクという機能を使用します。
インポート用のCSVデータ
用意したCSVデータは以下の通りです。
このファイルをS3バケットにアップして使用します。
タイムスタンプはUTCであることに注意してください。

このCSVは、UNLOADで出力したCSVをベースにしていますが、time列を日付文字列からタイムスタンプに変換しています。
日付文字列のままだと、タイムスタンプとして認識されず、インポート時にエラーなることを確認しました。
回避策はあるかもしれませんが、タイムスタンプに変換した方が早かったのでそのようにしています。
タイムスタンプへの変換には、以下のExcelの式を使用しました。
=(A1 - DATE(1970,1,1)) * 86400
バッチロードタスクの実行
では、バッチロードタスクを実行していきます。
まずは、Amazon Timestreamのメニューでバッチロードタスク
を選択し、バッチロードタスクを作成
をクリックします。

ターゲットのデータベースとテーブル、インポート元となるファイルをS3バケットから選択します。

ファイル形式のデフォルトはCSVです。
区切り文字などを変更したければ、指定します。

データモデルマッピングは、今回はビジュアルビルダーを選択し、手動でマッピングを設定することにします。

データソース列をロード
をクリックするとS3にあるファイルをロードし、列定義が表示されます。

CSVとテーブルの列名が一致していれば、ソース列名
とターゲットテーブルの列名
は自動で埋まります。
Timestream属性タイプ
は初期は空白なので選択をします。
測定値はMULTI
を指定し、型を個別に指定しないといけないことに注意です。
マッピングは載っているものは全て定義しないといけないので不要なものはチェックして列マッピングを削除
で削除します。

エラーログレポートの格納先を設定したら、次へ
をクリックします。

確認画面が表示されます。
この時、JSONが表示されるので、これを控えておくと同じ設定でバッチロードタスクを作る時に活用できます。


確認が完了したら、バッチロードタスクを作成
をクリックします。
一覧画面に戻り、タスクが開始したことが確認できます。
タスクが完了した、クエリエディタでレコードを確認できるはずです。


JSONを使用したバッチロードタスク
上述の手順ではビジュアルビルダーでマッピングを作りましたが、マッピングはJSONでも定義可能です。
この時、先ほど触れた確認画面で表示されたJSONがあれば、JSONエディターに貼り付けることで同じマッピングを再現することができます。

補足
バッチロードタスクが認識する列は100列まで
現状、バッチロードタスクが認識する列は100列までのようです。 100列を超えるCSVを指定すると、以下のメッセージが表示されます。

新規テーブルに対するバッチロードタスク
バッチロードタスクにおいて、データのインポート先のデータベースとテーブルは新規でも既存でも問題ありません。
Amazon TimestreamはスキーマレスのDBなので、テーブルが新規の場合列定義が存在しませんが、インポート同時に列定義ができて正常に登録されることを確認しました。
バッチロードタスクの実行中の注意
バッチロードタスクの実行中に他から書き込みを行うと、エラーが起きることがあるようなので注意してください。 Amazon Timestream新機能紹介と実演
バッチロードタスクの実行中は、同じテーブルへのデータ書き込みはタス クのエラーにつながる可能性があり、避けた方が良い
兼安 聡(執筆記事の一覧)
アプリケーションサービス部 DS3課所属
2024 Japan AWS Top Engineers (Database)
2024 Japan AWS All Certifications Engineers
2025 AWS Community Builders
Certified ScrumMaster
PMP
広島在住です。今日も明日も修行中です。