如何将嵌套的json数据导入多个连接的redshift子表?

时间:2014-09-29 13:22:57

标签: json postgresql csv amazon-web-services amazon-redshift

我的服务器日志数据如下所示:

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条记录)。

这目前确实有效,但要完全有效,实在太慢了。有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

Amazon Redshift通过COPY命令使用JSONPaths支持JSON摄取。

http://docs.aws.amazon.com/redshift/latest/dg/copy-usage_notes-copy-from-json.html