Amazon Redshift 使用 COPY 命令仅从 JSON 中获取 1 行

Posted

技术标签:

【中文标题】Amazon Redshift 使用 COPY 命令仅从 JSON 中获取 1 行【英文标题】:Amazon Redshift gets only 1 row from JSON with COPY command 【发布时间】:2020-08-04 13:54:01 【问题描述】:

我正在尝试将具有以下结构的 GA 数据复制到 Redshift JSON 文件中:


  "reports": [
    
      "columnHeader": 
        "dimensions": [
          "ga:date",
          "ga:country"
        ],
        "metricHeader": 
          "metricHeaderEntries": [
            
              "name": "ga:users",
              "type": "INTEGER"
            ,
            
              "name": "ga:newUsers",
              "type": "INTEGER"
            ,
            
              "name": "ga:sessionduration",
              "type": "TIME"
            
          ]
        
      ,
      "data": 
        "rows": [
          
            "dimensions": [
              "20200731",
              "(not set)"
            ],
            "metrics": [
              
                "values": [
                  "7",
                  "6",
                  "5.0"
                ]
              
            ]
          ,
          
            "dimensions": [
              "20200731",
              "Albania"
            ],
            "metrics": [
              
                "values": [
                  "2",
                  "1",
                  "0.0"
                ]
              
            ]
          ,
          
            "dimensions": [
              "20200731",
              "Algeria"
            ],
            "metrics": [
              
                "values": [
                  "1",
                  "1",
                  "224.0"
                ]
              
            ]
          ,

如果我使用以下 JSON 路径,它只会加载数组中的第一个对象:


    "jsonpaths": [
       "$['reports'][0]['data']['rows'][0]['dimensions'][0]",
       "$['reports'][0]['data']['rows'][0]['dimensions'][1]",
       "$['reports'][0]['data']['rows'][0]['metrics'][0]['values'][0]" ,
       "$['reports'][0]['data']['rows'][0]['metrics'][0]['values'][1]" ,
       "$['reports'][0]['data']['rows'][0]['metrics'][0]['values'][2]" 
    ]

我尝试将 ['rows'][0] 更改为 ['rows'][*] 和 ['rows'] 但没有任何帮助。 我应该如何更改 JSON 路径以从文件中加载所有数据?

谢谢!

【问题讨论】:

向我们展示您的 SQL 尝试。 从 's3://mbit-warehouse/TransferGANonBounceSessionsDataFromGaToS3/f33d58b1960c20d5bf84fc2ee4ae031a-2020-08-04T10:24:776' iam_role 'arn:aws:iam::role 复制 dev.google_analytics.ga_country_test /XXXXX' JSON 's3://mbit-warehouse/TransferGANonBounceSessionsDataFromGaToS3/testfirst_copy.json' DATEFORMAT 'YYYYMMDD' 【参考方案1】:

由于您指定的索引[0](第一项),Redshift 只能看到第一行。您目前不能直接摄取像这样嵌套的 JSON。

要访问此文件中的所有嵌套数组,您需要将其定义为外部表,然后使用嵌套数据查询语法。

从这里开始:"Tutorial: Querying nested data with Amazon Redshift Spectrum"

【讨论】:

以上是关于Amazon Redshift 使用 COPY 命令仅从 JSON 中获取 1 行的主要内容,如果未能解决你的问题,请参考以下文章

amazon redshift jdbc driver CopyManager.copyIn COPY 命令语法

使用 Avro 文件批量复制到 Amazon Redshift 中的异常处理

Amazon RedShift 中的“复制”命令是不是是原子的?

Redshift COPY 命令与 AWS 数据管道 RedshiftCopyActivity

RedShift Copy - 列数不匹配 - 可以在卸载中指定吗?

Amazon Redshift 错误地四舍五入 Numeric(9,4) 值