запрос athena для свертывания разреженных матричных / столбчатых данных

#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. Элегантно, просто, спасибо.