Как скопировать из s3 в красное смещение с помощью jsonpaths, в то время как некоторые столбцы по умолчанию равны нулю - PullRequest
0 голосов
/ 22 мая 2019

Я определил существующую таблицу в красном смещении с определенными столбцами. Это уже успешно сопоставлено из одного сегмента S3 с помощью определения jsonpaths и команды COPY FROM JSON. Это все отлично работает.

Но теперь у меня есть данные в другом формате, которые хранятся в другом сегменте S3, и я хотел бы также поместить эти данные в одну и ту же таблицу в красное смещение. Тем не менее, эти новые данные не имеют значений для всех столбцов в этой таблице красного смещения - я хотел бы просто по умолчанию эти определенные значения в таблице красного смещения равны нулю для новых данных сегмента. Моя проблема в том, что я не знаю, как лучше настроить определение jsonpaths для использования нового сегмента S3, чтобы я также мог легко запустить COPY FROM JSON для нового сегмента s3.

Я пытаюсь избежать предварительной обработки новых данных корзины, что может включать добавление дополнительных ключей (для сопоставления с нежелательными столбцами) с пустыми значениями.

Я попытался просто поместить пустые строки в jsonpath, чтобы выровнять их по столбцам в красном смещении, для которых мне все равно, для чего вводить значения. Однако в документации по смещению красного сечения AWS указывается, что пустые строки вызывают ошибку при выполнении команды COPY FROM JSON. https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-format.html#copy-json-jsonpaths

Существующая таблица красного смещения

CREATE TABLE events (
    platform_name VARCHAR(10),
    app_id VARCHAR(10),
    app_version VARCHAR(10)
)

Существующий файл карты для существующего сегмента

{
    "jsonpaths": [
       "$['device']['platform']['name']",
       "$['application']['app_id']",
       "$['application']['version_code']"
    ]
}

Файл карты для нового сегмента, где объекты данных имеют только значение, соответствующее name, а НЕ * app_id или app_version. Но я хочу поместить их в одну таблицу красного смещения.

{
    "jsonpaths": [
       "$['platform']",
       ???,
       ???
    ]
}

Не будет ли в новом формате какой-либо вариант размещения в пути JSON, который я точно знаю? Казалось бы странным ...

1 Ответ

0 голосов
/ 23 мая 2019

Давайте по-другому.

Оставьте вашу таблицу events как есть, создайте новую таблицу events2? в

CREATE TABLE events2 (
platform_name VARCHAR(10)
)

Загрузка events2 таблица с

{
"jsonpaths": [
   "$['platform']"
] 
}

Создайте вид, подобный следующему, чтобы увидеть все данные о событиях

CREATE VIEW all_events AS
  SELECT platform_name, app_id, app_version
    FROM events
  UNION ALL
  SELECT platform_name, '', '' 
    FROM events2

Это больше похоже на обходной путь, но до тех пор, пока он работает, почему бы и нет. Будет ли это возможным решением для вас?

...