S3の時系列データをGlueを使ってDynamoDBに入れようとした時、範囲検索できるようにするには数値でRangeKeyとして投入する必要があるため日時の文字列をUnixtimeに変換するようにしました。
DynamicFrameにcreated_at
というカラムで入っている日付の文字列(%Y-%m-%d %H:%M:%S形式)をUnixtimeに変換します。
import time
# --- glueContextなどの設定 ---
def datetime_to_unixtime(dynamicRecord):
date_time = time.strptime(dynamicRecord['created_at'], "%Y-%m-%d %H:%M:%S")
unix_time = int(time.mktime(date_time))
dynamicRecord['created_at'] = unix_time
return dynamicRecord
# S3からデータの読み込み(事前にテーブルの定義はしておく)
datasource_s3 = glueContext.create_dynamic_frame.from_catalog(database = "s3data", table_name = "sample_table", transformation_ctx = "datasource_s3")
ds_s3 = Map.apply(frame=datasource_s3, f=datetime_to_unixtime)
glueContext.write_dynamic_frame_from_options(
frame=ds_s3,
connection_type="dynamodb",
connection_options={
"dynamodb.output.tableName": "dynamodb_sample_table"
}
)