В настоящее время у нас есть задача DMS, которая будет принимать содержимое базы данных MySQL и выгружать файлы на S3 в формате паркета.
Формат временных меток в паркете заканчивается как TIMESTAMP_MICROS.
Это проблема, поскольку Presto (базовая реализация Athena) не поддерживает временные метки с точностью до микросекунды и делаетПредположение, что все метки времени имеют точность в миллисекундах.
Это не вызывает прямых ошибок, но отображает время как некоторую крайнюю будущую дату, так как оно интерпретирует число микросекунд как количество миллисекунд.
В настоящее время мы работаем над этим, создавая представления Athena поверх таблиц Athena, которые принимают эти временные метки, преобразуют их в временную метку Unix (то есть число), делят на 1000, чтобы преобразовать в разрешение в миллисекундах, а затем преобразовывают обратно.до отметки времени.
Это было бы хорошо для доказательства концепции и выявления проблемы, но это не сработает для нас, так как у нас много таблиц с множеством столбцов отметок времени, и мы не хотим вводить эту хрупкуюпосмотреть слой сверху.
Билеты поддержки были созданы для команд Athena и DMS, и оба подтвердили проблему и создали запросы функций для их завершения, чтобы создать собственное решение для этого несовместимого, но ни один инженер поддержки не мог предложить встроенный обходной путь.DMS, похоже, не поддерживает изменение типа столбца с точностью до миллисекунды или строки varchar.Для Афины это просто задокументированное ограничение Престо.
Кто-нибудь сталкивался с этим раньше и нашел решение?
Изменение точности в базе данных MySQL на самом деле не вариант, так как оно используется многими клиентами, и мы не хотим рисковать нарушением интерфейса.
Я рассматриваю возможность создания задания, котороебудет запускаться каждый раз, когда создается новый паркет для поиска полей TIMESTAMP_MICRO и их столбца в TIMESTAMP_MILLIS.Не совсем уверен, что лучший способ сделать это (работа Glue / Spark?)
DMS был великолепен и сделал супер простой дамп паркет, могут быть другие способы извлечения данных из MySQL.Любые другие инструменты, которые могут сделать это без особой разработки?