У меня есть файлы на S3, где два столбца содержат только положительные целые числа, которые могут быть 10^26
. К сожалению, согласно Документы AWS Athena поддерживает значения только в диапазоне до 2^63-1
(приблизительно 10^19
). Поэтому на данный момент эти столбцы представлены в виде строки.
Когда дело доходит до фильтрации, это не такая уж большая проблема, так как я могу использовать регулярные выражения. Например, если я хочу получить все записи между 5e^21
и 6e^21
, мой запрос будет выглядеть следующим образом:
SELECT *
FROM database.table
WHERE (regexp_like(col_1, '^5[\d]{21}$'))
У меня будет приблизительно 300M строк (около 12 ГБ в паркете)и это занимает около 7 секунд, поэтому с точки зрения производительности все в порядке.
Однако иногда я хотел бы выполнить некоторые математические операции над этими двумя большими столбцами, например вычесть один большой столбец из другого. Приведение этих записей к DOUBLE не будет работать из-за ошибки аппроксимации. В идеале я бы хотел остаться в Афине. На данный момент у меня есть около 100M строк, которые больше 2^63-1
, но это число может возрасти в будущем.
Что было бы правильным способом решения проблемы с числовымзаписи, которые превышают доступный диапазон? Кроме того, что вы думаете об использовании регулярных выражений для фильтрации? Есть ли лучший / более подходящий способ сделать это?