Проекция раздела Athena работает не так, как ожидалось

#amazon-web-services #aws-glue #amazon-athena

#amazon-web-services #aws-glue #amazon-athena

Вопрос:

Я перехожу от зарегистрированных разделов к проекции разделов.

Ранее мои данные были разделены, p_year={yyyy}/p_month={MM}/p_day={dd}/p_hour={HH}/... и я перемещаю их в p_date={yyyy}-{MM}-{dd} {HH}:00:00/..

У меня есть таблица недавних событий, в которой хранятся события за последние 2 дня. Итак, мой p_date диапазон NOW-2DAYS,NOW . Полные параметры таблицы-

 projection.enabled: 'True'
projection.p_date.type: 'date'
projection.p_date.range: NOW-2DAYS,NOW
projection.p_date.format: 'yyyy-MM-dd HH:mm:ss'
projection.p_date.interval: 1
projection.p_date.interval.unit: 'HOURS'
  

Но когда я пытаюсь запросить это, я не получаю никаких результатов.

 SELECT COUNT(*) FROM recent_events_2d_v2
> 0
  

Однако, если я изменю диапазон дат на 2020-09-01 00:00:00,NOW , я получу результаты.

Что-то не так с относительными диапазонами дат с проекцией разделов. Кто-нибудь может увидеть, что я делаю неправильно, или это ошибка?

Комментарии:

1. Вы пробовали более длинный относительный диапазон? Как СЕЙЧАС -2 ГОДА? Или использование кавычек вокруг NOW-2DAYS,NOW

2. Да — временной диапазон действителен, поэтому выполнение этого 2YEARS не помогает. Добавление цитат также вызывает исключение синтаксического анализа GENERIC_INTERNAL_ERROR: Text ''NOW-2YEARS'' could not be parsed at index 0

Ответ №1:

Вам необходимо изменить формат даты на 'yyyy-MM-dd HH:'00:00'' (например, буквальное «00:00» вместо заполнителей минут и секунд).

То, как проекция разделов работает с датами, оставляет желать лучшего. Кажется разумным, что если вы говорите, что интервал составляет один час, временные метки округляются до ближайшего часа, но это не то, что происходит. Athena будет использовать фактическое значение «сейчас» для генерации значений разделов, и если ваш формат даты содержит поля для минут и секунд, они также будут заполнены.

Я предполагаю, что причина, по которой это сработало, когда вы использовали жестко запрограммированную временную метку, заключается в том, что Athena использует это значение в качестве начального значения для последовательности, а все остальные временные метки также будут выровнены по часу.

Ответ №2:

Если вы уверены, что ваша корзина p_date={yyyy}-{MM}-{dd} {HH}:00:00/.. содержит данные, вам необходимо убедиться, что разделы загружены правильно. Попробуйте запустить

 MSCK REPAIR TABLE recent_events_2d_v2
  

и повторно запустите запрос.

Комментарии:

1. Я использую проекцию разделов ( docs.aws.amazon.com/athena/latest/ug/partition-projection.html ) так что мне не нужно загружать разделы.

2. Я также уверен, что там есть данные, потому что в моем первоначальном сообщении я упоминал, что смог получить данные, когда изменил диапазон проекции с NOW-2DAYS заданной даты и времени

3. Установленный вами диапазон даты и времени отличается от вашего относительного диапазона. Можете ли вы попробовать установить установленный диапазон даты и времени таким образом, чтобы он был равен относительному?