Ошибка BigQuery: невозможно вернуть недопустимое значение метки времени в 6328502092800000000 микросекунд относительно эпохи Unix
Мы используем простой запрос выбора со стандартным SQL в BigQuery.
select expiration_date FROM cards
Но, он возвращает ошибку ниже,
Ошибка: невозможно вернуть недопустимое значение метки времени 6328502092800000000 микросекунд относительно эпохи Unix. Диапазон допустимых значений меток времени: [0001-01-1 00:00:00, 9999-12-31 23:59:59.999999];
Может ли кто-нибудь помочь мне за то же самое?
1 ответ
Проблема, с которой вы сталкиваетесь, заключается в том, что для стандартного SQL и устаревшего SQL используются разные определения TIMESTAMP
тип данных. На самом деле, стандартный SQL имеет более строгий диапазон TIMESTAMP
ценности, будучи 253402300799999999
максимальное значение и -62135596800000000
минимум (учтите, что ваша ценность, 6328502092800000000
выше максимально допустимого).
Для справки, здесь у вас есть TIMESTAMP
определения для обоих языков SQL:
TIMESTAMP
в BigQuery Standard SQLTIMESTAMP
в BigQuery Legacy SQL
Руководство по переходу с Legacy SQL на Standrad SQL предлагает хорошее руководство по исправлению ошибок. invalid timestamp value
ошибки, с которыми вы сталкиваетесь. Предлагаются два основных подхода, приведенных ниже, но, пожалуйста, посетите документацию, чтобы получить подробную информацию о каждом из них:
- Используйте UDF для фильтрации недействительных временных меток.
- использование
SAFE_CAST
со столбцом метки времени для возвратаNULL
значения вместо ошибки.
Это означает TIMESTAMP
в таблице BigQuery имеет числовое значение 6328502092800000000.
Это числовое значение предназначено для представления количества микросекунд с начала эпохи Unix (1 января 1970 г., 00:00). Если вы сделаете расчет, это будет дата более чем 200 000 лет в будущем; сообщение об ошибке сообщает вам, что даты, начиная с 10 000 года нашей эры, не считаются действительными.
Глядя на ваше значение, мне кажется вероятным, что что-то пошло не так, и вы на самом деле представляете наносекунды с начала некоторой эпохи - неизмененное значение не должно быть загружено в BigQuery какTIMESTAMP
. Это может быть ошибка клиентской библиотеки, которую вы используете для загрузки данных в BigQuery, или кода, который передает ей данные.
Если мы просто предположим, что ваше значение равно "наносекундам с начала эпохи Unix", мы получим временную метку 17 июля 2170 года - возможно, то, что вы хотели, если вы ожидали, что даты в будущем будут сохранены. В качестве альтернативы может оказаться, что у нас неправильная эпоха (другими словами, возможно, вы отсчитываете наносекунды с другой начальной точки?). В этом случае вам нужно будет определить правильную эпоху (это зависит от того, откуда пришли данные!).