Athena date_parse для даты с необязательным миллисекундным полем - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть дата в S3, с помощью которой я создал таблицу Athena. У меня есть несколько записей в формате S3 в формате json, которые Афина не принимает ни как дата, ни как отметка времени при выполнении запросов.

Использование AWS Athena, которая использует Prestodb в качестве механизма запросов

Пример json:


    {"creationdate":"2018-09-12T15:49:07.269Z", "otherfield":"value1"}
    {"creationdate":"2018-09-12T15:49:07Z", "otherfield":"value2"}

AWS Glue принимает оба поля как строку, и когда я изменяю их на отметку времени и дату, соответственно, запросы вокруг отметки времени не работают, что дает ValidationError для поля отметки времени.

Во всяком случае, я нашел способ использовать функцию prestodb date_parse, но она тоже не работает, так как некоторые поля имеют миллисекунды, а другие нет.


    parse_datetime(creationdate, '%Y-%m-%dT%H:%i:%s.%fZ')
    parse_datetime(creationdate, '%Y-%m-%dT%H:%i:%sZ')

Обе сбои из-за наличия разных записей, то есть одна с миллисекундами% f, а другая без Есть ли способ предоставить синтаксический анализатор, regex, чтобы можно было преобразовать эти строки в Date во время выполнения SQL-запроса?

Ответы [ 2 ]

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

Вместо предоставления формата отметки времени вы можете использовать функцию from_iso8601_timestamp.

Таким образом, все метки времени анализируются.

select from_iso8601_timestamp(creationdate) from table1;
0 голосов
/ 13 сентября 2018

Вам просто нужна дата?

Если это так, вы можете использовать date_parse (строка, формат).

date_parse(creationdate, ‘%Y-%m-%d’)
...