#sparse-matrix #parquet #amazon-athena
Вопрос:
Предположим, у меня есть следующая таблица table1
в Amazon Athena (технически, в клею):
torg, foo, bar, x1, x2, x3, baz
-------------------------------
t1, 1, NULL, NULL, NULL, NULL, goober
t2, 1, NULL, NULL, NULL, NULL, NULL -- want to ignore this row entirely, even though foo=1
t3, 1, tronic, NULL, NULL, NULL, NULL
...
t4, 2, NULL, NULL, NULL, NULL, horse
t4, 2, zebra, NULL, NULL, NULL, NULL
...
Существует ли запрос Athena, который может group by
foo
(в этом примере foo=1
), но игнорирует NULL
значения столбцов для каждой строки, чтобы результат выглядел так?
foo, bar, baz
----------------
1, tronic, goober
Для контекста я пишу как разделенный паркет в S3 в разное время. Замечательно использовать Athena для запроса этих данных, но мне трудно представить, подходит ли Athena для «сворачивания» этих столбчатых данных в более «строчные» данные, сгруппированные по определенному столбцу (или набору столбцов).
Хотя я, скорее всего, буду продолжать работать с этими данными в pandas и смогу «свернуть» их там, я надеялся, что в Athena может быть шаблон запроса. Или, возможно, я думаю об этом совершенно неправильно…
Любое понимание очень ценится.
Ответ №1:
Если у вас есть только одно значение для каждой группы, вы можете использовать max
(или min
) и group by
:
WITH dataset(foo,bar, baz) AS (
VALUES
(1,NULL,'tronic'),
(1,'goober',NULL),
(1,NULL, NULL)
)
SELECT foo, max(bar) bar, max(baz) baz
FROM dataset
GROUP BY foo
Выход:
фу | бар | баз |
---|---|---|
1 | земляной орех | tronic |
Комментарии:
1. Элегантно, просто, спасибо.