У меня есть следующая схема Avro для записи, и я хотел бы выдать COPY для Redshift:
"fields": [{
"name": "id",
"type": "long"
}, {
"name": "date",
"type": {
"type": "record",
"name": "MyDateTime",
"namespace": "com.mynamespace",
"fields": [{
"name": "year",
"type": "int"
}, {
"name": "monthOfYear",
"type": "int"
}, {
"name": "dayOfMonth",
"type": "int"
}, {
"name": "hourOfDay",
"type": "int"
}, {
"name": "minuteOfHour",
"type": "int"
}, {
"name": "secondOfMinute",
"type": "int"
}, {
"name": "millisOfSecond",
"type": ["int", "null"],
"default": 0
}, {
"name": "zone",
"type": {
"type": "string",
"avro.java.string": "String"
},
"default": "America/New_York"
}],
"noregistry": []
}
}]
Я хочу сжать объект в MyDateTime
во время COPY до одногоколонка в Redshift.Я видел, что вы можете отобразить вложенные данные JSON в столбец верхнего уровня: https://docs.aws.amazon.com/redshift/latest/dg/copy-parameters-data-format.html#copy-json-jsonpaths, но я не нашел способа объединить поля непосредственно в команде COPY.
В другихсловами, есть ли способ преобразовать следующую запись (изначально в формате Avro)
{
"id": 6,
"date": {
"year": 2010,
"monthOfYear": 10,
"dayOfMonth": 12,
"hourOfDay": 14,
"minuteOfHour": 26,
"secondOfMinute": 42,
"millisOfSecond": {
"int": 0
},
"zone": "America/New_York"
}
}
В строку в Redshift, которая выглядит следующим образом:
id | date
---------------------------------------------
6 | 2010-10-12 14:26:42:000 America/New_York
Я хотел бы сделатьэто напрямую с COPY