Amazon Redshift получает только 1 строку из JSON с помощью команды COPY - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь скопировать в Redshift JSON файл с данными GA со следующей структурой:

{
  "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, он загружает только первый объект в array:

{
    "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 пути для загрузки всех данных из файла?

Спасибо!

1 Ответ

0 голосов
/ 04 августа 2020

Redshift видит только первую строку из-за указанного вами индекса [0] (первый элемент). Вы не можете в настоящее время напрямую загружать JSON, вложенный таким образом.

Чтобы получить доступ ко всем вложенным массивам в этом файле, вам необходимо определить его как внешнюю таблицу, а затем использовать Синтаксис запроса вложенных данных.

Начните здесь: «Учебное пособие: запрос вложенных данных с помощью Amazon Redshift Spectrum»

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...