Redshift:从 s3 复制命令 Json 数据

Posted

技术标签:

【中文标题】Redshift:从 s3 复制命令 Json 数据【英文标题】:Redshift: copy command Json data from s3 【发布时间】:2019-05-17 12:26:15 【问题描述】:

我有以下 JSON 数据。

  
   "recordid":"69",
   "recordTimestamp":1558087302591,
   "spaceId":"space-cd88557d",
   "spaceName":"Kirtipur",
   "partnerId":"Kirtipur",
   "eventType":"event-location-update",
   "eventlocationupdate":  
      "event":  
         "eventid":"event-qcTUrDAThkbPsXi438rRk",
         "userId":"",
         "tags":[  

         ],
         "mobile":"",
         "email":"",
         "gender":"OTHER",
         "firstName":"",
         "lastName":"",
         "postalCode":"",
         "optIns":[  

         ],
         "otherFields":[  

         ],
         "macAddress":"55:56:81????????a4:6d"
      ,
      "location":  
         "locationId":"location-bdfsfsf6a8d96",
         "name":"Kirtipur Office - wireless",
         "inferredLocationTypes":[  
            "NETWORK"
         ],
         "parent":  
            "locationId":"location-c39ffc49",
            "name":"Kirtipur",
            "inferredLocationTypes":[  
               "vianet"
            ],
            "parent":  
               "locationId":"location-8b47asdfdsf1c6a",
               "name":"Kirtipur",
               "inferredLocationTypes":[  
                  "ROOT"
               ]
            
         
      ,
      "ssid":"",
      "rawUserId":"",
      "visitId":"visit-ca04ds5secb8d",
      "lastSeen":1558087081000,
      "deviceClassification":"",
      "mapId":"",
      "xPos":1.8595887,
      "yPos":3.5580606,
      "confidenceFactor":0.0,
      "latitude":0.0,
      "longitude":0.0
   

我需要使用复制命令从 s3 存储桶中加载它。我已将此文件上传到我的 S3 存储桶。

我使用过 csv 文件的复制命令,但没有使用过 JSON 文件的复制命令。我研究了通过复制命令导入 json,但没有找到可靠的有用命令示例。

我在复制命令中使用了以下代码。

COPY vianet_raw_data 
from 's3://vianet-test/vianet.json' 
with credentials as '' 
format as json 'auto';

这没有插入任何数据。

谁能帮我处理这种 JSON 的复制命令?

感谢和问候

【问题讨论】:

STL_LOAD_ERRORS 表中是否有错误? 嘿@JohnRotenstein,没有错误。 我会尝试使用 jsonpath 文件映射 json 标签docs.aws.amazon.com/redshift/latest/dg/… 【参考方案1】:

有两种情况(很可能是第一种):

    您希望 AWS 的自动选项从您在第 2 行中提供的 s3 加载。为此,您可以:
COPY vianet_raw_data 
from 's3://vianet-test/vianet.json' 
with credentials as '' 
json 'auto';
    使用自定义 json 加载路径(即您不希望所有路径都自动)
COPY vianet_raw_data 
from 's3://vianet-test/vianet.json' 
with credentials as '' 
format as json 's3://vianet-test/vianet_PATHS.json';

这里,“s3://vianet-test/vianet_PATHS.json”包含您要查看的主要位置的所有特定 JSON。

参考:https://docs.aws.amazon.com/redshift/latest/dg/r_COPY_command_examples.html#r_COPY_command_examples-copy-from-json

【讨论】:

以上是关于Redshift:从 s3 复制命令 Json 数据的主要内容,如果未能解决你的问题,请参考以下文章

将具有多个值的 JSON 从 S3 复制到 Redshift

Node-Redshift 是不是支持复制命令(查询)将数据从 S3 加载到 Redshift?

在 Redshift 中复制 JSON 列

RedShift 复制命令返回

将 csv 和 json 数据从 S3 复制到 Redshift

将 JSON 数据从 dynamoDB 复制到 redshift