Афина date_parse для даты с необязательным полем миллисекунды

У меня есть дата в 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 и один без Есть ли способ предоставить синтаксический анализатор, регулярное выражение, чтобы я мог преобразовать эти строки в дату во время выполнения запроса sql?

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
8
0
16 097
3

Ответы 3

Тебе просто нужно свидание?

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

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

нет необходимости делать time_diff и, следовательно, анализ миллисекунд был важен.

Scorpion 13.09.2018 20:23

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

Таким образом, будут проанализированы все временные метки.

select from_iso8601_timestamp(creationdate) from table1;

Потрясающе, Йенс, во всех случаях работало. Спасибо. +1 за ваше решение

Scorpion 13.09.2018 20:24

@jens walter: сэкономил много времени и сил / \

Ronak Agrawal 31.12.2020 09:29

Использовать этот:

SELECT requestdatetime, remoteip, requester, key
       FROM MYDB.TABLE
       WHERE parse_datetime(requestdatetime,'dd/MMM/yyyy:HH:mm:ss Z') 
       BETWEEN parse_datetime('2020-10-14:00:00:00','yyyy-MM-dd:HH:mm:ss')
           AND parse_datetime('2020-10-14:23:59:59','yyyy-MM-dd:HH:mm:ss');

Другие вопросы по теме