#amazon-redshift #aggregate-functions
#amazon-redshift #агрегатные функции
Вопрос:
Я предпочитаю агрегировать результаты подзапроса в виде массива JSON в PostgreSQL.
Это пример.
SELECT
a.name,
(
SELECT json_agg(json_build_object('col1', b.col1)) AS data
FROM table_b AS b WHERE b.year = a.year
) AS data
FROM
table_a AS a
Как я могу сделать то же самое в Redshift?
Ответ №1:
Как я полагаю, вы знаете, redshift основан на Postgres 8 и не имеет этих функций. Я могу придумать 2 способа, которыми вы можете продолжить. 1) напишите приложение на python для подключения к Redshift изначально и используйте библиотеки python для создания желаемого вывода JSON. Это может быть правильным путем, если JSON являются сложными и / или если считыватель JSON является некоторой автоматизацией. Вы должны быть в состоянии создать хранимую процедуру из этого python. Или 2) используйте list_agg() для генерации искомой строки JSON. Этот маршрут довольно прост и должен работать нормально для простых конструкций JSON. Вы также можете запрограммировать это в хранимой процедуре, если хотите.
# 2 выглядит примерно так (непроверено):
SELECT '[' || list_agg('{"col1": "' || col1 || '"}', ', ') || ']' FROM ...