Использование функции объединения Presto со строкой в AWS Athena

#presto #amazon-athena #amazon-waf

#presto #amazon-athena #amazon-waf

Вопрос:

Я использую брандмауэр веб-приложений AWS (WAF). Журналы записываются в корзину S3 и запрашиваются AWS Athena.

Некоторые поля журнала представляют собой не простые типы данных, а сложные типы JSON. Например, «rulegrouplist». Он содержит массив JSON сложных типов, и массив может содержать 0 или более элементов.

Итак, я использую функцию Presto try() для преобразования ошибок в нули и пытаюсь использовать функцию coalesce(), чтобы поставить тире на их место. (Сохранение нулевых значений вызывает проблемы при использовании GROUP BY)

try() работает нормально, но coalesce() вызывает проблему несоответствия типов.

Вызов функции ниже:

 coalesce(try(waf.rulegrouplist[1].terminatingrule),'-')
 

вызывает эту ошибку:

 All COALESCE operands must be the same type: row(ruleid varchar,action varchar,rulematchdetails varchar)
 

Как я могу преобразовать «-» в строку или что еще я могу использовать, что будет считаться строкой?

Ответ №1:

По-видимому, вы можете создать пустую строку и преобразовать ее в типизированную строку.

Это сработало…

 coalesce(try(waf.rulegrouplist[1].terminatingrule),CAST(row('null','null','null') as row(ruleid varchar,action varchar,rulematchdetails varchar)))