我的服务器日志数据如下所示:
2014-04-16 00:01:31-0400,583 {"Items": [
{"UsageInfo"=>"P-1008366", "Role"=>"Abstract", "RetailPrice"=>2, "EffectivePrice"=>0},
{"Role"=>"Text", "ProjectCode"=>"", "PublicationCode"=>"", "RetailPrice"=>2},
{"Role"=>"Abstract", "RetailPrice"=>2, "EffectivePrice"=>0, "ParentItemId"=>"396487"}
]}
我想要一个连接两个表的关系数据库 - 一个UsageLog表和一个UsageLogItems表,由主键id连接。
你可以看到UsageLog表有如下的字段:
UsageLogId
Date
Time
和UsageLogItems表将包含
之类的字段UsageLogId
UsageInfo
Role
RetailPrice
...
但是,我无法将这些内容写入Redshift,并且能够将每个记录与唯一且相关的ID作为关键字关联。
我目前正在做的是使用ruby脚本读取日志文件的每一行,解析出UsageLog信息(例如日期和时间),将其写入数据库(将单行写入Redshift非常慢) ),然后从UsageLogItems信息创建数据的csv,并通过S3将其导入Redshift,查询UsageLogs表的最大id并使用该数字将两者相关联(这也很慢,因为许多UsageLogs不包含任何项目,所以我经常加载来自csv文件的0条记录)。
这目前确实有效,但要完全有效,实在太慢了。有没有更好的方法来解决这个问题?
答案 0 :(得分:0)
Amazon Redshift通过COPY命令使用JSONPaths支持JSON摄取。
http://docs.aws.amazon.com/redshift/latest/dg/copy-usage_notes-copy-from-json.html