Взорвать массив в Афине - PullRequest
       8

Взорвать массив в Афине

0 голосов
/ 25 сентября 2018

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

Я пытался взорвать, преобразовать, но безуспешно.Я успешно сделал это в Spark and Hive.Но эта Афина обманывает меня.Пожалуйста, посоветуйте

DROP TABLE bi_data_lake.royalty_v4;
CREATE external TABLE bi_data_lake.royalty_v4 (
   KAFKA_ID string,
   KAFKA_TS string,
   deviceUser struct< deviceName:string, devicePlatform:string >,
   consumeReportingEvents array<
                                struct<
                                        consumeEvent: string,
                                        consumeEventAction: string,
                                        entryDateTime: string
                                      >
                               >
   )
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
LOCATION 's3://XXXXXXXXXXX';

Запрос, который не работает

select kafka_id, kafka_ts,deviceuser, 
transform( consumereportingevents, consumereportingevent -> consumereportingevent.consumeevent) as cre
from bi_data_lake.royalty_v4 
where kafka_id = 'events-consumption-0-490565';

Не поддерживается разнесенный вид сбоку (самовывоз репортажных событий) как саморазвитие репортажного события

Ответ на вопрос, чтобы использовать unnset

Нашел ответ на мой вопрос

WITH samples AS (
 select kafka_id, kafka_ts,deviceuser, consumereportingevent, consumereportingeventPos
 from bi_data_lake.royalty_v4 
 cross join unnest(consumereportingevents)  WITH ORDINALITY AS T (consumereportingevent, consumereportingeventPos)
 where kafka_id = 'events-consumption-0-490565' or kafka_id = 'events-consumption-0-490566'
)
SELECT * FROM samples
...